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 fbf6bbb57d066d51279b9d1ff5c17e127d3ece8b
parent 6173ec407affbda1fde1c2f1637835816e9105db
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon, 19 Feb 2018 11:41:33 +0100

Given access to scene counts through new API calls.

Diffstat:
Msrc/senc.h | 20++++++++++++++++++++
Msrc/senc_scene.c | 40++++++++++++++++++++++++++++++++++++++++
Msrc/test_senc_scene.c | 34++++++++++++++++++++++++++++++++++
3 files changed, 94 insertions(+), 0 deletions(-)

diff --git a/src/senc.h b/src/senc.h @@ -125,6 +125,26 @@ senc_scene_analyze struct senc_descriptor** descriptor); SENC_API res_T +senc_scene_get_triangles_count + (const struct senc_scene* scene, + unsigned* count); + +SENC_API res_T +senc_scene_get_unique_triangles_count + (const struct senc_scene* scene, + unsigned* count); + +SENC_API res_T +senc_scene_get_vertices_count + (const struct senc_scene* scene, + unsigned* count); + +SENC_API res_T +senc_scene_get_unique_vertices_count + (const struct senc_scene* scene, + unsigned* count); + +SENC_API res_T senc_scene_ref_get (struct senc_scene* scene); diff --git a/src/senc_scene.c b/src/senc_scene.c @@ -261,6 +261,46 @@ error: } res_T +senc_scene_get_triangles_count + (const struct senc_scene* scn, + unsigned* count) +{ + if(!scn || !count) return RES_BAD_ARG; + *count = scn->ntris; + return RES_OK; +} + +res_T +senc_scene_get_unique_triangles_count + (const struct senc_scene* scn, + unsigned* count) +{ + if(!scn || !count) return RES_BAD_ARG; + *count = scn->nutris; + return RES_OK; +} + +res_T +senc_scene_get_vertices_count + (const struct senc_scene* scn, + unsigned* count) +{ + if(!scn || !count) return RES_BAD_ARG; + *count = scn->nverts; + return RES_OK; +} + +res_T +senc_scene_get_unique_vertices_count + (const struct senc_scene* scn, + unsigned* count) +{ + if(!scn || !count) return RES_BAD_ARG; + *count = scn->nuverts; + return RES_OK; +} + +res_T senc_scene_ref_get(struct senc_scene* scn) { if(!scn) return RES_BAD_ARG; diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c @@ -29,6 +29,7 @@ main(int argc, char** argv) struct senc_scene* scn = NULL; struct senc_descriptor* desc = NULL; struct context ctx; + unsigned count; (void)argc, (void)argv; CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); @@ -45,6 +46,30 @@ main(int argc, char** argv) /* It is valid to have unused media */ CHK(senc_scene_create(dev, 4, &scn) == RES_OK); + CHK(senc_scene_get_triangles_count(NULL, &count) == RES_BAD_ARG); + CHK(senc_scene_get_triangles_count(scn, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_triangles_count(NULL, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_triangles_count(scn, &count) == RES_OK); + CHK(count == 0); + + CHK(senc_scene_get_unique_triangles_count(NULL, &count) == RES_BAD_ARG); + CHK(senc_scene_get_unique_triangles_count(scn, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_unique_triangles_count(NULL, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_unique_triangles_count(scn, &count) == RES_OK); + CHK(count == 0); + + CHK(senc_scene_get_vertices_count(NULL, &count) == RES_BAD_ARG); + CHK(senc_scene_get_vertices_count(scn, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_vertices_count(NULL, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_vertices_count(scn, &count) == RES_OK); + CHK(count == 0); + + CHK(senc_scene_get_unique_vertices_count(NULL, &count) == RES_BAD_ARG); + CHK(senc_scene_get_unique_vertices_count(scn, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_unique_vertices_count(NULL, NULL) == RES_BAD_ARG); + CHK(senc_scene_get_unique_vertices_count(scn, &count) == RES_OK); + CHK(count == 0); + /* A 3D cube */ ctx.positions = box_vertices; ctx.indices = box_indices; @@ -70,6 +95,15 @@ main(int argc, char** argv) CHK(senc_scene_add_geometry(scn, box_ntriangles, get_indices, get_media, box_nvertices, get_position, &ctx) == RES_OK); + CHK(senc_scene_get_triangles_count(scn, &count) == RES_OK); + CHK(count == box_ntriangles); + CHK(senc_scene_get_unique_triangles_count(scn, &count) == RES_OK); + CHK(count == box_ntriangles); + CHK(senc_scene_get_vertices_count(scn, &count) == RES_OK); + CHK(count == box_nvertices); + CHK(senc_scene_get_unique_vertices_count(scn, &count) == RES_OK); + CHK(count == box_nvertices); + CHK(senc_scene_analyze(NULL, NULL) == RES_BAD_ARG); CHK(senc_scene_analyze(scn, NULL) == RES_BAD_ARG); CHK(senc_scene_analyze(NULL, &desc) == RES_BAD_ARG);