1

我有一些代码需要多个点并创建多个 LineSegments 来构建路径。

System.Windows.Shapes.Path pathSegment = new System.Windows.Shapes.Path();
PathFigure pathFig = new PathFigure();
PathGeometry pathGeo = new PathGeometry();
pathFig.StartPoint = new Point(pointData[0].X, pointData[0].Y);
for (int loop = 1; loop < pointData.Count; loop++)
{
    LineSegment ls = new LineSegment();        
    ls.Point = new Point(pointData[loop].X, pointData[loop].Y);
    pathFig.Segments.Add(ls);
}

pathGeo.Figures.Add(pathFig);
pathSegment.Data = pathGeo;
pathSegment.Stroke = brush;
pathSegment.StrokeThickness = 22;

这将创建我的线,宽度为 22px(大约)。现在,如果您查看实际的数据,您只能看到 LineSegement 元素,它本质上为您提供这样的输出,其中真实的线是黑色的,实际显示的线是灰色的(请原谅狡猾的 mspaint 草图):

在此处输入图像描述

现在我想对 Geometry 执行 StrokeContains 以查看指定的 Point 是否在上面的整个 pathSegment 内(灰色区域)。它实际上做的是检查 LineSegments(黑线)。

有没有更好的方法来建立路径?还是有办法将pathSegment(包括StrokeWidth)转换为新路径?

4

1 回答 1

0

如果您在 StrokeContains 调用中使用正确的笔粗细,它应该可以工作:

Point point = ...
Pen pen = new Pen { Thickness = pathSegment.StrokeThickness };
bool contains = pathSegment.Data.StrokeContains(pen, point);

或者,您可以简单地对路径进行命中测试:

bool contains = pathSegment.InputHitTest(point) != null;
于 2013-10-07T15:36:21.540 回答