protected override bool OnButtonDown(Point pointerPosition)
        {
            this.isActive = false;
            Viewport3DElement firstHitViewport3D = this.ActiveView.GetFirstHitViewport3D(pointerPosition);

            if (firstHitViewport3D == null || firstHitViewport3D.ViewObject.PlatformSpecificObject == null)
            {
                return(false);
            }
            this.cameraElement = firstHitViewport3D.Camera;
            if (this.cameraElement == null || !this.cameraElement.IsSelectable)
            {
                return(false);
            }
            this.scale = Helper3D.UnitsPerPixel((Viewport3D)firstHitViewport3D.ViewObject.PlatformSpecificObject, new Point3D(0.0, 0.0, 0.0));
            this.rootToViewport3DMatrix       = ElementUtilities.GetComputedTransform(firstHitViewport3D.Visual != null ? firstHitViewport3D.Visual.PlatformSpecificObject as Visual : (Visual)null, (Visual)this.ActiveSceneViewModel.DefaultView.ViewRootContainer);
            this.pointerInViewportCoordinates = pointerPosition * this.rootToViewport3DMatrix;
            this.SetMovementMode();
            this.cameraInitialUp       = (Vector3D)this.cameraElement.GetComputedValue(ProjectionCameraElement.UpDirectionProperty);
            this.cameraInitialPosition = (Point3D)this.cameraElement.GetComputedValue(ProjectionCameraElement.PositionProperty);
            this.cameraInitialLookAt   = this.cameraInitialPosition + (Vector3D)this.cameraElement.GetComputedValue(ProjectionCameraElement.LookDirectionProperty);
            this.totalAzimuthDelta     = 0.0;
            this.totalElevationDelta   = 0.0;
            this.lastPoint             = this.pointerInViewportCoordinates;
            this.EnsureEditTransaction();
            this.isActive = true;
            return(true);
        }
Exemple #2
0
        private void AddAdornerSet3D(AdornerSet3D adornerSet3D)
        {
            Base3DElement element = adornerSet3D.Element;

            if (element == null)
            {
                throw new InvalidOperationException(ExceptionStringTable.AdornedBase3DElementMayNotBeNull);
            }
            Viewport3DElement viewport = element.Viewport;

            if (viewport == null)
            {
                throw new InvalidOperationException(ExceptionStringTable.AdornedViewport3DElementMayNotBeNull);
            }
            AdornerLayer.ElementInfo createElementInfo = this.GetOrCreateElementInfo(this.CreateOrGetAdornerElementSetForElement((SceneElement)viewport));
            if (createElementInfo.AdornerSet3DContainer == null)
            {
                createElementInfo.AdornerSet3DContainer = new AdornerSet3DContainer(viewport);
                this.adornerSet3DContainers.Add(createElementInfo.AdornerSet3DContainer);
            }
            createElementInfo.Update((SceneElement)viewport, this, AdornerLayer.ElementInfoUpdateSource.Explicit);
            createElementInfo.AddAdornerSet(adornerSet3D);
            if (createElementInfo.AdornerSet3DContainer.Parent == this)
            {
                return;
            }
            this.children.Add((Visual)createElementInfo.AdornerSet3DContainer);
        }
