예제 #1
0
        public static IList <Polygon2D> smethod_0(IList <Polygon2D> clip, IList <Polygon2D> subject, Class145.Enum7 fillMode)
        {
            List <Class145.Class148.Class149> class149s = new List <Class145.Class148.Class149>();

            foreach (Polygon2D polygon2D in clip)
            {
                Class145.smethod_1(polygon2D, 1, class149s);
            }
            foreach (Polygon2D polygon2D1 in subject)
            {
                Class145.smethod_1(polygon2D1, 2, class149s);
            }
            class149s.Sort(Class145.Class148.Class154.class154_0);
            Class145.Class148.Class149 class149 = null;
            if (class149s.Count > 1)
            {
                Class145.Class148.Class149 item = class149s[class149s.Count - 1];
                for (int i = class149s.Count - 2; i >= 0; i--)
                {
                    Class145.Class148.Class149 item1 = class149s[i];
                    item1.class149_0 = item;
                    item             = item1;
                }
                class149 = item;
            }
            Class145.Class146 class146 = new Class145.Class146();
            if (class149 != null)
            {
                class146.class33_0.Add(class149);
            }
            class146.method_0();
            if (class146.list_0.Count == 0)
            {
                return(Class145.polygon2D_0);
            }
            List <Polygon2D> polygon2Ds = new List <Polygon2D>(class146.list_0.Count);

            foreach (Class145.Class158 list0 in class146.list_0)
            {
                if (list0.Count <= 2)
                {
                    continue;
                }
                polygon2Ds.Add(list0.method_0());
            }
            if (polygon2Ds.Count == 0)
            {
                return(Class145.polygon2D_0);
            }
            return(polygon2Ds);
        }
예제 #2
0
        internal static void smethod_1(Polygon2D polygon, byte type, List <Class145.Class148.Class149> localMinimumList)
        {
            if (polygon.Count == 0)
            {
                return;
            }
            Point2D item    = polygon[0];
            Point2D point2D = item;
            int     num     = 1;
            int     num1    = 0;
            int     count   = polygon.Count;

            while (true)
            {
                if (num < count)
                {
                    point2D = polygon[num];
                    num1    = Math.Sign(point2D.Y - item.Y);
                    if (num1 == 0)
                    {
                        num1 = Math.Sign(point2D.X - item.X);
                    }
                    if (num1 != 0)
                    {
                        num++;
                        break;
                    }
                    else
                    {
                        num++;
                    }
                }
                else
                {
                    break;
                }
            }
            Class145.Class148          class150  = null;
            Action <Class145.Class148> class1480 = null;

            while (true)
            {
                if (num <= count)
                {
                    Point2D item1 = polygon[num % count];
                    int     num2  = Math.Sign(item1.Y - point2D.Y);
                    if (num2 == 0)
                    {
                        num2 = Math.Sign(item1.X - point2D.X);
                    }
                    if (num2 != 0)
                    {
                        if (num2 == num1)
                        {
                            if (num2 <= 0)
                            {
                                Class145.Class148 class148 = new Class145.Class148.Class150(point2D);
                                class1480 = (Class145.Class148 prev) => class148.class148_0 = prev;
                                class150  = class148;
                            }
                            else
                            {
                                Class145.Class148 class1501 = new Class145.Class148.Class150(point2D);
                                class1480 = (Class145.Class148 prev) => prev.class148_0 = class1501;
                                class150  = class1501;
                            }
                        }
                        else if (num2 <= 0 || num1 >= 0)
                        {
                            Class145.Class148.Class151 class151 = new Class145.Class148.Class151(point2D);
                            Class145.Class148.Class152 class152 = new Class145.Class148.Class152(point2D);
                            class1480 = (Class145.Class148 prev) => prev.class148_0 = class152;
                            class150  = class151;
                        }
                        else
                        {
                            Class145.Class148.Class149 class149 = new Class145.Class148.Class149(point2D);
                            class1480 = (Class145.Class148 prev) => class149.class148_1 = prev;
                            class150  = class149;
                            localMinimumList.Add(class149);
                        }
                        num1    = num2;
                        point2D = item1;
                        num++;
                        break;
                    }
                    else
                    {
                        num++;
                    }
                }
                else
                {
                    break;
                }
            }
            int num3 = count + 2;

            while (num < num3)
            {
                Point2D point2D1 = polygon[num % count];
                int     num4     = Math.Sign(point2D1.Y - point2D.Y);
                if (num4 == 0)
                {
                    num4 = Math.Sign(point2D1.X - point2D.X);
                }
                if (num4 != 0)
                {
                    if (num4 == num1)
                    {
                        if (num4 <= 0)
                        {
                            class150 = new Class145.Class148.Class150(point2D)
                            {
                                class148_0 = class150
                            };
                        }
                        else
                        {
                            Class145.Class148 class1481 = new Class145.Class148.Class150(point2D);
                            class150.class148_0 = class1481;
                            class150            = class1481;
                        }
                    }
                    else if (num4 <= 0 || num1 >= 0)
                    {
                        Class145.Class148.Class151 class1511 = new Class145.Class148.Class151(point2D);
                        class150.class148_0 = new Class145.Class148.Class152(point2D);
                        class150            = class1511;
                    }
                    else
                    {
                        Class145.Class148.Class149 class1491 = new Class145.Class148.Class149(point2D)
                        {
                            class148_1 = class150
                        };
                        class150 = class1491;
                        localMinimumList.Add(class1491);
                    }
                    num1    = num4;
                    point2D = point2D1;
                }
                num++;
            }
            if (class1480 != null)
            {
                class1480(class150);
            }
        }