gpt4 book ai didi

wpf - 在 PathGeometry 中切割孔

转载 作者:行者123 更新时间:2023-12-04 15:49:29 24 4
gpt4 key购买 nike

我有一个 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 与其他包含正方形(或其他任何内容)的 Geometry 结合起来。不幸的是,如果路径未填充,这会产生空几何。如果它被填充,它会产生不正确的结果。

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

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

注意:我需要删除这些孔(透明),所以在它上面放置一个白色方块是不行的。

最佳答案

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

关于wpf - 在 PathGeometry 中切割孔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com