Exemple #3
0
        private void RemoveAdornerSet3D(AdornerSet3D adornerSet3D)
        {
            Viewport3DElement adornedViewport = adornerSet3D.AdornerSet3DContainer.AdornedViewport;

            if (adornedViewport == null)
            {
                throw new InvalidOperationException(ExceptionStringTable.AdornedViewport3DElementMayNotBeNull);
            }
            IList <AdornerElementSet> containingElement = this.GetAdornerElementSetsContainingElement((SceneElement)adornedViewport);

            if (containingElement.Count <= 0)
            {
                return;
            }
            foreach (AdornerElementSet adornerElementSet in (IEnumerable <AdornerElementSet>)containingElement)
            {
                AdornerLayer.ElementInfo elementInfo = this.GetElementInfo(adornerElementSet);
                if (elementInfo.AdornerSet3DContainer != null && elementInfo.AdornerSet3DContainer.AdornerSets.Contains(adornerSet3D) && (elementInfo != null && elementInfo.RemoveAdornerSet(adornerSet3D)))
                {
                    AdornerSet3DContainer adornerSet3Dcontainer = elementInfo.AdornerSet3DContainer;
                    if (adornerSet3Dcontainer.AdornerSetCount == 0)
                    {
                        elementInfo.AdornerSet3DContainer = (AdornerSet3DContainer)null;
                        this.children.Remove((Visual)adornerSet3Dcontainer);
                        this.adornerSet3DContainers.Remove(adornerSet3Dcontainer);
                    }
                    if (elementInfo.IsEmpty)
                    {
                        this.elementMap.Remove(adornerElementSet);
                    }
                }
            }
        }
        public static Viewport3DElement GetEnclosingViewportForModelVisual3D(SceneViewModel sceneViewModel, ModelVisual3DElement modelVisual3D)
        {
            Viewport3DElement viewport3Delement = (Viewport3DElement)sceneViewModel.CreateSceneNode(PlatformTypes.Viewport3D);

            viewport3Delement.SetValueAsWpf(Viewport3DElement.ClipToBoundsProperty, (object)true);
            Camera perspectiveCamera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, 4.0 / 3.0, modelVisual3D.DesignTimeBounds, 0.8);

            viewport3Delement.Camera = (CameraElement)sceneViewModel.CreateSceneNode((object)perspectiveCamera);
            ModelVisual3DElement modelVisual3Delement = (ModelVisual3DElement)sceneViewModel.CreateSceneNode(PlatformTypes.ModelVisual3D);

            modelVisual3Delement.Name = "World";
            viewport3Delement.Children.Add((Visual3DElement)modelVisual3Delement);
            AmbientLightElement ambientLightElement = (AmbientLightElement)sceneViewModel.CreateSceneNode(PlatformTypes.AmbientLight);

            ambientLightElement.SetValueAsWpf(LightElement.ColorProperty, (object)Color.FromRgb((byte)127, (byte)127, (byte)127));
            ambientLightElement.Name = "AmbientLight";
            modelVisual3Delement.Children.Add((Visual3DElement)GeometryCreationHelper3D.CreateModelVisual3DContainer((Model3DElement)ambientLightElement, sceneViewModel));
            DirectionalLightElement directionalLightElement = (DirectionalLightElement)sceneViewModel.CreateSceneNode(PlatformTypes.DirectionalLight);

            directionalLightElement.SetValueAsWpf(LightElement.ColorProperty, (object)Color.FromRgb((byte)63, (byte)63, (byte)63));
            directionalLightElement.SetValueAsWpf(DirectionalLightElement.DirectionProperty, (object)new Vector3D(0.0, 0.0, -1.0));
            directionalLightElement.SetValueAsWpf(Model3DElement.TransformProperty, (object)new TranslateTransform3D(0.0, 0.0, 3.0));
            directionalLightElement.Name = "DirectionalLight";
            modelVisual3Delement.Children.Add((Visual3DElement)GeometryCreationHelper3D.CreateModelVisual3DContainer((Model3DElement)directionalLightElement, sceneViewModel));
            modelVisual3Delement.Children.Add((Visual3DElement)modelVisual3D);
            return(viewport3Delement);
        }
Exemple #5
0
        private void AddModel3DContainerToViewport(Viewport3DElement viewport, Model3DElement model)
        {
            ModelVisual3DElement modelVisual3Delement = (ModelVisual3DElement)this.DesignerContext.ActiveSceneViewModel.CreateSceneNode(typeof(ModelVisual3D));

            modelVisual3Delement.Name    = model.Name + "Container";
            modelVisual3Delement.Content = (SceneNode)model;
            viewport.Children.Add((Visual3DElement)modelVisual3Delement);
        }
Exemple #6
0
 internal AdornerSet3DContainer GetAdornerSet3DContainer(Viewport3DElement viewport3DElement)
 {
     foreach (AdornerElementSet adornerElementSet in (IEnumerable <AdornerElementSet>) this.GetAdornerElementSetsContainingElement((SceneElement)viewport3DElement))
     {
         AdornerLayer.ElementInfo elementInfo = this.GetElementInfo(adornerElementSet);
         if (elementInfo != null && elementInfo.AdornerSet3DContainer != null)
         {
             return(elementInfo.AdornerSet3DContainer);
         }
     }
     return((AdornerSet3DContainer)null);
 }
        public override void Draw(DrawingContext drawingContext, Matrix matrix)
        {
            object platformSpecificObject = this.AdornerSet.Element.ViewTargetElement.PlatformSpecificObject;

            foreach (SceneElement sceneElement in this.Element.ViewModel.ElementSelectionSet.Selection)
            {
                Base3DElement element = sceneElement as Base3DElement;
                if (element != null && element.IsViewObjectValid)
                {
                    Viewport3DElement viewport = element.Viewport;
                    if (viewport != null && viewport.ViewObject.PlatformSpecificObject == platformSpecificObject)
                    {
                        HighlightAdorner3D.DrawCube(drawingContext, matrix, element, HighlightAdorner3D.DefaultPen);
                    }
                }
            }
        }
Exemple #8
0
        protected override void Postprocess(BaseFrameworkElement originalElement, BaseFrameworkElement newElement, Dictionary <IPropertyId, SceneNode> properties, Rect layoutRect)
        {
            Viewport3DElement viewport = (Viewport3DElement)newElement;

            this.AddModel3DContainerToViewport(viewport, (Model3DElement)this.newGeometryElement);
            Camera perspectiveCamera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, layoutRect.Width / layoutRect.Height, this.newGeometryElement.DesignTimeBounds, 1.0);

            viewport.Camera = (CameraElement)this.DesignerContext.ActiveSceneViewModel.CreateSceneNode((object)perspectiveCamera);
            AmbientLightElement ambientLightElement = (AmbientLightElement)this.DesignerContext.ActiveSceneViewModel.CreateSceneNode(typeof(AmbientLight));

            ambientLightElement.Name = "Ambient";
            ambientLightElement.SetValue(LightElement.ColorProperty, (object)Color.FromRgb((byte)sbyte.MinValue, (byte)sbyte.MinValue, (byte)sbyte.MinValue));
            this.AddModel3DContainerToViewport(viewport, (Model3DElement)ambientLightElement);
            DirectionalLightElement directionalLightElement = (DirectionalLightElement)this.DesignerContext.ActiveSceneViewModel.CreateSceneNode(typeof(DirectionalLight));

            directionalLightElement.Name = "Directional";
            directionalLightElement.SetValue(LightElement.ColorProperty, (object)Color.FromRgb((byte)127, (byte)127, (byte)127));
            directionalLightElement.SetValue(DirectionalLightElement.DirectionProperty, (object)new Vector3D(0.0, 0.0, -1.0));
            directionalLightElement.Transform = (Transform3D) new TranslateTransform3D(new Vector3D(0.0, 0.0, 3.0));
            this.AddModel3DContainerToViewport(viewport, (Model3DElement)directionalLightElement);
        }
