internal Adorner3D GetHitAdorner3D(AdornerSet3DContainer layer, Point point) { this.hitTestParameters3D = new PointHitTestParameters(point); this.hitObject = (RectangleHitTestResult)null; VisualTreeHelper.HitTest((Visual)layer, new HitTestFilterCallback(this.FilterPotentialHit), new HitTestResultCallback(this.ProcessHitTestResult3D), (HitTestParameters)this.hitTestParameters3D); if (this.hitObject != null) { ModelVisual3D modelVisual3D1 = (ModelVisual3D)null; foreach (DependencyObject dependencyObject in this.hitObject.HitPath) { ModelVisual3D modelVisual3D2 = dependencyObject as ModelVisual3D; if (modelVisual3D2 != null) { modelVisual3D1 = modelVisual3D2; break; } } Adorner3D associatedAdorner = layer.GetAssociatedAdorner(modelVisual3D1); if (associatedAdorner != null) { return(associatedAdorner); } } return((Adorner3D)null); }
private HitTestFilterBehavior FilterPotentialHit(DependencyObject testObject) { Viewport3DVisual viewportVisual = testObject as Viewport3DVisual; if (viewportVisual == null) { return(HitTestFilterBehavior.ContinueSkipSelf); } RectangleHitTestResult closestHitTestResult = new Viewport3DHitTestHelper(viewportVisual, (GeneralTransform)Transform.Identity).HitTest((HitTestParameters)this.hitTestParameters3D).ClosestHitTestResult; if (closestHitTestResult == null) { return(HitTestFilterBehavior.ContinueSkipSelfAndChildren); } this.hitObject = closestHitTestResult; return(HitTestFilterBehavior.Stop); }