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 CreateLightTimelineCommandBinding_Execute() { using (SceneEditTransaction editTransaction = this.Element.DesignerContext.ActiveDocument.CreateEditTransaction(StringTable.CreateLight)) { AmbientLightElement ambientLightElement = (AmbientLightElement)this.Element.ViewModel.CreateSceneNode((object)new AmbientLight(Color.FromRgb((byte)127, (byte)127, (byte)127))); ambientLightElement.Name = "Light"; ((Model3DGroupElement)this.Element).Children.Add((Model3DElement)ambientLightElement); editTransaction.Commit(); } }
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); }