star-enclosures-3d

Extract enclosures from 3D geometry
git clone git://git.meso-star.fr/star-enclosures-3d.git
Log | Files | Refs | README | LICENSE

commit 6efcf48cae604accc818d93c54c2ad1ccc54bc16
parent f8251cd039c94ebddbab1fe78d615476337ce546
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 20 Feb 2018 10:45:03 +0100

Add missing code on by-enclosure triangle global id.

And some associated test code.

Diffstat:
Msrc/senc_scene_analyze.c | 2++
Msrc/test_senc_enclosure.c | 23++++++++++++++++-------
2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/senc_scene_analyze.c b/src/senc_scene_analyze.c @@ -1028,6 +1028,7 @@ build_result } } FOR_EACH(i, 0, 2) trg.medium[i] = trg_in->medium[i]; + trg.global_id = trg_in->global_id; if(side_membership[t] & FLAG_FRONT) { ++enc->header.triangle_count; OK(darray_triangle_in_push_back(&enc->sides, &trg)); @@ -1054,6 +1055,7 @@ build_result trg.vertice_id[2-i] = *id; /* Known vertex */ } FOR_EACH(i, 0, 2) trg.medium[1-i] = trg_in->medium[i]; + trg.global_id = trg_in->global_id; OK(darray_triangle_in_push_back(&enc->sides, &trg)); ASSERT(triangles_enc[t].enclosure[SIDE_BACK] == ENCLOSURE_NULL__); triangles_enc[t].enclosure[SIDE_BACK] = e; diff --git a/src/test_senc_enclosure.c b/src/test_senc_enclosure.c @@ -41,7 +41,7 @@ main(int argc, char** argv) unsigned gid; double vrtx[3]; struct context ctx; - unsigned i, n, count; + unsigned i, n, t, ecount; (void) argc, (void) argv; CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); @@ -75,8 +75,8 @@ main(int argc, char** argv) CHK(senc_scene_analyze(scn, &desc) == RES_OK); - CHK(senc_descriptor_get_enclosure_count(desc, &count) == RES_OK); - CHK(count == 2); + CHK(senc_descriptor_get_enclosure_count(desc, &ecount) == RES_OK); + CHK(ecount == 2); CHK(senc_descriptor_get_enclosure(desc, 0, &enclosure) == RES_OK); CHK(senc_enclosure_ref_get(NULL) == RES_BAD_ARG); @@ -136,7 +136,7 @@ main(int argc, char** argv) CHK(senc_enclosure_ref_put(enclosure) == RES_OK); - FOR_EACH(i, 0, count) { + FOR_EACH(i, 0, ecount) { CHK(senc_descriptor_get_enclosure(desc, i, &enclosure) == RES_OK); CHK(senc_enclosure_get_header(NULL, &header) == RES_BAD_ARG); @@ -151,6 +151,11 @@ main(int argc, char** argv) CHK(header->vertices_count == box_nvertices); CHK(header->is_infinite == (i == 0)); + FOR_EACH(t, 0, header->triangle_count) { + CHK(senc_enclosure_get_triangle_global_id(enclosure, t, &gid) == RES_OK); + CHK(gid == t); + } + CHK(senc_enclosure_ref_put(enclosure) == RES_OK); } @@ -188,8 +193,8 @@ main(int argc, char** argv) CHK(senc_scene_analyze(scn, &desc) == RES_OK); - CHK(senc_descriptor_get_enclosure_count(desc, &count) == RES_OK); - CHK(count == 1); + CHK(senc_descriptor_get_enclosure_count(desc, &ecount) == RES_OK); + CHK(ecount == 1); dump_enclosure(desc, 0, "test_enclosure_hole.obj"); @@ -207,8 +212,12 @@ main(int argc, char** argv) CHK(header->vertices_count == box_nvertices); CHK(header->is_infinite == 1); + FOR_EACH(t, 0, header->triangle_count) { + CHK(senc_enclosure_get_triangle_global_id(enclosure, t, &gid) == RES_OK); + CHK(gid == (t % header->unique_triangle_count)); + } + FOR_EACH(n, 0, header->unique_triangle_count) { - unsigned indices[2][3]; /* Read 2 consecutive triangles in the enclosure */ FOR_EACH(i, 0, 2) /* Triangle n VS 2n */ CHK(senc_enclosure_get_triangle(enclosure,