Пример #1
0
        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();
        }
Пример #2
0
        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();
        }