Polygonization Sqrt3 Subdiv ============================= Overview --------- * progress kinda stymied by subdiv problems, perhaps OpenMesh multi-flip bug ... so try out OpenFlipper which is using newer OpenMesh * actually polygonization is a once only task for a geometry, so taking a higher level view and using existing tools is entirely plausible : and of course if can get it to work at a high level can batch it somehow Higher Level Approaches ------------------------- * https://github.com/VTREEM/Carve BASH Funcs ------------- :: 807 tboolean-hyctrl(){ TESTCONFIG=$($FUNCNAME-) tboolean-- $* ; } 808 #tboolean-hyctrl-polytest(){ lldb NPolygonizerTest -- $TMP/tboolean-hyctrl--/1 ; } 809 tboolean-hyctrl-polytest(){ NPolygonizerTest $TMP/tboolean-hyctrl--/1 ; } 810 tboolean-hyctrl-(){ $FUNCNAME- | python $* ; } 811 tboolean-hyctrl--(){ cat << EOP 812 from opticks.analytic.csg import CSG 813 814 container = CSG("box", name="container", param=[0,0,0,1000], boundary="$(tboolean-container)", poly="IM", resolution="1" ) 815 816 817 #ctrl = "1" # subdiv_test 818 #ctrl = "4" # tetrahedron 819 #ctrl = "6" # cube 820 ctrl = "66" # hexpatch inner_only 821 #ctrl = "666" # hexpatch 822 823 box = CSG("box", param=[0,0,0,500], boundary="$(tboolean-testobject)", poly="HY", level="0", ctrl=ctrl, verbosity="3" ) 824 825 CSG.Serialize([container, box ], "$TMP/$FUNCNAME" ) 826 827 EOP 828 } :: delta:opticksnpy blyth$ tboolean-;tboolean-hyctrl-polytest 2017-06-05 11:46:57.064 INFO [5038581] [main@17] argc 2 argv[0] NPolygonizerTest 2017-06-05 11:46:57.065 INFO [5038581] [NCSG::import@442] NCSG::import START verbosity 3 treedir /tmp/blyth/opticks/tboolean-hyctrl--/1 smry ht 0 nn 1 tri 0 tmsg NULL-tris iug 1 nd 1,4,4 tr 1,3,4,4 gtr 0,3,4,4 pln NULL 2017-06-05 11:46:57.065 INFO [5038581] [NCSG::import@450] NCSG::import importing buffer into CSG node tree num_nodes 1 height 0 2017-06-05 11:46:57.065 INFO [5038581] [NCSG::import_primitive@587] NCSG::import_primitive idx 0 typecode 6 csgname box 2017-06-05 11:46:57.065 INFO [5038581] [NCSG::import@462] NCSG::import DONE NPolygonizer::NPolygonizer(meta) verbosity : 3 ctrl : 66 poly : HY level : 0 2017-06-05 11:46:57.065 INFO [5038581] [NPolygonizer::polygonize@55] NPolygonizer::polygonize treedir /tmp/blyth/opticks/tboolean-hyctrl--/1 poly HY verbosity 3 index 0 2017-06-05 11:46:57.065 INFO [5038581] [NHybridMesher::make_mesh@17] NHybridMesher::make_mesh level 0 verbosity 3 ctrl 66 2017-06-05 11:46:57.065 INFO [5038581] [>::add_hexpatch@525] add_hexpatch 2017-06-05 11:46:57.066 INFO [5038581] [>::check@59] NOpenMesh::check OK 2017-06-05 11:46:57.066 INFO [5038581] [>::find_boundary_loops@128] find_boundary_loops NOpenMeshBoundary start 3 collected 6 : 3 23 19 15 11 7... 2017-06-05 11:46:57.066 INFO [5038581] [>::find_boundary_loops@189] find_boundary_loops he_bnd[0] 0 he_bnd[1] 1 he_bnd[2] 12 loops 1 2017-06-05 11:46:57.066 INFO [5038581] [>::find_faces@53] NOpenMeshFind::find_faces (faces with all vertices having same valence) select 0 param 6 count 6 totface 6 2017-06-05 11:46:57.066 INFO [5038581] [>::subdiv_test@82] subdiv_test ctrl 66 verbosity 3 n_target_faces 6 nloop0 1 sqrt3_split_r face fh 0 base_gen 0 base_id 1 depth 0 (even) newface_id 101 newface_gen 1 adjacent_valid Y adjacent_id 2 adjacent_gen 0 do_flip NO (even) newface_id 102 newface_gen 1 adjacent_valid N (even) newface_id 103 newface_gen 1 adjacent_valid Y adjacent_id 6 adjacent_gen 0 do_flip NO sqrt3_split_r face fh 1 base_gen 0 base_id 2 depth 0 (even) newface_id 201 newface_gen 1 adjacent_valid Y adjacent_id 3 adjacent_gen 0 do_flip NO (even) newface_id 202 newface_gen 1 adjacent_valid N (even) newface_id 203 newface_gen 1 adjacent_valid Y adjacent_id 101 adjacent_gen 1 do_flip YES sqrt3_split_r face fh 2 base_gen 0 base_id 3 depth 0 (even) newface_id 301 newface_gen 1 adjacent_valid Y adjacent_id 4 adjacent_gen 0 do_flip NO (even) newface_id 302 newface_gen 1 adjacent_valid N (even) newface_id 303 newface_gen 1 adjacent_valid Y adjacent_id 201 adjacent_gen 1 do_flip YES sqrt3_split_r face fh 3 base_gen 0 base_id 4 depth 0 (even) newface_id 401 newface_gen 1 adjacent_valid Y adjacent_id 5 adjacent_gen 0 do_flip NO (even) newface_id 402 newface_gen 1 adjacent_valid N (even) newface_id 403 newface_gen 1 adjacent_valid Y adjacent_id 301 adjacent_gen 1 do_flip YES sqrt3_split_r face fh 4 base_gen 0 base_id 5 depth 0 (even) newface_id 501 newface_gen 1 adjacent_valid Y adjacent_id 6 adjacent_gen 0 do_flip NO (even) newface_id 502 newface_gen 1 adjacent_valid N (even) newface_id 503 newface_gen 1 adjacent_valid Y adjacent_id 401 adjacent_gen 1 do_flip YES sqrt3_split_r face fh 5 base_gen 0 base_id 6 depth 0 (even) newface_id 601 newface_gen 1 adjacent_valid Y adjacent_id 103 adjacent_gen 1 do_flip YES (even) newface_id 602 newface_gen 1 adjacent_valid N (even) newface_id 603 newface_gen 1 adjacent_valid Y adjacent_id 501 adjacent_gen 1 do_flip YES (even) newface_id 604 newface_gen 1 adjacent_valid Y adjacent_id 203 adjacent_gen 2 do_flip NO ^^^^^^^ 203 is post-flip ??? ^^^^^^^^ 2017-06-05 11:46:57.066 INFO [5038581] [>::find_boundary_loops@128] find_boundary_loops NOpenMeshBoundary start 3 collected 6 : 3 23 19 15 11 7... 2017-06-05 11:46:57.066 INFO [5038581] [>::find_boundary_loops@189] find_boundary_loops he_bnd[0] 0 he_bnd[1] 1 he_bnd[2] 30 loops 1 2017-06-05 11:46:57.066 INFO [5038581] [>::subdiv_test@101] subdiv_test DONE ctrl 66 verbosity 3 nloop1 1 2017-06-05 11:46:57.066 INFO [5038581] [*NPolygonizer::polygonize@99] NPolygonizer::polygonize OK numTris 18 delta:opticksnpy blyth$ delta:opticksnpy blyth$ :: // base_id:1 adjacent: 2, -, 6 // 101, 102, 103 // // base_id:2 adjacent: 3, -, 101 // 201, 202, 203* // // base_id:3 adjacent: 4, -, 201 // 301, 302, 303* // // base_id:4 adjacent: 5, -, 301 // 401, 402, 403* // // base_id:5 adjacent: 6, -, 401 // 501, 502, 503* // // base_id:6 adjacent: 103, -, 501 // 601, 602, 603 // +-------+ / \ / \ / \ 2 / \ / 3 \ / 1 \ +-------+-------+ \ 4 / \ 6 / \ / 5 \ / \ / \ / +-------+