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); }
internal static Camera CreateEnclosingPerspectiveCamera(double horizontalFieldOfView, double aspectRatio, List <Model3D> models) { Rect3D empty = Rect3D.Empty; foreach (Model3D model3D in models) { if (model3D != null) { empty.Union(model3D.Bounds); } } return(Helper3D.CreateEnclosingPerspectiveCamera(horizontalFieldOfView, aspectRatio, empty, 0.8)); }
private static void UnitTestAddCameraToViewport3D(Camera camera, Viewport3D viewport, double width, double height, Model3D model) { List <Model3D> models = new List <Model3D>(); models.Add(model); if (camera == null) { if (double.IsNaN(height) || double.IsNaN(width)) { viewport.Camera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, 1.0, models); } else { viewport.Camera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, height / width, models); } } else { viewport.Camera = camera; } }
internal static Camera CreateEnclosingPerspectiveCamera(double horizontalFieldOfView, double aspectRatio, Model3D model) { return(Helper3D.CreateEnclosingPerspectiveCamera(horizontalFieldOfView, aspectRatio, model != null ? model.Bounds : Rect3D.Empty, 0.8)); }