5

我的问题的背景是我有一堆几何图形(数量巨大,认为映射在更大的区域)跨多个 wpf 几何实例(最初它们是 PathGeometry,但为了减少内存使用量,我对它们进行预处理并在期间创建 StreamGeometry加载)。现在我想做的是从这些几何图形中生成图块。

基本上我想取一个更大的几何对象并“切出”它的一个矩形(我的瓷砖),这样我就得到了几个更小的几何图形。如下图所示:

切割大型几何体

请注意,我希望结果是新几何体,而不是渲染。我知道我可以通过将剪辑应用到 UIElement将剪辑推送到绘图视觉来实现视觉效果。

我已经尝试使用Geometry.Combine和其中一个参数是剪辑矩形,但我无法让它做我想做的事情(我通常只取回剪辑矩形或空几何,具体取决于哪种组合模式我用)。

或者,如果使用 WPF 无法做到这一点,是否有任何其他(第三方可以)用于 .NET 的通用几何 API 可以执行此类操作?或者也许这可以使用 WPF 几何 API 的其他部分来实现?

4

1 回答 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;

问候戴夫

于 2013-10-08T17:03:30.890 回答