如下图,如何判断几何多边形A被多边形B,切割为多段几何?

 几何A被几何B切割

1. 获取几何A与几何B的交集C

 var intersectGeometry = newCombinedGeometry(GeometryCombineMode.Intersect, geometry1, geometry2); 

 

 

2.几何A排除交集C,得到余下空白区域D

 var combinedGeometry = newCombinedGeometry(GeometryCombineMode.Exclude, geometry1, intersectGeometry); 

 

 3.判断几何D区域是否包含多段几何

几何D区分为俩段,获取域的边框近似点集,发现含有俩段线条的描述(俩段M->z的文本),与真实几何分段对应。

所以,可以通过线条终止字符"z"个数,来判断几何的分段数量。

  • 获取几何的近似多边形值
  • 获取其路径内的点集
  • 判断点集中是否含有2个及以上的线条绘制结束字符"z"
复制代码
1     var flattenedPathGeometry = combinedGeometry.GetFlattenedPathGeometry(); 2     var outerPointsString = flattenedPathGeometry.Figures.ToString(); 3     if (outerPointsString.Length > 24         && outerPointsString.Replace("z", string.Empty).Length == outerPointsString.Length - 2) 5     { 6         return true; 7     }
复制代码

 完整函数见下方代码

 View Code

4. 获取几何被分割后的多段几何内容

解析"M"、"z",分别获取俩段几何数据

复制代码
1     var geometryList = outerPointsString.Split(new[] { 'M' }, StringSplitOptions.RemoveEmptyEntries).Where(i => i.Contains("z")).Select(i => $"M{i}").ToList(); 2     if (geometryList.Count >= 2) 3     { 4         var geometry1 = Geometry.Parse(geometryList[0]); ; 5         var geometry2 = Geometry.Parse(geometryList[1]); ; 6     }
复制代码