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 ee478bde6a30516fa0357ad499b5837352b761db
parent acb392cd371c8b6240c76316f4499ace02a975fc
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon, 13 Jan 2020 15:55:36 +0100

Change remaining tests according to new API

Diffstat:
Mcmake/CMakeLists.txt | 24+++++++++++++++++++-----
Msrc/test_senc_inconsistant_cube.c | 20+++++---------------
Msrc/test_senc_many_enclosures.c | 6+++---
Msrc/test_senc_sample_enclosure.c | 46+++++++++++++++-------------------------------
Msrc/test_senc_some_triangles.c | 2+-
5 files changed, 43 insertions(+), 55 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -29,16 +29,26 @@ find_package(RSys 0.8.1 REQUIRED) find_package(OpenMP 2.0 REQUIRED) if(NOT NO_TEST) -find_package(StarSP 0.7 REQUIRED) -find_package(Star3DUT 0.3.1 REQUIRED) + find_package(StarSP 0.7 REQUIRED) + find_package(Star3DUT 0.3.1 REQUIRED) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${RCMAKE_SOURCE_DIR}) include(rcmake) include(rcmake_runtime) - + if(NO_TEST) -rcmake_append_runtime_dirs(_runtime_dirs RSys Star3D) + include_directories( + ${RSys_INCLUDE_DIR} + ${Star3D_INCLUDE_DIR}) + + rcmake_append_runtime_dirs(_runtime_dirs RSys Star3D) +else() + include_directories( + ${RSys_INCLUDE_DIR} + ${Star3D_INCLUDE_DIR} + ${Star3DUT_INCLUDE_DIR} + ${StarSP_INCLUDE_DIR}) if(ADDITIONAL_TESTS) rcmake_append_runtime_dirs(_runtime_dirs RSys StarSP Star3DUT Star3D) @@ -81,11 +91,15 @@ rcmake_prepend_path(SENC_FILES_INC ${SENC_SOURCE_DIR}) rcmake_prepend_path(SENC_FILES_INC_API ${SENC_SOURCE_DIR}) rcmake_prepend_path(SENC_FILES_DOC ${PROJECT_SOURCE_DIR}/../) +if(CMAKE_COMPILER_IS_GNUCC) + set(MATH_LIB m) +endif() + add_library(senc SHARED ${SENC_FILES_SRC} ${SENC_FILES_INC} ${SENC_FILES_INC_API}) -target_link_libraries(senc RSys Star3D) +target_link_libraries(senc RSys Star3D ${MATH_LIB}) set_target_properties(senc PROPERTIES DEFINE_SYMBOL SENC_SHARED_BUILD diff --git a/src/test_senc_inconsistant_cube.c b/src/test_senc_inconsistant_cube.c @@ -51,7 +51,6 @@ static void test(const int convention) { struct mem_allocator allocator; - struct descriptor* desc = NULL; struct senc_device* dev = NULL; struct senc_scene* scn = NULL; struct senc_enclosure* enclosure; @@ -65,8 +64,6 @@ test(const int convention) CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) == RES_OK); - CHK(senc_scene_create(dev, convention, &scn) == RES_OK); - /* A 3D cube. * 2 enclosures (inside, outside) sharing the same triangles, * but opposite sides. @@ -74,19 +71,13 @@ test(const int convention) * in the opposite rotation order. */ ctx.positions = box_vertices; ctx.indices = inconsistant_box_indices; - ctx.scale = 1; - ctx.reverse_vrtx = 0; - ctx.reverse_med = 0; - d3(ctx.offset, 0, 0, 0); ctx.front_media = inconsistant_medium_front; ctx.back_media = inconsistant_medium_back; - CHK(senc_scene_add_geometry(scn, inconsistant_box_ntriangles, get_indices, - get_media, nvertices, get_position, NULL, NULL, &ctx) == RES_OK); - - CHK(senc_scene_analyze(scn, &desc) == RES_OK); + OK(senc_scene_create(dev, convention, inconsistant_box_ntriangles, + get_indices, get_media, nvertices, get_position, &ctx, &scn)); - CHK(senc_descriptor_get_enclosure_count(desc, &ecount) == RES_OK); + CHK(senc_scene_get_enclosure_count(scn, &ecount) == RES_OK); CHK(ecount == 2); CHK(senc_scene_get_convention(scn, &conv) == RES_OK); @@ -99,7 +90,7 @@ test(const int convention) char name[128]; enum senc_side side, expected_side; unsigned gid; - CHK(senc_descriptor_get_enclosure(desc, e, &enclosure) == RES_OK); + CHK(senc_scene_get_enclosure(scn, e, &enclosure) == RES_OK); CHK(senc_enclosure_get_header(enclosure, &header) == RES_OK); CHK(header.enclosed_media_count == 1); CHK(senc_enclosure_get_medium(enclosure, 0, &medium) == RES_OK); @@ -112,7 +103,7 @@ test(const int convention) sprintf(name, "test_inconsistant_cube_%s_%s_%u.obj", conv_front ? "front" : "back", conv_in ? "in" : "out", e); - dump_enclosure(desc, e, name); + dump_enclosure(scn, e, name); FOR_EACH(i, 0, header.triangle_count) { int same, reversed, fst_reversed; @@ -133,7 +124,6 @@ test(const int convention) SENC(scene_ref_put(scn)); SENC(device_ref_put(dev)); - SENC(descriptor_ref_put(desc)); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator); diff --git a/src/test_senc_many_enclosures.c b/src/test_senc_many_enclosures.c @@ -75,12 +75,12 @@ get_s3dut_position(const unsigned ivert, double pos[3], void* context) s3dut_ivert = ivert % (unsigned)ctx->data.nvertices; cyl_idx = ivert / (unsigned)ctx->data.nvertices; /* k th cylinder of the imbrication at grid position i,j */ - i = cyl_idx / (NB_CYL_Y * NB_CYL_Z); + i = (int)cyl_idx / (NB_CYL_Y * NB_CYL_Z); j = (cyl_idx / NB_CYL_Z ) % NB_CYL_Y; k = cyl_idx % NB_CYL_Z; ASSERT(i < NB_CYL_X && j < NB_CYL_Y && k < NB_CYL_Z); - ASSERT((i * NB_CYL_Y * NB_CYL_Z + j * NB_CYL_Z + k) * ctx->data.nvertices - + s3dut_ivert == ivert); + ASSERT((unsigned)(i * NB_CYL_Y * NB_CYL_Z + j * NB_CYL_Z + k) + * ctx->data.nvertices + s3dut_ivert == ivert); center_x = 2 * (1 + NB_CYL_X) * (i - NB_CYL_X / 2); center_y = 2 * (1 + NB_CYL_Y) * (j - NB_CYL_Y / 2); /* Compute scale and offset from imbrication */ diff --git a/src/test_senc_sample_enclosure.c b/src/test_senc_sample_enclosure.c @@ -27,7 +27,6 @@ int main(int argc, char** argv) { struct mem_allocator allocator; - struct descriptor* desc = NULL; struct senc_device* dev = NULL; struct senc_scene* scn = NULL; struct senc_enclosure* enclosure = NULL; @@ -44,53 +43,39 @@ main(int argc, char** argv) float st[2]; (void)argc, (void)argv; - CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); - CHK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev) - == RES_OK); - - CHK(senc_scene_create(dev, - SENC_CONVENTION_NORMAL_FRONT | SENC_CONVENTION_NORMAL_INSIDE, &scn) == RES_OK); - - vrtx_get.type = S3D_FLOAT3; - vrtx_get.usage = S3D_POSITION; - vrtx_get.get = senc_s3d_enclosure_get_position__; - - S3D(device_create(NULL, &allocator, 0, &s3d)); - - S3D(scene_create(s3d, &s3d_scn)); + OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator)); + OK(senc_device_create(NULL, &allocator, SENC_NTHREADS_DEFAULT, 1, &dev)); /* A 3D cube, but with a hole (incomplete). * 1 single enclosure including both sides of triangles */ - - ctx.positions = cube_vertices; /* Need a true cube */ + ctx.positions = cube_vertices; ctx.indices = box_indices; - ctx.scale = 1; - ctx.reverse_vrtx = 0; - ctx.reverse_med = 0; - d3(ctx.offset, 0, 0, 0); ctx.front_media = medium0; ctx.back_media = medium0; - CHK(senc_scene_add_geometry(scn, ntriangles - 1, get_indices, - get_media, nvertices, get_position, NULL, NULL, &ctx) == RES_OK); - - CHK(senc_scene_analyze(scn, &desc) == RES_OK); + OK(senc_scene_create(dev, + SENC_CONVENTION_NORMAL_FRONT | SENC_CONVENTION_NORMAL_INSIDE, + ntriangles - 1, get_indices, get_media, nvertices, get_position, &ctx, + &scn)); - CHK(senc_descriptor_get_enclosure(desc, 0, &enclosure) == RES_OK); - CHK(senc_enclosure_get_header(enclosure, &header) == RES_OK); + OK(senc_scene_get_enclosure(scn, 0, &enclosure)); + OK(senc_enclosure_get_header(enclosure, &header)); /* Put enclosure in a 3D view... */ + vrtx_get.type = S3D_FLOAT3; + vrtx_get.usage = S3D_POSITION; + vrtx_get.get = senc_s3d_enclosure_get_position__; + S3D(device_create(NULL, &allocator, 0, &s3d)); + S3D(scene_create(s3d, &s3d_scn)); S3D(shape_create_mesh(s3d, &s3d_shp)); S3D(mesh_setup_indexed_vertices(s3d_shp, header.triangle_count, senc_s3d_enclosure_get_indices__, header.vertices_count, &vrtx_get, 1, enclosure)); - S3D(scene_attach_shape(s3d_scn, s3d_shp)); - S3D(scene_view_create(s3d_scn, S3D_SAMPLE, &s3d_view)); /* ... and sample it. */ - CHK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng) == RES_OK); + OK(ssp_rng_create(&allocator, &ssp_rng_threefry, &rng)); FOR_EACH(i, 0, 10000) { struct s3d_attrib attrib; int n, c; @@ -123,7 +108,6 @@ main(int argc, char** argv) SENC(enclosure_ref_put(enclosure)); SENC(scene_ref_put(scn)); SENC(device_ref_put(dev)); - SENC(descriptor_ref_put(desc)); SSP(rng_ref_put(rng)); diff --git a/src/test_senc_some_triangles.c b/src/test_senc_some_triangles.c @@ -2723,7 +2723,7 @@ main(int argc, char** argv) OK(senc_scene_get_enclosure(scn, e, &enclosure)); OK(senc_enclosure_get_header(enclosure, &header)); CHK(header.triangle_count == - e ? CYL_TRG_COUNT : NB_CYL * CYL_TRG_COUNT); + (e ? CYL_TRG_COUNT : NB_CYL * CYL_TRG_COUNT)); OK(senc_enclosure_ref_put(enclosure)); }