6

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

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

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

现在,我需要在分段关节点上切出某种大小(正方形、圆形等)的孔,因此最终结果如下所示:

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

我最初的想法是使用 GeometryCombineMode.Exclude 将原始 PathGeometry 与在关节点中包含正方形(或其他)的其他几何图形结合起来。不幸的是,如果路径没有被填充,这会产生空几何。如果它被填充,它会产生不正确的结果。

所以我被困住了。在带有线段的简单示例中,我可以预先计算边界点并让我的线段在那里结束,但是对于弧线和贝塞尔曲线,这有点矫枉过正。

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

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

4

1 回答 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();
于 2009-02-27T10:15:31.797 回答