Exemple #9
0
        public void InvalidateAdornerVisuals(SceneElement sceneElement)
        {
            if (sceneElement == null)
            {
                throw new ArgumentNullException("sceneElement");
            }
            if (!sceneElement.IsAttached)
            {
                return;
            }
            Base3DElement optionalBase3DElement = sceneElement as Base3DElement;

            foreach (AdornerElementSet adornerElementSet in (IEnumerable <AdornerElementSet>) this.GetAdornerElementSetsContainingElement(sceneElement))
            {
                AdornerLayer.ElementInfo elementInfo = this.GetElementInfo(adornerElementSet);
                if (elementInfo != null)
                {
                    elementInfo.InvalidateRender(optionalBase3DElement);
                }
                adornerElementSet.Invalidate();
            }
            if (optionalBase3DElement == null)
            {
                return;
            }
            Viewport3DElement viewport = optionalBase3DElement.Viewport;

            if (viewport == null)
            {
                return;
            }
            foreach (AdornerElementSet adornerElementSet in (IEnumerable <AdornerElementSet>) this.GetAdornerElementSetsContainingElement((SceneElement)viewport))
            {
                AdornerLayer.ElementInfo elementInfo = this.GetElementInfo(adornerElementSet);
                if (elementInfo != null)
                {
                    elementInfo.InvalidateRender(optionalBase3DElement);
                }
            }
        }
        public static void DrawCube(DrawingContext drawingContext, Matrix matrix, Base3DElement element, Pen pen)
        {
            Viewport3DElement viewport1 = element.Viewport;

            if (viewport1 == null)
            {
                return;
            }
            Viewport3D viewport2                      = viewport1.ViewObject.PlatformSpecificObject as Viewport3D;
            Rect3D     localSpaceBounds               = element.LocalSpaceBounds;
            Matrix3D   viewport3DtoElement            = element.GetComputedTransformFromViewport3DToElement();
            Matrix3D   matrix3D                       = Helper3D.CameraRotationTranslationMatrix(viewport2.Camera);
            Matrix3D   cameraToObject                 = viewport3DtoElement * matrix3D;
            KeyValuePair <Point, bool> keyValuePair1  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location);
            KeyValuePair <Point, bool> keyValuePair2  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(localSpaceBounds.SizeX, 0.0, 0.0));
            KeyValuePair <Point, bool> keyValuePair3  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(localSpaceBounds.SizeX, localSpaceBounds.SizeY, 0.0));
            KeyValuePair <Point, bool> keyValuePair4  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(0.0, localSpaceBounds.SizeY, 0.0));
            KeyValuePair <Point, bool> keyValuePair5  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(0.0, 0.0, localSpaceBounds.SizeZ));
            KeyValuePair <Point, bool> keyValuePair6  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(localSpaceBounds.SizeX, 0.0, localSpaceBounds.SizeZ));
            KeyValuePair <Point, bool> keyValuePair7  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(localSpaceBounds.SizeX, localSpaceBounds.SizeY, localSpaceBounds.SizeZ));
            KeyValuePair <Point, bool> keyValuePair8  = HighlightAdorner3D.Calculate2DPoint(viewport2, cameraToObject, viewport3DtoElement, matrix, localSpaceBounds.Location + new Vector3D(0.0, localSpaceBounds.SizeY, localSpaceBounds.SizeZ));
            StreamGeometry             streamGeometry = new StreamGeometry();
            StreamGeometryContext      context        = streamGeometry.Open();

            HighlightAdorner3D.DrawLine(context, keyValuePair1, keyValuePair2);
            HighlightAdorner3D.DrawLine(context, keyValuePair2, keyValuePair3);
            HighlightAdorner3D.DrawLine(context, keyValuePair3, keyValuePair4);
            HighlightAdorner3D.DrawLine(context, keyValuePair4, keyValuePair1);
            HighlightAdorner3D.DrawLine(context, keyValuePair5, keyValuePair6);
            HighlightAdorner3D.DrawLine(context, keyValuePair6, keyValuePair7);
            HighlightAdorner3D.DrawLine(context, keyValuePair7, keyValuePair8);
            HighlightAdorner3D.DrawLine(context, keyValuePair8, keyValuePair5);
            HighlightAdorner3D.DrawLine(context, keyValuePair6, keyValuePair2);
            HighlightAdorner3D.DrawLine(context, keyValuePair7, keyValuePair3);
            HighlightAdorner3D.DrawLine(context, keyValuePair5, keyValuePair1);
            HighlightAdorner3D.DrawLine(context, keyValuePair8, keyValuePair4);
            context.Close();
            streamGeometry.Freeze();
            drawingContext.DrawGeometry((Brush)null, pen, (System.Windows.Media.Geometry)streamGeometry);
        }
        public AdornerSet3DContainer(Viewport3DElement adornedViewport)
        {
            if (adornedViewport == null)
            {
                throw new ArgumentNullException("adornedViewport");
            }
            this.adornedViewport = adornedViewport;
            Rect computedTightBounds = adornedViewport.GetComputedTightBounds();

            this.shadowAdorningContainer = new Viewport3DVisual();
            this.shadowAdorningContainer.Children.Add((Visual3D)this.CreateContainerWorld());
            this.shadowAdorningContainer.Viewport = computedTightBounds;
            this.orthographicAdorningContainer    = new Viewport3DVisual();
            this.orthographicAdorningContainer.Children.Add((Visual3D)this.CreateContainerWorld());
            this.orthographicAdorningContainer.Viewport = computedTightBounds;
            ProjectionCamera projectionCamera1 = this.adornedViewport.Camera.ViewObject.PlatformSpecificObject as ProjectionCamera;
            ProjectionCamera projectionCamera2;

            if (projectionCamera1 != null)
            {
                projectionCamera2           = projectionCamera1.Clone();
                projectionCamera2.Transform = Transform3D.Identity;
            }
            else
            {
                projectionCamera2 = (ProjectionCamera) new PerspectiveCamera(new Point3D(0.0, 0.0, 10.0), new Vector3D(0.0, 0.0, 1.0), new Vector3D(0.0, 1.0, 0.0), 35.0);
            }
            this.shadowAdorningContainer.Camera = (Camera)projectionCamera2;
            OrthographicCamera orthographicCamera = new OrthographicCamera(projectionCamera2.Position, projectionCamera2.LookDirection, projectionCamera2.UpDirection, 3.0);

            orthographicCamera.NearPlaneDistance      = 0.01;
            orthographicCamera.FarPlaneDistance       = 1000000.0;
            this.orthographicAdorningContainer.Camera = (Camera)orthographicCamera;
            this.Children.Add((Visual)this.shadowAdorningContainer);
            this.Children.Add((Visual)this.orthographicAdorningContainer);
        }
