Ошибка в геометрии 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, который предоставляет функциональность для тестирования попаданий:
<code>public class MyCanvas : Panel { public List<Visual> Visuals = new List<Visual>(); private List<DrawingVisual> Hits = new List<DrawingVisual>(); public void AddVisual(Visual Visual) { this.Visuals.Add(Visual); base.AddVisualChild(Visual); base.AddLogicalChild(Visual); } public List<DrawingVisual> 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; } } } </code>
Когда я рисую свой (красный) путь, это результат:
Где размер ячеек сетки 50х50. Теперь я пытаюсь получить визуальные эффекты, например, в этом регионе:
<code>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<DrawingVisual> result = my_canvas.GetVisuals(MyRegion); </code>
Но MyPath не в результате, почему? Как мне правильно провести хит-тест? Благодарю.