void eventSource3D_MouseLeave(object sender, Ab3d.DirectX.Common.EventManager3D.Mouse3DEventArgs e) { Log("MouseLeave: " + (e.RayHitResult != null ? e.RayHitResult.HitSceneNode.ToString() : "<null>")); // Note that the e.RayHitResult.HitSceneNode is set to the new hit object (object that is hit when we left the previously entered object) // Therefore we cannot use this to change the color. if (_selectedInstanceIndex != -1) { ChangeInstanceColor(_selectedInstanceIndex, Colors.Yellow); } else if (_selectedGeometryModel3D != null) { _selectedGeometryModel3D.Material = new DiffuseMaterial(new SolidColorBrush(Colors.Yellow)); } else if (_selectedVisual3D != null) { ChangeColor(_selectedVisual3D, Colors.Yellow); } _selectedVisual3D = null; _selectedInstanceIndex = -1; if (_wireCrossVisual3D != null) { MainViewport3D.Children.Remove(_wireCrossVisual3D); } }
private void ChangeColor(Ab3d.DirectX.Common.EventManager3D.Mouse3DEventArgs e, System.Windows.Media.Color color) { var wpfGeometryModel3DNode = e.RayHitResult.HitSceneNode as WpfGeometryModel3DNode; if (wpfGeometryModel3DNode != null) { wpfGeometryModel3DNode.GeometryModel3D.Material = new DiffuseMaterial(new SolidColorBrush(color)); } else { var hitVisual3D = e.RayHitResult.HitSceneNode.GetVisual3D(); ChangeColor(hitVisual3D, color); } }
void eventSource3D_MouseEnter(object sender, Ab3d.DirectX.Common.EventManager3D.Mouse3DEventArgs e) { if (e.RayHitResult != null) { Log("MouseEnter: " + e.RayHitResult.HitSceneNode); // We need to save the hit SceneNode. // This way we will be able to change the material back in the eventSource3D_MouseLeave event handler. _selectedVisual3D = e.RayHitResult.HitSceneNode.GetVisual3D(); var wpfGeometryModel3DNode = e.RayHitResult.HitSceneNode as WpfGeometryModel3DNode; if (wpfGeometryModel3DNode != null) { _selectedGeometryModel3D = wpfGeometryModel3DNode.GeometryModel3D; } else { _selectedGeometryModel3D = null; } var dxRayInstancedHitTestResult = e.RayHitResult as DXRayInstancedHitTestResult; if (dxRayInstancedHitTestResult != null) { _selectedInstanceIndex = dxRayInstancedHitTestResult.HitInstanceIndex; } if (_wireCrossVisual3D == null) { _wireCrossVisual3D = new WireCrossVisual3D() { LineColor = Colors.DeepPink, LineThickness = 2, LinesLength = 10 }; } _wireCrossVisual3D.Position = e.RayHitResult.HitPosition.ToWpfPoint3D(); if (!MainViewport3D.Children.Contains(_wireCrossVisual3D)) { MainViewport3D.Children.Add(_wireCrossVisual3D); } } else { _selectedVisual3D = null; _selectedGeometryModel3D = null; _selectedInstanceIndex = -1; Log("MouseEnter: <null>"); return; } if (_selectedInstanceIndex != -1) { ChangeInstanceColor(_selectedInstanceIndex, Colors.Red); } else { ChangeColor(e, Colors.Red); } }