Exemple #1
0
 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);
 }
Exemple #2
0
        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);
        }