GTS Library - bool műveletek

 ( Deacon | 2008. május 21., szerda - 10:21 )

Sziasztok!

Pár napja találtam rá a GTS-re, és nagyon megörültem, mert elvileg egész kényelmesen (és gyorsan) lehet vele bool-műveleteket végezni tetszőleges testeken. Viszont egy problémát sehogy sem tudtam megoldani (hosszadalmas böngészés/próbálgatás után sem).

Ha pl. két testet akarok egymásból kivonni, akkor a két GtsSurface-t még szépen létre tudom hozni, a művelet végeredményénél viszont képtelen vagyok beállítani a Face-eknél a helyes körüljárási irányt (ld. itt, ahol a "kivont" résznél csak a hátsó lapokat látom). A GTS Tools-ban találtam pár jó függvényt az orientáció beállítására, de rá kellett jönnöm, hogy ez sem segít: "...treats each triangle in isolation as it is just displaying them in openGL so doesn't create a cohesive structure for iterative processing over the mesh..."

Már csak abban reménykedek, hogy az alábbi műveletekben van olyan hiba, amit kijavítva megoldódik a gondom.

GtsSurfaceInter* si = gts_surface_inter_new (gts_surface_inter_class (), 
                                             s0, s1, 
                                             tree1, tree2, 
                                             is_open1, is_open2);
gts_surface_inter_boolean (si, s1out2, GTS_1_OUT_2);
gts_surface_inter_boolean (si, s2in1, GTS_2_IN_1);
gts_surface_merge (s1out2, s2in1);

Mivel még a levlistáról sem jött válasz, gondoltam ide is beírom a kérdést - ha lenne valakinek bármiféle tippje, azt nagyon megköszönném!

Üdv.: Deacon

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Időközben a fenti dologra megtaláltam a megoldást : )

set_orientation(s1,ORI_FLIP);
GtsSurfaceInter* si = gts_surface_inter_new (gts_surface_inter_class (), 
                                             s0, s1, 
                                             tree1, tree2, 
                                             is_open1, is_open2);        
gts_surface_inter_boolean (si, s1out2, GTS_1_IN_2);
gts_surface_inter_boolean (si, s2in1, GTS_2_IN_1);
gts_surface_merge (s1out2, s2in1);

Vagyis a kivonandó surface-t először "invertálnom" kell (ehhez jött jól a GTS Tools), aztán pedig metszem a kisebbítendővel, és kész (a MeshViewerben már tökéletes az eredmény).

Azért egy gondom még akadt: az eredménynél a háromszögek körüljárási irányát még meg kellene javítani,
erre viszont nem találtam beépített függvényt : (