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 eacc4ca0fa0af0d658218960a65cc5a9ca5f88d2
parent c6378977ea910ddbf98ad871937038f49c60294b
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 13 Feb 2018 12:45:37 +0100

Add by-triangle mediums in tests.

Diffstat:
Msrc/test_senc_cube_behind_cube.c | 8++++----
Msrc/test_senc_cube_in_cube.c | 8++++----
Msrc/test_senc_descriptor.c | 12++++++------
Msrc/test_senc_enclosure.c | 8++++----
Msrc/test_senc_sample_enclosure.c | 4++--
Msrc/test_senc_scene.c | 20++++++++++----------
Msrc/test_senc_utils.h | 23+++++++++++++++--------
7 files changed, 45 insertions(+), 38 deletions(-)

diff --git a/src/test_senc_cube_behind_cube.c b/src/test_senc_cube_behind_cube.c @@ -41,8 +41,8 @@ main(int argc, char** argv) ctx.reverse_vrtx = 0; ctx.reverse_med = 0; d3(ctx.offset, 0, 0, 0); - ctx.front_medium = 0; - ctx.back_medium = 1; + ctx.front_mediums = medium0; + ctx.back_mediums = medium1; /* First cube */ CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, @@ -62,8 +62,8 @@ main(int argc, char** argv) /* Even further in +Z, even bigger */ d3(ctx.offset, -3, -3, 30); ctx.scale = 7; - ctx.front_medium = 1; - ctx.back_medium = 0; + ctx.front_mediums = medium1; + ctx.back_mediums = medium0; /* Third cube */ CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, diff --git a/src/test_senc_cube_in_cube.c b/src/test_senc_cube_in_cube.c @@ -42,9 +42,9 @@ main(int argc, char** argv) ctx.reverse_med = 0; d3(ctx.offset, 0, 0, 0); /* Smallest cube exterior is medium 0 */ - ctx.front_medium = 0; + ctx.front_mediums = medium0; /* Smallest cube interior is medium 1 */ - ctx.back_medium = 1; + ctx.back_mediums = medium1; /* First cube */ CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, @@ -67,9 +67,9 @@ main(int argc, char** argv) ctx.reverse_vrtx = 1; ctx.reverse_med = 1; /* Biggest cube exterior is medium 1 */ - ctx.front_medium = 1; + ctx.front_mediums = medium1; /* Biggest cube interior is medium 0 */ - ctx.back_medium = 0; /* mismatch with cube 2 */ + ctx.back_mediums = medium0; /* mismatch with cube 2 */ /* Third cube */ CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, diff --git a/src/test_senc_descriptor.c b/src/test_senc_descriptor.c @@ -50,8 +50,8 @@ main(int argc, char** argv) ctx.reverse_vrtx = 0; ctx.reverse_med = 0; d3(ctx.offset, 0, 0, 0); - ctx.front_medium = 0; - ctx.back_medium = 1; + ctx.front_mediums = medium0; + ctx.back_mediums = medium1; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); @@ -109,8 +109,8 @@ main(int argc, char** argv) CHK(senc_descriptor_get_global_mediums(NULL, box_nvertices, mediums) == RES_BAD_ARG); CHK(senc_descriptor_get_global_mediums(desc, 0, NULL) == RES_BAD_ARG); CHK(senc_descriptor_get_global_mediums(desc, 0, mediums) == RES_OK); - CHK(mediums[0] == ctx.front_medium - && mediums[1] == ctx.back_medium); + CHK(mediums[0] == ctx.front_mediums[0] + && mediums[1] == ctx.back_mediums[1]); CHK(senc_descriptor_get_global_enclosures(NULL, 0, enclosures) == RES_BAD_ARG); CHK(senc_descriptor_get_global_enclosures(NULL, box_nvertices, enclosures) == RES_BAD_ARG); @@ -137,8 +137,8 @@ main(int argc, char** argv) /* Add invalid duplicate geometry */ CHK(senc_descriptor_ref_put(desc) == RES_OK); desc = NULL; - ctx.front_medium = 1; - ctx.back_medium = 0; + ctx.front_mediums = medium1; + ctx.back_mediums = medium0; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_BAD_ARG); diff --git a/src/test_senc_enclosure.c b/src/test_senc_enclosure.c @@ -62,8 +62,8 @@ main(int argc, char** argv) ctx.reverse_vrtx = 0; ctx.reverse_med = 0; d3(ctx.offset, 0, 0, 0); - ctx.front_medium = 0; - ctx.back_medium = 1; + ctx.front_mediums = medium0; + ctx.back_mediums = medium1; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); @@ -118,8 +118,8 @@ main(int argc, char** argv) ctx.indices = box_indices; ctx.scale = 1; d3(ctx.offset, 0, 0, 0); - ctx.front_medium = 0; - ctx.back_medium = 0; + ctx.front_mediums = medium0; + ctx.back_mediums = medium0; CHK(senc_scene_add_geometry(scn, box_ntriangles - 1, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); diff --git a/src/test_senc_sample_enclosure.c b/src/test_senc_sample_enclosure.c @@ -67,8 +67,8 @@ main(int argc, char** argv) ctx.reverse_vrtx = 0; ctx.reverse_med = 0; d3(ctx.offset, 0, 0, 0); - ctx.front_medium = 0; - ctx.back_medium = 0; + ctx.front_mediums = medium0; + ctx.back_mediums = medium0; CHK(senc_scene_add_geometry(scn, box_ntriangles - 1, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c @@ -52,8 +52,8 @@ main(int argc, char** argv) ctx.reverse_vrtx = 0; ctx.reverse_med = 0; d3(ctx.offset, 0, 0, 0); - ctx.front_medium = 0; - ctx.back_medium = 1; + ctx.front_mediums = medium0; + ctx.back_mediums = medium1; CHK(senc_scene_add_geometry(NULL, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_BAD_ARG); @@ -82,34 +82,34 @@ main(int argc, char** argv) CHK(senc_scene_ref_put(scn) == RES_OK); /* Invalid medium ID */ - ctx.back_medium = 12; + ctx.back_mediums = medium1_12; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_BAD_ARG); - ctx.back_medium = 1; + ctx.back_mediums = medium1; /* Invalid vertex ID */ CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices - 1, get_position, &ctx) == RES_BAD_ARG); - /* Incoherent medium on duplicate triangle */ - ctx.back_medium = 3; + /* Incoherent medium on a duplicate triangle */ + ctx.back_mediums = medium1_3; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_BAD_ARG); /* It is OK dd geometry after a failed add */ - ctx.back_medium = 1; + ctx.back_mediums = medium1; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); /* Coherent medium on duplicate triangle */ - ctx.back_medium = 1; + ctx.back_mediums = medium1; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); /* Coherent medium on duplicate triangle V2 */ ctx.reverse_med = 1; - ctx.front_medium = 1; - ctx.back_medium = 0; + ctx.front_mediums = medium1; + ctx.back_mediums = medium0; CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_mediums, box_nvertices, get_position, &ctx) == RES_OK); diff --git a/src/test_senc_utils.h b/src/test_senc_utils.h @@ -37,9 +37,9 @@ static const unsigned box_nvertices = sizeof(box_vertices) / sizeof(double[3]); /* The following array lists the indices toward the 3D vertices of each * triangle. * ,6---,7 ,6----7 - * ,' | ,'/| ,' | \ | - * 2----3' / | 2', | \ | - * |', | / ,5 | ',4---,5 + * ,' | ,'/| ,' | \ | Y Z + * 2----3' / | 2', | \ | | ,' + * |', | / ,5 | ',4---,5 0----X * | ',|/,' | ,' | ,' * 0----1' 0----1' * Front, right Back, left and @@ -58,13 +58,21 @@ struct context { const double* positions; const unsigned* indices; struct cube_specifics* specifics; - unsigned front_medium; - unsigned back_medium; + const unsigned* front_mediums; + const unsigned* back_mediums; double offset[3]; double scale; char reverse_vrtx, reverse_med; }; +static const unsigned medium0[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +static const unsigned medium1[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; +static const unsigned medium2[12] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; +static const unsigned medium1_3[12] = { 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; +static const unsigned medium1_12[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1 }; +static const unsigned medium1_back0[12] = { 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 }; +static const unsigned medium1_front0[12] = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static void get_indices(const unsigned itri, unsigned ids[3], void* context) { @@ -90,9 +98,8 @@ get_mediums(const unsigned itri, unsigned medium[2], void* context) { struct context* ctx = context; ASSERT(medium && ctx); - (void) itri; - medium[ctx->reverse_med ? 1 : 0] = ctx->front_medium; - medium[ctx->reverse_med ? 0 : 1] = ctx->back_medium; + medium[ctx->reverse_med ? 1 : 0] = ctx->front_mediums[itri]; + medium[ctx->reverse_med ? 0 : 1] = ctx->back_mediums[itri]; } /*******************************************************************************