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); }
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); } }