-
Notifications
You must be signed in to change notification settings - Fork 414
UNION fails to output simple polygons. #1083
Copy link
Copy link
Open
Description
I have this example.
const Clipper2Lib::Path64 polygon = {
{0, 0, 0},
{-1296208, -753754, -38748},
{-2436151, -1712448, -56988},
{-3502931, -2766654, -81247},
{-3641113, -2903207, -81777},
{-2855175, -4180823, -81394},
{-2069237, -5458438, -80305},
{-1283300, -6736052, -78619},
{-497362, -8013666, -76406},
{288575, -9291280, -73786},
{1074511, -10568893, -70842},
{1860448, -11846505, -67666},
{2646384, -13124118, -64370},
{3432320, -14401730, -61024},
{4218257, -15679342, -57747},
{5004193, -16956955, -54621},
{5790130, -18234568, -51739},
{6576067, -19512181, -49213},
{7362004, -20789796, -47113},
{8147942, -22067410, -45560},
{8933880, -23345025, -44633},
{9642555, -24658213, -44459},
{10102208, -26086050, -45563},
{10561861, -27513885, -48067},
{11021512, -28941718, -51752},
{11481163, -30369548, -56514},
{11940813, -31797375, -62106},
{12400463, -33225199, -68430},
{12860111, -34653022, -75252},
{13319759, -36080842, -82460},
{13779407, -37508662, -89836},
{14239054, -38936482, -97245},
{14698702, -40364302, -104497},
{15158351, -41792124, -111426},
{15618000, -43219948, -117875},
{16077650, -44647775, -123645},
{16537300, -46075604, -128610},
{16996952, -47503436, -132546},
{17456604, -48931271, -135336},
{17916258, -50359107, -136758},
{18530672, -51718540, -136883},
{19277175, -53019591, -136542},
{20023677, -54320642, -135909},
{20770180, -55621693, -135028},
{21516682, -56922744, -133948},
{22263185, -58223794, -132702},
{23009687, -59524845, -131342},
{23756190, -60825895, -129904},
{24502692, -62126945, -128432},
{25249194, -63427996, -126975},
{25995697, -64729046, -125565},
{26742199, -66030097, -124255},
{27488702, -67331147, -123081},
{28235204, -68632198, -122086},
{28981707, -69933249, -121319},
{29728210, -71234300, -120815},
{30474712, -72535351, -120621},
{31280978, -73800083, -118875},
{32091933, -75061955, -113396},
{32902880, -76323814, -104716},
{33713817, -77585657, -93203},
{34524744, -78847485, -79504},
{35335662, -80109298, -63994},
{36146572, -81371100, -47219},
{36957477, -82632894, -29707},
{37768381, -83894685, -11854},
{38579286, -85156479, 5716},
{39390195, -86418279, 22640},
{40201112, -87680091, 38333},
{41012038, -88941916, 52319},
{41822973, -90203757, 64164},
{42633919, -91465614, 73250},
{43444873, -92727485, 79210},
{44255833, -93989363, 81468},
{45049777, -95262008, 82129},
{45842560, -96535386, 84125},
{46635342, -97808762, 87265},
{47428122, -99082136, 91400},
{48220901, -100355509, 96309},
{49013680, -101628879, 101801},
{49806457, -102902249, 107717},
{50599234, -104175617, 113827},
{51392011, -105448986, 119975},
{52184788, -106722354, 125963},
{52977566, -107995725, 131578},
{53770345, -109269096, 136673},
{54563125, -110542470, 141023},
{55355906, -111815846, 144452},
{56148689, -113089224, 146777},
{56941472, -114362602, 147786},
{57664839, -115676033, 148076},
{58370492, -116999684, 149044},
{59076146, -118323335, 150642},
{59781799, -119646985, 152794},
{60487452, -120970634, 155373},
{61193104, -122294283, 158305},
{61898757, -123617931, 161482},
{62604409, -124941579, 164799},
{63310061, -126265227, 168178},
{64015713, -127588875, 171497},
{64721365, -128912523, 174679},
{65427018, -130236172, 177618},
{66132671, -131559821, 180207},
{66838324, -132883471, 182371},
{67543977, -134207122, 183983},
{68249631, -135530773, 184968},
{68963631, -136849781, 185326},
{69716007, -138147440, 188350},
{70468377, -139445088, 195334},
{71220737, -140742720, 205580},
{71973088, -142040336, 218327},
{72725430, -143337937, 232865},
{73477767, -144635528, 248541},
{74230102, -145933116, 264626},
{74982438, -147230707, 280381},
{75734780, -148528306, 295100},
{76487130, -149825920, 308125},
{77239489, -151123549, 318727},
{77991857, -152421195, 326150},
{78744233, -153718854, 329714},
{79513439, -155006545, 331548},
{80290024, -156289845, 338822},
{81066590, -157573114, 351667},
{81843132, -158856342, 369205},
{82619644, -160139522, 391022},
{83396130, -161422657, 416171},
{84172588, -162705748, 444282},
{84949026, -163988805, 474422},
{85725447, -165271833, 506210},
{86501859, -166554848, 538714},
{87278268, -167837856, 571554},
{88054684, -169120876, 603796},
{88831110, -170403913, 635062},
{89607556, -171686984, 664418},
{90384024, -172970091, 691483},
{91160521, -174253244, 715325},
{91937045, -175536443, 735581},
{92713597, -176819689, 751273},
{93490171, -178102971, 762025},
{94266761, -179386279, 766961},
{94497229, -179767126, 767296},
{95785121, -178998143, 768387},
{97073011, -178229162, 770542},
{98360903, -177460179, 772086},
{99648794, -176691197, 773102},
{100936682, -175922217, 777015},
{102224562, -175153242, 783351},
{103512436, -174384270, 791386},
{104800304, -173615301, 800409},
{106088172, -172846334, 809709},
{107376041, -172077365, 818571},
{108663916, -171308392, 826283},
{109951798, -170539416, 832135},
{111239687, -169770435, 835402},
{111887832, -169383437, 835852},
{111158985, -168072417, 833182},
{110430146, -166761411, 825598},
{109701320, -165450429, 813859},
{108972511, -164139476, 798480},
{108243716, -162828550, 780273},
{107514935, -161517649, 759874},
{106786165, -160206767, 737885},
{106057401, -158895896, 715123},
{105328639, -157585027, 692092},
{104599872, -156274153, 669577},
{103871098, -154963263, 648243},
{103142312, -153652352, 628671},
{102413510, -152341414, 611687},
{101684693, -151030448, 597788},
{100955862, -149719455, 587782},
{100227018, -148408441, 582324},
{99494215, -147099636, 580988},
{98756374, -145793660, 577073},
{98018540, -144487696, 569394},
{97280716, -143181750, 558532},
{96542902, -141875821, 545066},
{95805098, -140569911, 529435},
{95067303, -139264015, 512307},
{94329513, -137958131, 494080},
{93591727, -136652251, 475377},
{92853940, -135346371, 456732},
{92116151, -134040485, 438604},
{91378354, -132734587, 421656},
{90640549, -131428675, 406285},
{89902734, -130122744, 393120},
{89164908, -128816795, 382677},
{88427073, -127510829, 375458},
{87689231, -126204852, 372080},
{86942850, -124903748, 371068},
{86192716, -123604793, 367468},
{85442585, -122305845, 361262},
{84692460, -121006907, 352791},
{83942341, -119707978, 342550},
{83192227, -118409059, 330816},
{82442118, -117110147, 318063},
{81692011, -115811240, 304646},
{80941905, -114512335, 290932},
{80191799, -113213429, 277387},
{79441691, -111914519, 264298},
{78691579, -110615603, 252144},
{77941462, -109316678, 241265},
{77191339, -108017743, 232041},
{76441211, -106718799, 224935},
{75691078, -105419846, 220246},
{74940941, -104120888, 218429},
{74204499, -102814127, 216807},
{73469324, -101506652, 211691},
{72734155, -100199188, 203575},
{71998995, -98891739, 192825},
{71263842, -97584304, 180039},
{70528696, -96276882, 165634},
{69793556, -94969470, 150076},
{69058419, -93662063, 133928},
{68323283, -92354658, 117550},
{67588146, -91047250, 101518},
{66853004, -89739835, 86273},
{66117857, -88432409, 72262},
{65382702, -87124970, 60059},
{64647539, -85817517, 50015},
{63912368, -84510050, 42721},
{63177191, -83202572, 38620},
{62426662, -81904040, 37843},
{61650917, -80620210, 37701},
{60875173, -79336379, 37411},
{60099429, -78052549, 36997},
{59323685, -76768718, 36480},
{58547940, -75484888, 35878},
{57772196, -74201057, 35216},
{56996452, -72917227, 34509},
{56220708, -71633397, 33783},
{55444964, -70349566, 33055},
{54669219, -69065736, 32346},
{53893475, -67781905, 31680},
{53117731, -66498075, 31072},
{52341987, -65214245, 30549},
{51566242, -63930414, 30126},
{50790498, -62646584, 29827},
{50014754, -61362753, 29673},
{49084990, -60199190, 30047},
{48027528, -59135345, 32495},
{46970070, -58071503, 37147},
{45912616, -57007666, 43662},
{44855169, -55943835, 51932},
{43797727, -54880010, 61616},
{42740292, -53816191, 72550},
{41682862, -52752377, 84493},
{40625436, -51688568, 97187},
{39568014, -50624763, 110474},
{38510594, -49560959, 124022},
{37453174, -48497156, 137728},
{36395754, -47433352, 151225},
{35338331, -46369546, 164428},
{34280904, -45305736, 176967},
{33223473, -44241922, 188743},
{32166037, -43178102, 199419},
{31108594, -42114275, 208845},
{30051145, -41050443, 216761},
{28993691, -39986605, 222912},
{27936231, -38922762, 227128},
{26878769, -37858916, 229114},
{25996546, -36656451, 228836},
{25204752, -35382459, 226677},
{24412959, -34108468, 223136},
{23621168, -32834480, 218682},
{22829377, -31560493, 213780},
{22037586, -30286506, 208897},
{21245794, -29012517, 204497},
{20454001, -27738527, 201046},
{19662207, -26464534, 199012},
{18826456, -25220526, 198414},
{17929172, -24018496, 196171},
{17031892, -22816470, 191620},
{16134615, -21614450, 185103},
{15237345, -20412437, 176755},
{14340079, -19210431, 166921},
{13442819, -18008432, 155785},
{12545564, -16806441, 143606},
{11648312, -15604454, 130647},
{10751064, -14402471, 117098},
{9853817, -13200491, 103284},
{8956571, -11998511, 89343},
{8059324, -10796530, 75641},
{7162075, -9594546, 62287},
{6264822, -8392557, 49667},
{5367565, -7190562, 37877},
{4470302, -5988560, 27307},
{3573034, -4786552, 18057},
{2675761, -3584535, 10501},
{1778483, -2382513, 4789},
{881201, -1180485, 1230},
{0, 0, 0},
{1469073, -293323, -68857},
{2936969, -586411, -164120},
{3210348, 323920, -137577},
{2925747, 1794732, -64845},
{2894086, 1958355, -63637},
{3178741, 487263, -127736},
{3100332, -619029, -169130},
{1632066, -325867, -81143},
{163432, -32632, -1167},
};
// clang-format on
ASSERT_EQ(polygon.size(), 300);
// ACTION
// Run Clipper2 Union with EvenOdd fill rule to simplify the complex polygon.
Clipper2Lib::Clipper64 clipper64;
clipper64.AddSubject({polygon});
Clipper2Lib::Paths64 simple_polygons;
ASSERT_TRUE(clipper64.Execute(
Clipper2Lib::ClipType::Union, Clipper2Lib::FillRule::EvenOdd, simple_polygons));
ASSERT_EQ(simple_polygons.size(), 4);
// The polygon returned at pos 1 is not actually a simple polygon.
// simple_polygon[1] (6 vertices):
// vertex[0]: x=1389918 y=-277518 z=-66551
// vertex[1]: x=1632066 y=-325867 z=-81143
// vertex[2]: x=3100332 y=-619029 z=-169130
// vertex[3]: x=3153823 y=135698 z=-141977
// vertex[4]: x=2936969 y=-586411 z=-164120
// vertex[5]: x=1469073 y=-293323 z=-68857
// Find the 6-vertex simple polygon (index 1).
const Clipper2Lib::Path64 &polygon_6 = simple_polygons[1];
ASSERT_EQ(polygon_6.size(), 6);
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels