/// <summary> /// Converts the given point or ray hit test result into a PointHitTestResult. /// In the case of a RayHitTestResult this is done by walking up the /// transforming the 3D intersection into the coordinate space of the /// Viewport3DVisual which contains the Visual3D subtree. /// </summary> internal static PointHitTestResult AsNearestPointHitTestResult(HitTestResult result) { if (result == null) { return(null); } PointHitTestResult resultAsPointHitTestResult = result as PointHitTestResult; if (resultAsPointHitTestResult != null) { return(resultAsPointHitTestResult); } RayHitTestResult resultAsRayHitTestResult = result as RayHitTestResult; if (resultAsRayHitTestResult != null) { Visual3D current = (Visual3D)resultAsRayHitTestResult.VisualHit; Matrix3D worldTransform = Matrix3D.Identity; while (true) { if (current.Transform != null) { worldTransform.Append(current.Transform.Value); } Visual3D parent3D = current.InternalVisualParent as Visual3D; if (parent3D == null) { break; } current = parent3D; } Viewport3DVisual viewport = current.InternalVisualParent as Viewport3DVisual; if (viewport != null) { Point4D worldPoint = ((Point4D)resultAsRayHitTestResult.PointHit) * worldTransform; Point viewportPoint = viewport.WorldToViewport(worldPoint); return(new PointHitTestResult(viewport, viewportPoint)); } Debug.Fail("How did a ray hit a Visual3D not parented to a Viewport3DVisual?"); return(null); } Debug.Fail(String.Format("Unhandled HitTestResult type '{0}'", result.GetType().Name)); return(null); }
public HitTestResultBehavior MyHitTestResult(HitTestResult result) { if (result != null && result.GetType() == typeof(RayMeshGeometry3DHitTestResult)) { RayMeshGeometry3DHitTestResult res = (RayMeshGeometry3DHitTestResult)result; _hitTestResultList.Add(res); } // Set the behavior to return visuals at all z-order levels. return(HitTestResultBehavior.Continue); }
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point pt = e.GetPosition((UIElement)sender); HitTestResult result = VisualTreeHelper.HitTest(currentCanvas, pt); if (result != null && result.GetType() != typeof(ListViewItem)) { _mainWindowViewModel.ShowControlPanel = "Hidden"; _mainWindowViewModel.SelectedDocument = null; } }
ModelUIElement3D GetHitResult(Point location) { if (sim == null) { InitSimulation(); } HitTestResult result = VisualTreeHelper.HitTest(pedSimNodeControl.viewer.ViewPort3D, location); if (result != null & result.GetType() == typeof(RayMeshGeometry3DHitTestResult)) { var pointHit = ((RayMeshGeometry3DHitTestResult)result).PointHit; // Create Rectangle var points = new List <point>() { new point() { x = pointHit.X, y = pointHit.Z }, new point() { x = pointHit.X + 1, y = pointHit.Z }, new point() { x = pointHit.X + 1, y = pointHit.Z + 1 }, new point() { x = pointHit.X, y = pointHit.Z + 1 } }; sim.layouts[0].scenario.AddArea("OriginArea", points, PedSimXMLWriter.areaType.Origin); // SERIALIZE SerializeSimulation(); } if (result != null && result.VisualHit is ModelUIElement3D) { ModelUIElement3D visual = (ModelUIElement3D)result.VisualHit; return(visual); } return(null); }