star-cad

Geometric operators for computer-aided design
git clone git://git.meso-star.fr/star-cad.git
Log | Files | Refs | README | LICENSE

commit 5136bcab8f6771f1c42fb221bf46a246cb0e0210
parent 51237ee237a6011d814e67578e61db2269a51da6
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date:   Tue, 17 Jan 2023 15:46:45 +0100

Add `reverse' option to scad_stl_export function

Diffstat:
Msrc/scad.c | 5+++++
Msrc/scad.h | 1+
Msrc/test_api.c | 8++++----
Msrc/test_export.c | 12++++++------
Msrc/test_partition.c | 8++++----
5 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/src/scad.c b/src/scad.c @@ -264,6 +264,7 @@ res_T scad_stl_export (struct scad_geometry* geometry, const char* prefix, + const int reverse, const int binary) { struct str filename; @@ -323,6 +324,8 @@ scad_stl_export gmshModelMeshSetOutwardOrientation(data[2*i+1], &ierr); ERR(gmsh_err_to_res_T(ierr)); } + if (reverse) gmshModelMeshReverse(data, sz, &ierr); + ERR(gmsh_err_to_res_T(ierr)); /* Get tags to be written (boundary of geometry) */ gmshModelGetBoundary(data, sz, &faces_dimTags, &faces_dimTags_n, 1, 0, 0, &ierr); @@ -336,6 +339,8 @@ scad_stl_export for(i = 0; i < sz/2; i++) { ASSERT(data[2*i] == dim_ctrl); /* Only 3D tags */ } + if (reverse) gmshModelMeshReverse(data, sz, &ierr); + ERR(gmsh_err_to_res_T(ierr)); } /* Allocate room for arrays */ diff --git a/src/scad.h b/src/scad.h @@ -404,6 +404,7 @@ SCAD_API res_T scad_stl_export (struct scad_geometry* geom, const char* prefix, /* Can be NULL if geometry was named: use geometry name */ + const int reverse, /* set `1' to reverse mesh */ const int binary); /* File format */ SCAD_API res_T diff --git a/src/test_api.c b/src/test_api.c @@ -239,10 +239,10 @@ main(int argc, char* argv[]) } MEM_RM(&allocator, geom_array); - BAD(scad_stl_export(NULL, NULL, 0)); - BAD(scad_stl_export(geom2, NULL, 0)); /* geom2 has no name */ - OK(scad_stl_export(geom2, "/tmp/test", 0)); - OK(scad_stl_export(geom1, NULL, 0)); + BAD(scad_stl_export(NULL, NULL, 0, 0)); + BAD(scad_stl_export(geom2, NULL, 0, 0)); /* geom2 has no name */ + OK(scad_stl_export(geom2, "/tmp/test", 0, 0)); + OK(scad_stl_export(geom1, NULL, 0, 0)); BAD(scad_stl_export_split(NULL, NULL, 0)); BAD(scad_stl_export_split(geom2, NULL, 0)); /* geom2 has no name */ diff --git a/src/test_export.c b/src/test_export.c @@ -54,14 +54,14 @@ main(int argc, char* argv[]) OK(scad_scene_mesh()); - OK(scad_stl_export(rectangle, NULL, 0)); - OK(scad_stl_export(rectangle, "bin_rectangle", 1)); + OK(scad_stl_export(rectangle, NULL, 0, 0)); + OK(scad_stl_export(rectangle, "bin_rectangle", 0, 1)); - OK(scad_stl_export(cube, NULL, 0)); - OK(scad_stl_export(cube, "bin_cube", 1)); + OK(scad_stl_export(cube, NULL, 0, 0)); + OK(scad_stl_export(cube, "bin_cube", 0, 1)); - OK(scad_stl_export(cube2, NULL, 0)); - OK(scad_stl_export(cube2, "bin_cube2", 1)); + OK(scad_stl_export(cube2, NULL, 0, 0)); + OK(scad_stl_export(cube2, "bin_cube2", 0, 1)); OK(scad_finalize()); diff --git a/src/test_partition.c b/src/test_partition.c @@ -65,14 +65,14 @@ two_geoms if(allow_overlapping) { snprintf(name, sizeof(name), "part_%g_1o", x); - OK(scad_stl_export(out_geoms[0], name, 0)); + OK(scad_stl_export(out_geoms[0], name, 0, 0)); snprintf(name, sizeof(name), "part_%g_2o", x); - OK(scad_stl_export(out_geoms[1], name, 1)); + OK(scad_stl_export(out_geoms[1], name, 0, 1)); } else { snprintf(name, sizeof(name), "part_%g_1", x); - OK(scad_stl_export(geoms[0], name, 0)); + OK(scad_stl_export(geoms[0], name, 0, 0)); snprintf(name, sizeof(name), "part_%g_2", x); - OK(scad_stl_export(geoms[1], name, 1)); + OK(scad_stl_export(geoms[1], name, 0, 1)); } end: