我有一些代码需要多个Points并创建多个LineSegments来构建Path。
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;
这会创建宽度为22像素(粗略)的线条。现在,如果您查看实际数据,您只能看到LineSegement元素,它实际上为您提供了这样的输出,其中实线为黑色,实际显示的线为灰色(借助狡猾的mspaint草图):
现在我想在Geometry上执行StrokeContains以查看指定的Point是否在上面的整个pathSegment(灰色区域)内。它实际上做的是检查LineSegments(黑线)。
有没有更好的方法来建立路径?或者有没有办法将pathSegment,包括StrokeWidth转换为新路径?
答案 0 :(得分:0)
如果在StrokeContains调用中使用正确的笔厚度,它应该可以工作:
Point point = ...
Pen pen = new Pen { Thickness = pathSegment.StrokeThickness };
bool contains = pathSegment.Data.StrokeContains(pen, point);
或者你只需在路径上进行点击测试:
bool contains = pathSegment.InputHitTest(point) != null;