Tôi có một yếu tố DrawingVisual rằng rappresents một con đường mà Hình vẽ mô tả bởi syntax này:Bug trong hình học Hit-Testing
"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"
Để làm cho hình ảnh tôi sử dụng lớp MyCanvas, cung cấp chức năng lần truy cập thử nghiệm:
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; }
}
}
Khi tôi vẽ (màu đỏ) của tôi con đường này là kết quả:
Trong trường hợp kích thước của các tế bào lưới là 50x50. Bây giờ tôi cố gắng để có được hình ảnh ví dụ trong khu vực này:
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);
Nhưng MyPath không phải là kết quả, tại sao? Làm thế nào tôi phải làm đúng thử nghiệm hit? Cảm ơn.
Bạn có kiểm tra xem Đường dẫn có bị nhấn hoàn toàn trong HitTestCallback của bạn không (đặt điểm ngắt)? Nếu có, IntersectionDetail có giá trị gì? – Clemens
Tôi chỉnh sửa câu hỏi (tôi quên biến đổi) anyway: IntersectionDetail.Intersect – gliderkite
@Clemens Tôi có thể đã tìm thấy [something] (http://stackoverflow.com/questions/10453095/rendertransform-vs-pushtransform). – gliderkite