关于wpf:在PathGeometry中切孔

Cutting holes in PathGeometry

我有一个PathGeometry定义了这样的路径:

原始路径http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/original.gif

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

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

有孔http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/with_holes.gif

我最初的想法是使用GeometryCombineMode.Exclude将原始PathGeometry与其他在关节点中包含正方形(或其他形状)的Geometry组合在一起。不幸的是,如果未填充路径,则会产生空的几何形状。并且如果填充它会产生错误的结果。

所以我被卡住了。在使用线段的简单示例中,我可以预先计算出边界点,并使线段在此结束,但是使用弧形和贝塞尔曲线,这会有些过分。

有人知道如何实现吗?

注意:我需要擦除(透明)这些孔,因此在其上方放置白色正方形不会起作用。


哦。做到了。这个想法是使用DrawingBrush在您的孔中创建一个OpacityMask,然后在绘制PathGeometry之前将其推到绘图上下文中。像这样的东西。

1
2
3
4
5
6
7
8
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();