Exemple #12
0
        private SceneElement GroupElements()
        {
            ReadOnlyCollection <SceneElement> selection = this.SceneViewModel.ElementSelectionSet.Selection;

            if (selection[0] is BaseFrameworkElement)
            {
                return((SceneElement)null);
            }
            if (!(selection[0] is Base3DElement))
            {
                return((SceneElement)null);
            }
            SceneElement primarySelection = this.SceneViewModel.ElementSelectionSet.PrimarySelection;

            this.SceneViewModel.ElementSelectionSet.Clear();
            List <SceneElement> list           = new List <SceneElement>((IEnumerable <SceneElement>)selection);
            Base3DElement       base3Delement1 = (Base3DElement)null;
            int num = int.MaxValue;
            Viewport3DElement viewport = ((Base3DElement)list[0]).Viewport;

            foreach (Base3DElement base3Delement2 in list)
            {
                if (base3Delement2.Viewport == viewport)
                {
                    int depthFromViewport3D = base3Delement2.DepthFromViewport3D;
                    if (depthFromViewport3D < num)
                    {
                        base3Delement1 = base3Delement2;
                        num            = depthFromViewport3D;
                    }
                }
            }
            SceneElement parentElement = base3Delement1.ParentElement;
            Matrix3D     matrix3D      = Matrix3D.Identity;

            if (parentElement is Base3DElement)
            {
                matrix3D = ((Base3DElement)parentElement).GetComputedTransformFromViewport3DToElement();
                matrix3D.Invert();
            }
            Base3DElement parent = (Base3DElement)null;

            if (list[0] is Model3DElement)
            {
                Model3DGroup      model3Dgroup      = new Model3DGroup();
                Model3DCollection model3Dcollection = new Model3DCollection();
                model3Dgroup.Children = model3Dcollection;
                parent = (Base3DElement)this.SceneViewModel.CreateSceneNode((object)model3Dgroup);
            }
            else if (list[0] is Visual3DElement)
            {
                parent = (Base3DElement)this.SceneViewModel.CreateSceneNode((object)new ModelVisual3D());
            }
            SceneNodeIDHelper sceneNodeIdHelper = new SceneNodeIDHelper(this.SceneViewModel, (SceneNode)this.SceneViewModel.ActiveSceneInsertionPoint.SceneElement.StoryboardContainer);
            string            validElementId    = sceneNodeIdHelper.GetValidElementID((SceneNode)parent, "group3D");

            sceneNodeIdHelper.SetLocalName((SceneNode)parent, validElementId);
            using (this.SceneViewModel.ForceBaseValue())
            {
                Matrix3D[] matrix3DArray = new Matrix3D[list.Count];
                for (int index = 0; index < list.Count; ++index)
                {
                    matrix3DArray[index] = ((Base3DElement)list[index]).GetComputedTransformFromViewport3DToElement();
                }
                foreach (Base3DElement base3Delement2 in list)
                {
                    if (base3Delement2 != primarySelection)
                    {
                        base3Delement2.Remove();
                    }
                }
                int insertAt = primarySelection.GetCollectionContainer().IndexOf((SceneNode)primarySelection);
                primarySelection.Remove();
                if (parentElement is Viewport3DElement)
                {
                    GroupCommandHelpers.InsertElement(parentElement, (SceneNode)parent, insertAt);
                }
                else
                {
                    GroupCommandHelpers.InsertElement(this.SceneViewModel, (Base3DElement)parentElement, (SceneNode)parent, new int?(insertAt));
                }
                for (int index = 0; index < list.Count; ++index)
                {
                    GroupCommandHelpers.InsertElement(this.SceneViewModel, parent, (SceneNode)list[index], new int?());
                    ((Base3DElement)list[index]).Transform = (Transform3D) new CanonicalTransform3D(matrix3DArray[index] * matrix3D);
                }
            }
            return((SceneElement)parent);
        }
