commit 1c30b6f6da8a368de8392e517879baa87ec52b44
parent 0f0da4bebf1c223b64c2f2cc9f310009a3d7db11
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Fri, 21 Apr 2023 09:45:16 +0200
Remove the reverse arg of STL-related API calls and introduce scad_geometry_reverse
Diffstat:
6 files changed, 64 insertions(+), 48 deletions(-)
diff --git a/src/scad.c b/src/scad.c
@@ -304,10 +304,9 @@ error:
res_T
scad_stl_get_data
(struct scad_geometry* geometry,
- const int reverse,
struct darray_double* triangles)
{
- return scad_stl_get_data_partial(geometry, NULL, 0, reverse, triangles);
+ return scad_stl_get_data_partial(geometry, NULL, 0, triangles);
}
res_T
@@ -315,7 +314,6 @@ scad_stl_get_data_partial
(struct scad_geometry* geometry,
struct scad_geometry** dont,
const size_t dont_count,
- const int reverse,
struct darray_double* triangles)
{
size_t* nodeTags = NULL;
@@ -344,12 +342,7 @@ scad_stl_get_data_partial
tags_initialized = 1;
/* Get 2d tags */
- if(reverse) {
- gmshModelMeshReverse(geometry->gmsh_dimTags, geometry->gmsh_dimTags_n, &ierr);
- ERR(get_2d_tags(geometry, &tags));
- } else {
- ERR(get_2d_tags(geometry, &tags));
- }
+ ERR(get_2d_tags(geometry, &tags));
sz = darray_int_size_get(&tags);
data = darray_int_data_get(&tags);
@@ -446,7 +439,6 @@ res_T
scad_stl_export
(struct scad_geometry* geometry,
const char* prefix,
- const int reverse,
const int binary)
{
res_T res = RES_OK;
@@ -471,7 +463,7 @@ scad_stl_export
ERR(str_copy(&filename, &geometry->name));
}
ERR(str_append(&filename, ".stl"));
- ERR(scad_stl_get_data(geometry, reverse, &trg));
+ ERR(scad_stl_get_data(geometry, &trg));
ERR(scad_stl_data_write(&trg, str_cget(&filename), binary));
exit:
@@ -490,7 +482,6 @@ scad_stl_export_partial
struct scad_geometry** dont,
const size_t dont_count,
const char* prefix,
- const int reverse,
const int binary)
{
res_T res = RES_OK;
@@ -519,7 +510,7 @@ scad_stl_export_partial
ERR(str_copy(&filename, &geometry->name));
}
ERR(str_append(&filename, ".stl"));
- ERR(scad_stl_get_data_partial(geometry, dont, dont_count, reverse, &trg));
+ ERR(scad_stl_get_data_partial(geometry, dont, dont_count, &trg));
ERR(scad_stl_data_write(&trg, str_cget(&filename), binary));
exit:
@@ -536,7 +527,6 @@ res_T
scad_stl_export_split
(struct scad_geometry* geometry,
const char* prefix,
- const int reverse,
const int binary)
{
size_t i;
@@ -556,7 +546,7 @@ scad_stl_export_split
ERR(scad_geometry_explode(geometry, prefix, &parts, &count));
ASSERT(count*2 == geometry->gmsh_dimTags_n);
for(i = 0; i < count; i++) {
- ERR(scad_stl_export(parts[i], NULL, reverse, binary));
+ ERR(scad_stl_export(parts[i], NULL, binary));
}
exit:
diff --git a/src/scad.h b/src/scad.h
@@ -358,6 +358,11 @@ scad_geometry_rename
(struct scad_geometry* geom,
const char* name); /* Can be NULL */
+/* Reverse the orientation of the geomery `geome' */
+SCAD_API res_T
+scad_geometry_reverse
+ (struct scad_geometry* geom);
+
/* Translate the geometry `geom' along (`dx', `dy', `dz'). */
SCAD_API res_T
scad_geometry_translate
@@ -412,7 +417,6 @@ 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 */
/* Same as previous, but geometries that are part of `exclude' is not exported */
@@ -422,7 +426,6 @@ scad_stl_export_partial
struct scad_geometry** exclude,
const size_t exclude_count,
const char* prefix,
- const int reverse,
const int binary);
/* Export the geometry `geom' in as many files than its count. */
@@ -430,7 +433,6 @@ SCAD_API res_T
scad_stl_export_split
(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 */
/* Get the mesh of the geometry `geom' into a darray_double, each triangle
@@ -439,7 +441,6 @@ scad_stl_export_split
SCAD_API res_T
scad_stl_get_data
(struct scad_geometry* geom,
- const int reverse, /* set `1' to reverse mesh */
struct darray_double* triangles); /* Can contain some triangles already */
/* Same as previous, but geometries that are part of `exclude' is not collected */
@@ -448,7 +449,6 @@ scad_stl_get_data_partial
(struct scad_geometry* geometry,
struct scad_geometry** exclude,
const size_t exclude_count,
- const int reverse,
struct darray_double* triangles); /* Can contain some triangles already */
/* Write the mesh the same way stl_export do, using data as returned by
diff --git a/src/scad_geometry.c b/src/scad_geometry.c
@@ -1401,6 +1401,29 @@ error:
}
res_T
+scad_geometry_reverse
+ (struct scad_geometry* geom)
+{
+ int ierr = 0;
+ res_T res = RES_OK;
+
+ if(!geom) {
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+ ERR(check_device(FUNC_NAME));
+
+ gmshModelMeshReverse(geom->gmsh_dimTags, geom->gmsh_dimTags_n, &ierr);
+ ERR(gmsh_err_to_res_T(ierr));
+
+exit:
+ return res;
+error:
+ goto exit;
+}
+
+res_T
scad_geometry_translate
(struct scad_geometry* geom,
const double dxdydz[3])
diff --git a/src/test_api.c b/src/test_api.c
@@ -244,9 +244,9 @@ main(int argc, char* argv[])
MEM_RM(&allocator, geom_array);
darray_double_init(&allocator, &trg);
- BAD(scad_stl_get_data(NULL, 0, NULL));
- BAD(scad_stl_get_data(geom2, 0, NULL));
- OK(scad_stl_get_data(geom2, 0, &trg));
+ BAD(scad_stl_get_data(NULL, NULL));
+ BAD(scad_stl_get_data(geom2, NULL));
+ OK(scad_stl_get_data(geom2, &trg));
BAD(scad_stl_data_write(NULL, NULL, 0));
BAD(scad_stl_data_write(&trg, NULL, 0));
BAD(scad_stl_data_write(NULL, "/tmp/test", 0));
@@ -254,21 +254,24 @@ main(int argc, char* argv[])
OK(scad_stl_data_write(&trg, "/tmp/test", 1));
darray_double_release(&trg);
- 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(geom2, "/tmp/test", 0, 1));
- OK(scad_stl_export(geom1, NULL, 0, 0));
- OK(scad_stl_export(geom1, NULL, 0, 1));
-
- BAD(scad_stl_export_split(NULL, NULL, 0, 0));
- BAD(scad_stl_export_split(geom2, NULL, 0, 0)); /* geom2 has no name */
- OK(scad_stl_export_split(geom2, "/tmp/test", 0, 0));
- BAD(scad_stl_export_split(geom2, "/tmp/test", 0, 0)); /* Produce same names */
- OK(scad_stl_export_split(geom2, "/tmp/testb", 0, 1));
- OK(scad_stl_export_split(geom1, NULL, 0, 0));
- BAD(scad_stl_export_split(geom1, NULL, 0, 1)); /* Produce same names */
- OK(scad_stl_export_split(geom1, "different_names", 0, 1));
+ 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(geom2, "/tmp/test", 1));
+ OK(scad_stl_export(geom1, NULL, 0));
+ OK(scad_stl_export(geom1, NULL, 1));
+
+ BAD(scad_stl_export_split(NULL, NULL, 0));
+ BAD(scad_stl_export_split(geom2, NULL, 0)); /* geom2 has no name */
+ OK(scad_stl_export_split(geom2, "/tmp/test", 0));
+ BAD(scad_stl_export_split(geom2, "/tmp/test", 0)); /* Produce same names */
+ OK(scad_stl_export_split(geom2, "/tmp/testb", 1));
+ OK(scad_stl_export_split(geom1, NULL, 0));
+ BAD(scad_stl_export_split(geom1, NULL, 1)); /* Produce same names */
+ OK(scad_stl_export_split(geom1, "different_names", 1));
+
+ BAD(scad_geometry_reverse(NULL));
+ OK(scad_geometry_reverse(geom1));
BAD(scad_geometry_get_name(NULL, &name));
BAD(scad_geometry_get_name(geom1, NULL));
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, 0));
- OK(scad_stl_export(rectangle, "bin_rectangle", 0, 1));
+ OK(scad_stl_export(rectangle, NULL, 0));
+ OK(scad_stl_export(rectangle, "bin_rectangle", 1));
- OK(scad_stl_export(cube, NULL, 0, 0));
- OK(scad_stl_export(cube, "bin_cube", 0, 1));
+ OK(scad_stl_export(cube, NULL, 0));
+ OK(scad_stl_export(cube, "bin_cube", 1));
- OK(scad_stl_export(cube2, NULL, 0, 0));
- OK(scad_stl_export(cube2, "bin_cube2", 0, 1));
+ OK(scad_stl_export(cube2, NULL, 0));
+ OK(scad_stl_export(cube2, "bin_cube2", 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, 0));
+ OK(scad_stl_export(out_geoms[0], name, 0));
snprintf(name, sizeof(name), "part_%g_2o", x);
- OK(scad_stl_export(out_geoms[1], name, 0, 1));
+ OK(scad_stl_export(out_geoms[1], name, 1));
} else {
snprintf(name, sizeof(name), "part_%g_1", x);
- OK(scad_stl_export(geoms[0], name, 0, 0));
+ OK(scad_stl_export(geoms[0], name, 0));
snprintf(name, sizeof(name), "part_%g_2", x);
- OK(scad_stl_export(geoms[1], name, 0, 1));
+ OK(scad_stl_export(geoms[1], name, 1));
}
end: