转换路径& StrokeWidth到Geometry

时间:2013-10-07 14:55:21

标签: c# wpf pathgeometry

我有一些代码需要多个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草图):

enter image description here

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

有没有更好的方法来建立路径?或者有没有办法将pathSegment,包括StrokeWidth转换为新路径?

1 个答案:

答案 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;