Ошибка в геометрии Hit-Testing

У меня есть Элемент DrawingVisual, представляющий путь, геометрия которого описывается следующим синтаксисом:

"m106,59.3c0-1.98,0,0-4.95,0.989-3.96,0.989-13.8,3.96 -20,8,4,95-6,92,0-14,8-3,96-17,8-3,96-1,98,2,97,3,96,10,9,7,91,13,8,2,97,1,98,9,89,3,96,14,8,3,96,4,95-0,989,10,9-2,97,13,8 -6.92,2.97-2.97,5.93-10.9,6.92-12.9z"

Для рендеринга визуального элемента я использую класс MyCanvas, который обеспечивает функциональность проверки попадания:

public class MyCanvas : Panel
{
   public List Visuals = new List();
   private List Hits = new List();

   public void AddVisual(Visual Visual)
   {
       this.Visuals.Add(Visual);
       base.AddVisualChild(Visual);
       base.AddLogicalChild(Visual);
   }

   public List GetVisuals(Geometry Region)
   {
       GeometryHitTestParameters Parameters = new GeometryHitTestParameters(Region);
       this.Hits.Clear();
       HitTestResultCallback Callback = new HitTestResultCallback(this.HitTestCallBack);
       VisualTreeHelper.HitTest(this, null, Callback, Parameters);

       return this.Hits;
   }

   private HitTestResultBehavior HitTestCallBack(HitTestResult Result)
   {
        GeometryHitTestResult GeometryRes = (GeometryHitTestResult)Result;
        DrawingVisual DVisual = Result.VisualHit as DrawingVisual;

        if (DVisual != null && GeometryRes.IntersectionDetail == IntersectionDetail.FullyInside) 
            this.Hits.Add(DVisual);     

       return HitTestResultBehavior.Continue;
   }

   protected override Visual GetVisualChild(int Index)
   { return this.Visuals[Index]; }

   protected override int VisualChildrenCount {
        get { return this.Visuals.Count; }
   }
}

Когда я рисую свой (красный) путь, это результат :

Где размер ячеек сетки 50х50.Теперь пытаюсь получить визуал например в этой области:

MyCanvas my_canvas = new MyCanvas();
RectangleGeometry MyRegion = new RectangleGeometry(new Rect(50, 50, 250, 250));
DrawingVisual MyPath = new DrawingVisual();

using (DrawingContext context = MyPath.RenderOpen()) {
   context.PushTransform(new TranslateTransform(50, 50));
   context.PushTransform(new ScaleTransform(2, 2));
   context.DrawGeometry(Brushes.Red, new Pen(), MyGeometry);
}

my_canvas.AddVisual(MyPath);
List result = my_canvas.GetVisuals(MyRegion);

Но MyPath нет в результате,почему?Как мне правильно сделать хит-тест? Спасибо.

6
задан gliderkite 6 May 2012 в 12:00
поделиться