Exemple #13
0
 internal void ApplyAfterInsertionDefaultsToElements(IList <SceneNode> nodes, SceneNode rootNode)
 {
     foreach (SceneNode node in (IEnumerable <SceneNode>)nodes)
     {
         SceneElement element = node as SceneElement;
         if (element != null)
         {
             string name = element.Name;
             if (name == null)
             {
                 StyleAsset relatedUserThemeAsset = this.GetRelatedUserThemeAsset(node, rootNode);
                 if (relatedUserThemeAsset != null)
                 {
                     DocumentCompositeNode documentCompositeNode = relatedUserThemeAsset.ResourceModel.ValueNode as DocumentCompositeNode;
                     if (documentCompositeNode != null)
                     {
                         name = documentCompositeNode.GetValue <string>(DesignTimeProperties.StyleDefaultContentProperty);
                         double num1 = documentCompositeNode.GetValue <double>(DesignTimeProperties.ExplicitWidthProperty);
                         if (num1 > 0.0)
                         {
                             DefaultTypeInstantiator.SetIfUnset(node, BaseFrameworkElement.WidthProperty, (object)num1);
                         }
                         double num2 = documentCompositeNode.GetValue <double>(DesignTimeProperties.ExplicitHeightProperty);
                         if (num2 > 0.0)
                         {
                             DefaultTypeInstantiator.SetIfUnset(node, BaseFrameworkElement.HeightProperty, (object)num2);
                         }
                     }
                 }
             }
             if (name == null)
             {
                 name = element.TargetType.Name;
             }
             if (element.Name == null && this.ViewModel.DesignerContext.ProjectManager.OptionsModel.NameInteractiveElementsByDefault && Enumerable.FirstOrDefault <ITypeId>((IEnumerable <ITypeId>)DefaultTypeInstantiator.InteractiveElementTypes, (Func <ITypeId, bool>)(i =>
             {
                 IType type = this.ViewModel.ProjectContext.ResolveType(i);
                 if (type != null)
                 {
                     return(type.IsAssignableFrom((ITypeId)element.Type));
                 }
                 return(false);
             })) != null)
             {
                 element.EnsureNamed();
             }
             if (ProjectNeutralTypes.HeaderedContentControl.IsAssignableFrom((ITypeId)node.Type))
             {
                 DefaultTypeInstantiator.SetIfUnset(node, HeaderedControlProperties.HeaderedContentHeaderProperty, (object)name);
             }
             else if (ProjectNeutralTypes.HeaderedItemsControl.IsAssignableFrom((ITypeId)node.Type) && !PlatformTypes.ToolBar.IsAssignableFrom((ITypeId)node.Type))
             {
                 DefaultTypeInstantiator.SetIfUnset(node, HeaderedControlProperties.HeaderedItemsHeaderProperty, (object)name);
             }
             else if (PlatformTypes.ContentControl.IsAssignableFrom((ITypeId)node.Type) && !PlatformTypes.ScrollViewer.IsAssignableFrom((ITypeId)node.Type) && !PlatformTypes.UserControl.IsAssignableFrom((ITypeId)node.Type))
             {
                 if (ProjectNeutralTypes.TabItem.IsAssignableFrom((ITypeId)node.Type) && this.ViewModel.ProjectContext.IsCapabilitySet(PlatformCapability.UseHeaderOnTabItem))
                 {
                     IPropertyId property = (IPropertyId)ProjectNeutralTypes.TabItem.GetMember(MemberType.LocalProperty, "Header", MemberAccessTypes.Public);
                     DefaultTypeInstantiator.SetIfUnset(node, property, (object)name);
                 }
                 else
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, ContentControlElement.ContentProperty, (object)name);
                 }
             }
             else
             {
                 BaseTextElement baseTextElement;
                 if ((baseTextElement = node as BaseTextElement) != null)
                 {
                     if (string.IsNullOrEmpty(baseTextElement.Text.Trim()))
                     {
                         baseTextElement.Text = name;
                     }
                     if (PlatformTypes.TextBox.IsAssignableFrom((ITypeId)node.Type))
                     {
                         DefaultTypeInstantiator.SetAsWpfIfUnset(node, TextBoxElement.TextWrappingProperty, (object)TextWrapping.Wrap);
                     }
                     if (!node.ProjectContext.IsCapabilitySet(PlatformCapability.IsWpf) && PlatformTypes.RichTextBox.IsAssignableFrom((ITypeId)node.Type))
                     {
                         DefaultTypeInstantiator.SetAsWpfIfUnset(node, RichTextBoxElement.TextWrappingProperty, (object)TextWrapping.Wrap);
                     }
                 }
                 else if (PlatformTypes.TextBlock.IsAssignableFrom((ITypeId)node.Type))
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, TextBlockElement.TextProperty, (object)name);
                     DefaultTypeInstantiator.SetAsWpfIfUnset(node, TextBlockElement.TextWrappingProperty, (object)TextWrapping.Wrap);
                 }
                 else if (PlatformTypes.ListView.IsAssignableFrom((ITypeId)node.Type))
                 {
                     GridViewElement gridViewElement = (GridViewElement)node.ViewModel.CreateSceneNode(PlatformTypes.GridView);
                     SceneNode       sceneNode       = node.ViewModel.CreateSceneNode(PlatformTypes.GridViewColumn);
                     gridViewElement.Columns.Add(sceneNode);
                     node.SetValueAsSceneNode(DefaultTypeInstantiator.ListViewViewProperty, (SceneNode)gridViewElement);
                 }
                 else if (PlatformTypes.Border.IsAssignableFrom((ITypeId)node.Type))
                 {
                     DefaultTypeInstantiator.SetAsWpfIfUnset(node, BorderElement.BorderBrushProperty, (object)Brushes.Black);
                     DefaultTypeInstantiator.SetAsWpfIfUnset(node, BorderElement.BorderThicknessProperty, (object)new Thickness(1.0));
                 }
                 else if (typeof(FlowDocumentScrollViewer).IsAssignableFrom(node.TargetType))
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, FlowDocumentScrollViewerElement.DocumentProperty, (object)new FlowDocument((Block) new Paragraph((Inline) new Run(name))));
                 }
                 else if (typeof(Glyphs).IsAssignableFrom(node.TargetType))
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, DefaultTypeInstantiator.GlyphsUnicodeStringProperty, (object)name);
                     DefaultTypeInstantiator.SetIfUnset(node, DefaultTypeInstantiator.GlyphsFillProperty, (object)Brushes.Black);
                     DefaultTypeInstantiator.SetIfUnset(node, DefaultTypeInstantiator.GlyphsFontRenderingSizeEmProperty, (object)12.0);
                 }
                 else if (typeof(Viewport3D).IsAssignableFrom(node.TargetType))
                 {
                     Viewport3DElement viewport3Delement = node as Viewport3DElement;
                     if (viewport3Delement != null)
                     {
                         Camera camera1 = (Camera)Viewport3D.CameraProperty.DefaultMetadata.DefaultValue;
                         Camera camera2 = (Camera)viewport3Delement.GetComputedValue(Viewport3DElement.CameraProperty);
                         if (camera2 == null || PropertyUtilities.Compare((object)camera1, (object)camera2, this.sceneView))
                         {
                             Camera perspectiveCamera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, 1.0, new Rect3D(-1.0, -1.0, -1.0, 2.0, 2.0, 2.0), 1.0);
                             DefaultTypeInstantiator.SetIfUnset((SceneNode)viewport3Delement, Viewport3DElement.CameraProperty, (object)perspectiveCamera);
                         }
                     }
                 }
             }
         }
     }
 }
