Wpf 在路径几何中切割孔

Wpf 在路径几何中切割孔,wpf,geometry,pathgeometry,Wpf,Geometry,Pathgeometry,我有一个PathGeometry,它定义了如下路径: 这是一个简化的例子。实际上,它可以有任何类型的线段(直线、圆弧、贝塞尔) 现在,我需要在线段连接点上切割某种类型和大小的孔(正方形、圆形等),以便最终结果如下所示: 我最初的想法是使用GeometryCombineMode.Exclude将原始PathGeometry与关节点中包含正方形(或任何东西)的其他几何体组合。不幸的是,如果路径未填充,则会生成空几何体。如果填充,则会产生不正确的结果 所以我被卡住了。在一个简单的直线段示例中,我可

我有一个PathGeometry,它定义了如下路径:

这是一个简化的例子。实际上,它可以有任何类型的线段(直线、圆弧、贝塞尔)

现在,我需要在线段连接点上切割某种类型和大小的孔(正方形、圆形等),以便最终结果如下所示:

我最初的想法是使用GeometryCombineMode.Exclude将原始PathGeometry与关节点中包含正方形(或任何东西)的其他几何体组合。不幸的是,如果路径未填充,则会生成空几何体。如果填充,则会产生不正确的结果

所以我被卡住了。在一个简单的直线段示例中,我可以预先计算边界点,并使直线段结束于此,但对于圆弧和贝塞尔曲线,这有点过分了

有人知道如何做到这一点吗


注意:我需要把这些洞擦掉(透明),这样在上面放一个白色的正方形就不行了

哦。成功了。我们的想法是使用DrawingBrush从孔中创建一个不透明贴图,然后在绘制PathGeometry之前将其推到绘图上下文中。像这样的

RectangleGeometry r = new RectangleGeometry(graphVisual.Bounds);
GeometryDrawing dr = new GeometryDrawing(Brushes.Black, null, Geometry.Combine(r, bulletHoles, GeometryCombineMode.Exclude, null));
DrawingBrush br = new DrawingBrush(dr);
drawingContext.PushOpacityMask(br);

drawingContext.DrawGeometry(null, new Pen(Brushes.Green, 2), graphVisual);

drawingContext.Pop();