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);
        }
Example #2
0
        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));
        }
Example #3
0
        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;
            }
        }
Example #4
0
 internal static Camera CreateEnclosingPerspectiveCamera(double horizontalFieldOfView, double aspectRatio, Model3D model)
 {
     return(Helper3D.CreateEnclosingPerspectiveCamera(horizontalFieldOfView, aspectRatio, model != null ? model.Bounds : Rect3D.Empty, 0.8));
 }