Exemple #14
0
        protected virtual IList <SceneElement> AddToDocumentInternal(string importedFilePath, SceneElement element, ISceneInsertionPoint insertionPoint, SceneViewModel sceneViewModel, SceneEditTransaction undoTransaction)
        {
            List <SceneElement> list              = new List <SceneElement>();
            SceneElement        sceneElement      = insertionPoint.SceneElement;
            Viewport3DElement   viewport3Delement = sceneElement as Viewport3DElement;

            if (viewport3Delement != null || sceneElement is Base3DElement)
            {
                if (element.TargetType == typeof(Image))
                {
                    string[] strArray = importedFilePath.Split('.');
                    string   newName  = strArray.Length <= 1 || strArray[0] == null ? "Image" : strArray[0];
                    element = (SceneElement)GeometryCreationHelper3D.ConvertImageTo3D(sceneViewModel, (BaseFrameworkElement)element, newName);
                }
                IChildContainer3D childContainer3D = sceneElement as IChildContainer3D;
                if (ModelVisual3DElement.ContentProperty.Equals((object)insertionPoint.Property))
                {
                    element = (SceneElement)BaseElement3DCoercionHelper.CoerceToModel3D(sceneViewModel, element);
                    if (element != null)
                    {
                        list.Add(element);
                        insertionPoint.Insert((SceneNode)element);
                    }
                }
                else if (childContainer3D != null)
                {
                    Base3DElement child = (Base3DElement)element;
                    list.Add(childContainer3D.AddChild(sceneViewModel, child));
                    if (viewport3Delement != null && viewport3Delement.Camera == null)
                    {
                        ModelVisual3DElement modelVisual3Delement = element as ModelVisual3DElement;
                        Camera camera;
                        if (modelVisual3Delement != null)
                        {
                            Rect computedTightBounds = viewport3Delement.GetComputedTightBounds();
                            camera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, computedTightBounds.Width / computedTightBounds.Height, modelVisual3Delement.DesignTimeBounds, 0.8);
                        }
                        else
                        {
                            camera = (Camera) new PerspectiveCamera(new Point3D(0.0, 0.0, -5.0), new Vector3D(0.0, 0.0, 1.0), new Vector3D(0.0, 1.0, 0.0), 45.0);
                        }
                        viewport3Delement.Camera = (CameraElement)sceneViewModel.CreateSceneNode((object)camera);
                    }
                }
            }
            else
            {
                ModelVisual3DElement modelVisual3D = element as ModelVisual3DElement;
                if (modelVisual3D != null)
                {
                    Viewport3DElement forModelVisual3D = GeometryCreationHelper3D.GetEnclosingViewportForModelVisual3D(sceneViewModel, modelVisual3D);
                    list.Add((SceneElement)forModelVisual3D);
                    insertionPoint.Insert((SceneNode)forModelVisual3D);
                }
                else if (insertionPoint.CanInsert((ITypeId)element.Type))
                {
                    list.Add(element);
                    insertionPoint.Insert((SceneNode)element);
                }
            }
            return((IList <SceneElement>)list);
        }