在PathGeometry中切割孔洞

6

我有一个PathGeometry定义了一些路径,就像这个:

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

这只是一个简化的例子。实际上它可以有任何类型的线段、弧线和贝塞尔曲线。

现在我需要在线段连接点上切割出一些形状和尺寸(正方形、圆形等),使最终结果看起来像这样:

带孔的路径 http://devblog.ailon.org/devblog/_stuff/wpfpathgeoquestion/with_holes.gif

我的初始想法是使用GeometryCombineMode.Exclude将原始PathGeometry与包含正方形(或其他形状)的其他几何图形组合在一起,放在连接点上。不幸的是,如果路径没有填充,这会产生空几何图形。而如果它被填充,它会产生错误的结果。

所以我卡住了。在简单的线段示例中,我可以预先计算边界点,并使我的线段在那里结束,但对于弧线和贝塞尔曲线来说,这可能有点过度设计。

有人知道如何完成这个任务吗?

注意:我需要抹掉这些孔(透明),所以放一个白色的正方形在上面是不行的。

1个回答

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接