solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 2ac46dd72d68fd77a94b8ceed89d9eac6c28df4a
parent 295a156fb02ba102cca4c9d466ef0cd961df363e
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu, 25 Aug 2016 14:14:21 +0200

Remove circular carvings

Carvings are now only polygons

Diffstat:
Msrc/ssol.h | 17+----------------
Msrc/ssol_shape.c | 25+------------------------
Msrc/test_ssol_shape.c | 30+++++++-----------------------
3 files changed, 9 insertions(+), 63 deletions(-)

diff --git a/src/ssol.h b/src/ssol.h @@ -136,34 +136,19 @@ struct ssol_quadric { } data; }; -struct ssol_carving_circle { - double center[2]; - double radius; -}; - -struct ssol_carving_polygon { +struct ssol_carving { void (*get) /* Retrieve the 2D coordinates of the vertex `ivert' */ (const size_t ivert, double position[2], void* ctx); size_t nb_vertices; /* #vertices */ void* context; /* User defined data */ }; -struct ssol_carving { - enum ssol_carving_type type; - union { - struct ssol_carving_circle circle; - struct ssol_carving_polygon polygon; - } data; - char internal; /* TODO comment/rename (?) this */ -}; - struct ssol_punched_surface { struct ssol_quadric* quadric; struct ssol_carving* carvings; size_t nb_carvings; }; - typedef void (*ssol_shader_getter_T) (struct ssol_device* dev, diff --git a/src/ssol_shape.c b/src/ssol_shape.c @@ -81,15 +81,7 @@ quadric_ok(const struct ssol_quadric* quadric) } static INLINE res_T -check_circle_ok(const struct ssol_carving_circle* circle) -{ - if (!circle || circle->radius <= 0) - return RES_BAD_ARG; - return RES_OK; -} - -static INLINE res_T -check_polygon_ok(const struct ssol_carving_polygon* polygon) +check_carving_ok(const struct ssol_carving* polygon) { if(!polygon || !polygon->get @@ -101,21 +93,6 @@ check_polygon_ok(const struct ssol_carving_polygon* polygon) } static INLINE res_T -check_carving_ok(const struct ssol_carving* carving) -{ - if (!carving) - return RES_BAD_ARG; - - switch (carving->type) { - case SSOL_CARVING_CIRCLE: - return check_circle_ok(&carving->data.circle); - case SSOL_CARVING_POLYGON: - return check_polygon_ok(&carving->data.polygon); - default: return RES_BAD_ARG; - } -} - -static INLINE res_T punched_surface_ok(const struct ssol_punched_surface* punched_surface) { size_t i; diff --git a/src/test_ssol_shape.c b/src/test_ssol_shape.c @@ -90,11 +90,9 @@ main(int argc, char** argv) CHECK(ssol_shape_ref_put(NULL), RES_BAD_ARG); CHECK(ssol_shape_ref_put(shape), RES_OK); - carving.type = SSOL_CARVING_CIRCLE; - carving.internal = 0; - carving.data.circle.center[0] = 0; - carving.data.circle.center[1] = 0; - carving.data.circle.radius = 1; + carving.get = get_polygon_vertices; + carving.nb_vertices = 1; + carving.context = NULL; quadric.type = SSOL_QUADRIC_PLANE; punched_surface.nb_carvings = 1; punched_surface.quadric = &quadric; @@ -117,27 +115,13 @@ main(int argc, char** argv) CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); quadric.type = SSOL_QUADRIC_PLANE; - carving.type = (enum ssol_carving_type)999; + carving.nb_vertices = 0; CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); - carving.type = SSOL_CARVING_CIRCLE; + carving.nb_vertices = 1; - carving.data.circle.radius = 0; + carving.get = NULL; CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); - carving.data.circle.radius = 1; - - carving.type = SSOL_CARVING_POLYGON; - carving.data.polygon.get = get_polygon_vertices; - carving.data.polygon.nb_vertices = 1; - carving.data.polygon.context = NULL; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_OK); - - carving.data.polygon.nb_vertices = 0; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); - carving.data.polygon.nb_vertices = 1; - - carving.data.polygon.get = NULL; - CHECK(ssol_punched_surface_setup(shape, &punched_surface), RES_BAD_ARG); - carving.data.polygon.get = get_polygon_vertices; + carving.get = get_polygon_vertices; quadric.type = SSOL_QUADRIC_PARABOL; quadric.data.parabol.focal = 1;