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:
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: