我有两个巨大的PathGeometry(> 100000个项目)集合,我需要使用PathGeometry进行比较。

List<PathGeometry> firstList;
List<PathGeometry> secondList;
[...]

foreach (PathGeometry pg1 in firstList)
  foreach (PathGeometry pg2 in secondList)
  {
    PathGeometry intergeo = PathGeometry.Combine(pg1, pg2, GeometryCombineMode.Intersect, null);
    if (intergeo.GetArea() > 0)
    {
      // do whatever with intergeo.GetArea()
    }
  }

令我惊讶的是,PathGeometry是GUI的一部分,并且确实使用了分派(dispatch)器,这有时会导致问题,因为我的计算确实在某些后台线程中运行而没有使用Parallel.ForEach()的GUI

因此,我正在寻找不连接GUI的PathGeometry的替代方法。
我的图形非常复杂,并向PathGeometry.Figures添加了很多PathFigures。

我自己是从一些government肿的政府xml文件中创建这些PathGeometries的,因此创建其他内容并不是没有问题。但是我需要一个函数来创建这两个几何中的两个的交集(不将它们彼此添加),以获取两个几何均覆盖的区域,例如此图中的红色区域:

最佳答案

System.Windows.Media还包含一个StreamGeometry类,它是PathGeometry的“轻量级替代”。它不支持数据绑定(bind),动画或修改,但由于它是从Geometry派生的,因此应具有Combine方法。

参见StreamGeometry @ MSDN

关于c# - 非GUI替代PathGeometry?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12579294/

10-12 03:10