/// <summary> /// Handles clicks on the view cube. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="ViewCubeVisual3D.ClickedEventArgs" /> instance containing the event data.</param> private void ViewCubeClicked(object sender, ViewCubeVisual3D.ClickedEventArgs e) { var pc = this.Camera as ProjectionCamera; if (pc == null) { return; } var target = pc.Position + pc.LookDirection; double distance = pc.LookDirection.Length; e.LookDirection *= distance; var newPosition = target - e.LookDirection; pc.AnimateTo(newPosition, e.LookDirection, e.UpDirection, 500); }
/// <summary> /// When overridden in a derived class, is invoked whenever application code or internal processes call <see cref="M:System.Windows.FrameworkElement.ApplyTemplate" />. /// </summary> /// <exception cref="HelixToolkitException">{0} is missing from the template.</exception> public override void OnApplyTemplate() { base.OnApplyTemplate(); this.RenderHost = this.GetTemplateChild("PART_Canvas") as DPFCanvas; if (this.RenderHost != null) { this.RenderHost.Renderable = this; } if (this.adornerLayer == null) { this.adornerLayer = this.Template.FindName(PartAdornerLayer, this) as AdornerDecorator; } if (this.adornerLayer == null) { throw new HelixToolkitException("{0} is missing from the template.", PartAdornerLayer); } if (this.coordinateView == null) { this.coordinateView = this.Template.FindName(PartCoordinateView, this) as Viewport3D; this.coordinateSystemLights = new Model3DGroup(); // coordinateSystemLights.Children.Add(new DirectionalLight(Colors.White, new Vector3D(1, 1, 1))); // coordinateSystemLights.Children.Add(new AmbientLight(Colors.DarkGray)); this.coordinateSystemLights.Children.Add(new System.Windows.Media.Media3D.AmbientLight(Colors.LightGray)); if (this.coordinateView != null) { this.coordinateView.Camera = new System.Windows.Media.Media3D.PerspectiveCamera(); this.coordinateView.Children.Add(new ModelVisual3D { Content = this.coordinateSystemLights }); } } if (this.coordinateView == null) { throw new HelixToolkitException("{0} is missing from the template.", PartCoordinateView); } if (this.viewCubeViewport == null) { this.viewCubeViewport = this.Template.FindName(PartViewCubeViewport, this) as Viewport3D; this.viewCubeLights = new Model3DGroup(); this.viewCubeLights.Children.Add(new System.Windows.Media.Media3D.AmbientLight(Colors.White)); if (this.viewCubeViewport != null) { this.viewCubeViewport.Camera = new System.Windows.Media.Media3D.PerspectiveCamera(); this.viewCubeViewport.Children.Add(new ModelVisual3D { Content = this.viewCubeLights }); this.viewCubeViewport.MouseEnter += this.ViewCubeViewportMouseEnter; this.viewCubeViewport.MouseLeave += this.ViewCubeViewportMouseLeave; } this.viewCube = this.Template.FindName(PartViewCube, this) as ViewCubeVisual3D; if (this.viewCube != null) { this.viewCube.Clicked += this.ViewCubeClicked; // this.viewCube.Viewport = this.Viewport; } } // update the coordinateview camera this.OnCameraChanged(); }
/// <summary> /// When overridden in a derived class, is invoked whenever application code or internal processes call /// <see /// cref="M:System.Windows.FrameworkElement.ApplyTemplate" /> /// . /// </summary> public override void OnApplyTemplate() { if (this.adornerLayer == null) { this.adornerLayer = this.Template.FindName(PartAdornerLayer, this) as AdornerDecorator; if (this.adornerLayer != null) { this.adornerLayer.Child = this.viewport; } } if (this.adornerLayer == null) { throw new HelixToolkitException("{0} is missing from the template.", PartAdornerLayer); } if (this.cameraController == null) { this.cameraController = this.Template.FindName(PartCameraController, this) as CameraController; if (this.cameraController != null) { this.cameraController.Viewport = this.Viewport; this.cameraController.LookAtChanged += (s, e) => this.OnLookAtChanged(); this.cameraController.ZoomedByRectangle += (s, e) => this.OnZoomedByRectangle(); } } if (this.cameraController == null) { throw new HelixToolkitException("{0} is missing from the template.", PartCameraController); } if (this.coordinateView == null) { this.coordinateView = this.Template.FindName(PartCoordinateView, this) as Viewport3D; this.coordinateSystemLights = new Model3DGroup(); // coordinateSystemLights.Children.Add(new DirectionalLight(Colors.White, new Vector3D(1, 1, 1))); // coordinateSystemLights.Children.Add(new AmbientLight(Colors.DarkGray)); this.coordinateSystemLights.Children.Add(new AmbientLight(Colors.LightGray)); if (this.coordinateView != null) { this.coordinateView.Camera = new PerspectiveCamera(); this.coordinateView.Children.Add(new ModelVisual3D { Content = this.coordinateSystemLights }); } } if (this.coordinateView == null) { throw new HelixToolkitException("{0} is missing from the template.", PartCoordinateView); } if (this.viewCubeViewport == null) { this.viewCubeViewport = this.Template.FindName(PartViewCubeViewport, this) as Viewport3D; this.viewCubeLights = new Model3DGroup(); this.viewCubeLights.Children.Add(new AmbientLight(Colors.White)); if (this.viewCubeViewport != null) { this.viewCubeViewport.Camera = new PerspectiveCamera(); this.viewCubeViewport.Children.Add(new ModelVisual3D { Content = this.viewCubeLights }); this.viewCubeViewport.MouseEnter += this.ViewCubeViewportMouseEnter; this.viewCubeViewport.MouseLeave += this.ViewCubeViewportMouseLeave; } this.viewCube = this.Template.FindName(PartViewCube, this) as ViewCubeVisual3D; if (this.viewCube != null) { this.viewCube.Viewport = this.Viewport; } } // update the coordinateview camera this.OnCameraChanged(); // add the default headlight this.OnHeadlightChanged(); base.OnApplyTemplate(); }