【问题标题】:Cropping an arbitrary wpf geometry裁剪任意 wpf 几何图形
【发布时间】:2013-10-06 01:53:58
【问题描述】:

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

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

请注意,我希望结果是新几何体,而不是渲染。我知道我可以通过应用 clip to a UIElementpushing a clip to a drawingvisual 来实现 visual 结果。

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

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

【问题讨论】:

  • 你使用 GeometryCombineMode.Intersect 和 Geometry.Combine 了吗?
  • 我都试过了,但没有一个模式能达到我想要的效果。

标签: wpf maps geometry vector-graphics


【解决方案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;

问候戴夫

【讨论】:

  • 这不正是 OP 明确表示他们想要的吗? IE。 combinedGeometry 对象本身包含原始几何的完整克隆。这可以通过检索combinedGeometry.Geometry1 属性的值来简单地看到,这将是原始的geometry 对象。 OP 想要一个只存储可见元素的新几何(即,不可能从新几何中恢复原始几何)
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2011-01-31
  • 2015-02-02
  • 1970-01-01
  • 2012-01-16
  • 2023-03-24
相关资源
最近更新 更多