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 bool CanUngroupAs3D(SceneElement element) { if (!Model3DGroupElement.GetIsGroup((SceneNode)element)) { return(ModelVisual3DElement.GetIsGroup(element)); } return(true); }
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); }
private static ModelVisual3DElement CreateModelVisual3DContainer(Model3DElement model3DElement, SceneViewModel sceneViewModel) { ModelVisual3DElement modelVisual3Delement = (ModelVisual3DElement)sceneViewModel.CreateSceneNode(PlatformTypes.ModelVisual3D); modelVisual3Delement.Content = (SceneNode)model3DElement; modelVisual3Delement.Name = (model3DElement.Name ?? "") + "Container"; return(modelVisual3Delement); }
private SceneNode[] Ungroup(Base3DElement group) { SceneElement parentElement = group.ParentElement; Matrix3D matrix3D = group.Transform.Value; Model3DGroupElement model3DgroupElement = group as Model3DGroupElement; ModelVisual3DElement modelVisual3Delement1 = group as ModelVisual3DElement; int index1 = 0; bool flag = false; if (model3DgroupElement != null) { index1 = model3DgroupElement.Children.Count; } else if (modelVisual3Delement1 != null) { index1 = modelVisual3Delement1.Children.Count; flag = modelVisual3Delement1.Model3DContent != null; } Base3DElement[] base3DelementArray = new Base3DElement[index1 + (flag ? true : false)]; Matrix3D[] matrix3DArray = new Matrix3D[index1 + (flag ? true : false)]; if (model3DgroupElement != null) { for (int index2 = 0; index2 < model3DgroupElement.Children.Count; ++index2) { base3DelementArray[index2] = (Base3DElement)model3DgroupElement.Children[index2]; } } else if (modelVisual3Delement1 != null) { for (int index2 = 0; index2 < modelVisual3Delement1.Children.Count; ++index2) { base3DelementArray[index2] = (Base3DElement)modelVisual3Delement1.Children[index2]; } if (flag) { base3DelementArray[index1] = (Base3DElement)modelVisual3Delement1.Model3DContent; matrix3DArray[index1] = modelVisual3Delement1.Transform.Value; } } for (int index2 = 0; index2 < index1; ++index2) { Base3DElement base3Delement = base3DelementArray[index2]; matrix3DArray[index2] = base3Delement.Transform.Value; } using (this.SceneViewModel.ForceBaseValue()) { int insertAt = group.GetCollectionContainer().IndexOf((SceneNode)group); if (group.ParentElement is Base3DElement) { this.SceneViewModel.AnimationEditor.DeleteAllAnimationsInSubtree(group.ParentElement); } else { this.SceneViewModel.AnimationEditor.DeleteAllAnimationsInSubtree((SceneElement)group); } this.SceneViewModel.RemoveElement((SceneNode)group); for (int index2 = index1 - 1; index2 >= 0; --index2) { Base3DElement base3Delement = base3DelementArray[index2]; base3Delement.Remove(); CanonicalTransform3D canonicalTransform3D = new CanonicalTransform3D(matrix3DArray[index2] * matrix3D); base3Delement.Transform = (Transform3D)canonicalTransform3D.ToTransform(); if (parentElement is Base3DElement) { GroupCommandHelpers.InsertElement(this.SceneViewModel, (Base3DElement)parentElement, (SceneNode)base3Delement, new int?(insertAt)); } else { GroupCommandHelpers.InsertElement(parentElement, (SceneNode)base3Delement, insertAt); } } if (flag) { ModelVisual3DElement modelVisual3Delement2 = parentElement as ModelVisual3DElement; base3DelementArray[index1].Remove(); CanonicalTransform3D canonicalTransform3D = new CanonicalTransform3D(matrix3DArray[index1] * matrix3D); base3DelementArray[index1].Transform = (Transform3D)canonicalTransform3D.ToTransform(); ModelVisual3DElement modelVisual3Delement3 = (ModelVisual3DElement)this.SceneViewModel.CreateSceneNode(typeof(ModelVisual3D)); modelVisual3Delement2.Children.Add((Visual3DElement)modelVisual3Delement3); modelVisual3Delement3.Content = (SceneNode)base3DelementArray[index1]; } } return((SceneNode[])base3DelementArray); }
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); }
public ModelVisual3DTimelineItem(TimelineItemManager timelineItemManager, ModelVisual3DElement element) : base(timelineItemManager, (Base3DElement)element) { }
internal static void InsertElement(SceneViewModel sceneViewModel, Base3DElement parent, SceneNode child, int?insertAt) { Model3DGroupElement model3DgroupElement = parent as Model3DGroupElement; ModelVisual3DElement modelVisual3Delement = parent as ModelVisual3DElement; Model3DElement model3Delement1 = child as Model3DElement; Visual3DElement visual3Delement = child as Visual3DElement; if (modelVisual3Delement != null) { if (visual3Delement != null) { if (insertAt.HasValue) { modelVisual3Delement.Children.Insert(insertAt.Value, visual3Delement); } else { modelVisual3Delement.Children.Add(visual3Delement); } } else { if (model3Delement1 == null) { return; } modelVisual3Delement.Content = (SceneNode)model3Delement1; } } else { if (model3DgroupElement == null) { return; } if (visual3Delement != null) { Model3DElement model3Delement2 = BaseElement3DCoercionHelper.CoerceToModel3D(sceneViewModel, (SceneElement)visual3Delement); if (insertAt.HasValue) { model3DgroupElement.Children.Insert(insertAt.Value, model3Delement2); } else { model3DgroupElement.Children.Add(model3Delement2); } } else { if (model3Delement1 == null) { return; } if (insertAt.HasValue) { model3DgroupElement.Children.Insert(insertAt.Value, model3Delement1); } else { model3DgroupElement.Children.Add(model3Delement1); } } } }