public static void CutShapes(ref MapPoint[] points, ref ShapeSegment[] segments) { List <ShapeSegment> list = new List <ShapeSegment>(); List <MapPoint> list2 = new List <MapPoint>(); PolygonCutter polygonCutter = new PolygonCutter(); int num = 0; ShapeSegment[] array = segments; for (int i = 0; i < array.Length; i++) { ShapeSegment segment = array[i]; if (segment.Length > 0) { bool flag = false; List <ShapeSegment> list3 = default(List <ShapeSegment>); List <MapPoint> list4 = default(List <MapPoint>); polygonCutter.ProcessShapeSegment(segment, (IList <MapPoint>)points, num, PolygonClosingPole.North, out list3, out list4, out flag); if (flag) { List <ShapeSegment> list5 = default(List <ShapeSegment>); List <MapPoint> list6 = default(List <MapPoint>); polygonCutter.ProcessShapeSegment(segment, (IList <MapPoint>)points, num, PolygonClosingPole.South, out list5, out list6, out flag); ShapeSegment[] array2 = list3.ToArray(); MapPoint[] array3 = list4.ToArray(); GeoUtils.CalculateSignedArea(ref array3, ref array2); double num2 = 0.0; for (int j = 0; j < array2.Length; j++) { num2 += Math.Abs(array2[j].PolygonSignedArea); } ShapeSegment[] array4 = list5.ToArray(); MapPoint[] array5 = list6.ToArray(); GeoUtils.CalculateSignedArea(ref array5, ref array4); double num3 = 0.0; for (int k = 0; k < array4.Length; k++) { num3 += Math.Abs(array4[k].PolygonSignedArea); } if (num2 < num3) { list.AddRange(list3); list2.AddRange(list4); } else { list.AddRange(list5); list2.AddRange(list6); } } else { list.AddRange(list3); list2.AddRange(list4); } } num += segment.Length; } segments = list.ToArray(); points = list2.ToArray(); }
public static void CutShapes(ref MapPoint[] points, ref ShapeSegment[] segments) { List <ShapeSegment> list = new List <ShapeSegment>(); List <MapPoint> list2 = new List <MapPoint>(); PolygonCutter polygonCutter = new PolygonCutter(); int num = 0; ShapeSegment[] array = segments; for (int i = 0; i < array.Length; i++) { ShapeSegment segment = array[i]; if (segment.Length > 0) { bool isClosedAtPole = false; polygonCutter.ProcessShapeSegment(segment, points, num, PolygonClosingPole.North, out List <ShapeSegment> segments2, out List <MapPoint> segmentPoints, out isClosedAtPole); if (isClosedAtPole) { polygonCutter.ProcessShapeSegment(segment, points, num, PolygonClosingPole.South, out List <ShapeSegment> segments3, out List <MapPoint> segmentPoints2, out isClosedAtPole); ShapeSegment[] segments4 = segments2.ToArray(); MapPoint[] points2 = segmentPoints.ToArray(); CalculateSignedArea(ref points2, ref segments4); double num2 = 0.0; for (int j = 0; j < segments4.Length; j++) { num2 += Math.Abs(segments4[j].PolygonSignedArea); } ShapeSegment[] segments5 = segments3.ToArray(); MapPoint[] points3 = segmentPoints2.ToArray(); CalculateSignedArea(ref points3, ref segments5); double num3 = 0.0; for (int k = 0; k < segments5.Length; k++) { num3 += Math.Abs(segments5[k].PolygonSignedArea); } if (num2 < num3) { list.AddRange(segments2); list2.AddRange(segmentPoints); } else { list.AddRange(segments3); list2.AddRange(segmentPoints2); } } else { list.AddRange(segments2); list2.AddRange(segmentPoints); } } num += segment.Length; } segments = list.ToArray(); points = list2.ToArray(); }