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); }
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); }
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); }
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); }
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); } } } }
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); }
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); }
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); }
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); } } } } } } }
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); }