【问题标题】:Cutting holes in PathGeometry在 PathGeometry 中切割孔
【发布时间】:2009-02-27 09:52:11
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: wpf geometry pathgeometry


    【解决方案1】:

    哦。做到了。这个想法是使用 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-31
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多