在PathGeometry中切割孔

时间:2009-02-27 09:52:12

标签: wpf geometry pathgeometry

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

original path http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/original.gif

这是一个简化的例子。实际上,它可以包含任何类型的片段(Line,Arc,Bezier)。

现在我需要在分段关节点上切出某种类型的孔(方形,圆形等),以便最终结果如下所示:

with holes http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/with_holes.gif

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

所以我被困住了。在线段的简单示例中,我可以预先计算边界点并使我的线段在那里结束,但是对于弧线和贝塞尔曲线,这将是一种过度杀伤。

有谁知道如何做到这一点?

注意:我需要擦除这些孔(透明),因此在它上方放置一个白色方块不会。

1 个答案:

答案 0 :(得分:2)

喔。做到了。我们的想法是使用DrawingBrush从您的孔中创建一个OpacityMask,然后在绘制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();