public VisualTree3DView(Visual visual, int dpi)
        {
            var directionalLight1 = new DirectionalLight(Colors.White, new Vector3D(0, 0, 1));
            var directionalLight2 = new DirectionalLight(Colors.White, new Vector3D(0, 0, -1));

            double z     = 0;
            var    model = this.ConvertVisualToModel3D(visual, dpi, ref z);

            var group = new Model3DGroup();

            group.Children.Add(directionalLight1);
            group.Children.Add(directionalLight2);
            group.Children.Add(model);
            this.zScaleTransform = new ScaleTransform3D();
            group.Transform      = this.zScaleTransform;

            var modelVisual = new ModelVisual3D
            {
                Content = @group
            };

            var          bounds         = model.Bounds;
            const double fieldOfView    = 45;
            var          lookAtPoint    = new Point3D(bounds.X + (bounds.SizeX / 2), bounds.Y + (bounds.SizeY / 2), bounds.Z + (bounds.SizeZ / 2));
            var          cameraDistance = 0.5 * bounds.SizeX / Math.Tan(0.5 * fieldOfView * Math.PI / 180);
            var          position       = lookAtPoint - new Vector3D(0, 0, cameraDistance);
            Camera       camera         = new PerspectiveCamera(position, new Vector3D(0, 0, 1), new Vector3D(0, -1, 0), fieldOfView);

            this.zScaleTransform.CenterZ = lookAtPoint.Z;

            this.Children.Add(modelVisual);
            this.Camera       = camera;
            this.ClipToBounds = false;
            this.Width        = 500;
            this.Height       = 500;

            this.trackballBehavior = new TrackballBehavior(this, lookAtPoint);
        }
示例#2
0
        public VisualTree3DView(Visual visual)
        {
            DirectionalLight directionalLight1 = new DirectionalLight(Colors.White, new Vector3D(0, 0, 1));
            DirectionalLight directionalLight2 = new DirectionalLight(Colors.White, new Vector3D(0, 0, -1));

            double  z     = 0;
            Model3D model = ConvertVisualToModel3D(visual, ref z);

            Model3DGroup group = new Model3DGroup();

            group.Children.Add(directionalLight1);
            group.Children.Add(directionalLight2);
            group.Children.Add(model);
            _zScaleTransform = new ScaleTransform3D();
            group.Transform  = _zScaleTransform;

            ModelVisual3D modelVisual = new ModelVisual3D {
                Content = group
            };

            Rect3D       bounds         = model.Bounds;
            const double fieldOfView    = 45;
            Point3D      lookAtPoint    = new Point3D(bounds.X + bounds.SizeX / 2, bounds.Y + bounds.SizeY / 2, bounds.Z + bounds.SizeZ / 2);
            double       cameraDistance = 0.5 * bounds.SizeX / Math.Tan(0.5 * fieldOfView * Math.PI / 180);
            Point3D      position       = lookAtPoint - new Vector3D(0, 0, cameraDistance);
            Camera       camera         = new PerspectiveCamera(position, new Vector3D(0, 0, 1), new Vector3D(0, -1, 0), fieldOfView);

            _zScaleTransform.CenterZ = lookAtPoint.Z;

            Children.Add(modelVisual);
            Camera       = camera;
            ClipToBounds = false;
            Width        = 500;
            Height       = 500;

            _trackballBehavior = new TrackballBehavior(this, lookAtPoint);
        }