裁剪任意WPF几何图形

5
我的问题背景是,我有一堆几何图形(数量巨大,类似于在更大的区域上绘制地图),分布在多个 WPF 几何实例中(最初它们是 PathGeometry,但为了减少内存使用,我在加载时对它们进行预处理并创建 StreamGeometries)。现在我想做的是从这些几何图形生成瓷砖。

基本上,我想取一个较大的几何对象,并“剪切”出一个矩形(我的瓷砖),以便获得多个较小的几何图形。就像下面的图片一样:

Slicing up a large geometry

注意,我希望结果是一个新的几何体,而不是渲染。我知道可以通过将剪裁到UI元素或将剪裁推送到绘图可视化来实现视觉效果。
我尝试使用Geometry.Combine其中之一的参数是剪裁矩形,但我无法做到我想要的(通常我只获取剪裁矩形,或者根据使用的组合模式获取空几何体)。 或者,如果这不能在WPF中完成,是否有任何其他(第三方也可以).NET通用几何API可以执行这些操作?或者也许可以使用WPF几何API的其他部分来实现这个功能?

你是否使用了Geometry.Combine中的GeometryCombineMode.Intersect? - David Hollinshead
我已经尝试了所有的模式,但没有一个能够满足我的需求。 - Isak Savo
1个回答

1

代码显示底部右侧矩形,就像您的“较小的瓷砖”可视化中一样:

var geometry = MyOriginalPath.Data.Clone();
var bounds = geometry.Bounds;    
var rectangleGeometry = new RectangleGeometry(bounds);
var halfWidth = bounds.Width * 0.5;
var halfHeight = bounds.Height * 0.5;
var bottomQuarter = new RectangleGeometry(
  new Rect(bounds.X + halfWidth, bounds.Y + halfHeight, 
           halfWidth, halfHeight));
var combinedGeometry = new CombinedGeometry(GeometryCombineMode.Exclude,
                                           rectangleGeometry, bottomQuarter);
combinedGeometry = new CombinedGeometry(GeometryCombineMode.Exclude,
                                        geometry, combinedGeometry);
MyBottomQuarterPath.Data = combinedGeometry;

问候 Dave


这不是 OP 明确表示他们不想要的吗?即 combinedGeometry 对象本身包含原始几何图形的完整克隆。这可以通过检索 combinedGeometry.Geometry1 属性的值来简单地看到,该值将是原始 geometry 对象。OP 想要一个仅存储可见元素的新几何体(即不可能从新几何体中恢复原始几何体)。 - Peter Duniho

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