commit 1980a93cb288fdb0dbcc63ad915dfb7550e8a04a
parent 599a4c1a9eb602477eb0812f83ee5d89e93b35ae
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date: Tue, 22 Nov 2022 15:42:21 +0100
Merge remote-tracking branch 'refs/remotes/origin/develop' into develop
Diffstat:
4 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/src/scad.c b/src/scad.c
@@ -18,7 +18,7 @@
#include "scad_device.h"
#include "scad_geometry.h"
-#include <gmshc.h>
+#include <gmsh/gmshc.h>
#include <rsys/cstr.h>
#include <rsys/rsys.h>
diff --git a/src/scad.h b/src/scad.h
@@ -133,6 +133,13 @@ scad_geometry_get_name
(const struct scad_geometry* geom,
char** name);
+/* Get the `mass' of the geometry `geom'. It means area for a 2D geometry and
+ * volume for a 3D geometry. */
+SCAD_API res_T
+scad_geometry_get_mass
+ (struct scad_geometry* geom,
+ double* mass);
+
/* Add a rectangle to the scene, defined by a point `xyz' and
* `dxdy' the extents along the x-, y-axes. */
SCAD_API res_T
diff --git a/src/scad_device.c b/src/scad_device.c
@@ -23,7 +23,7 @@
#include <rsys/ref_count.h>
#include <rsys/cstr.h>
-#include <gmshc.h>
+#include <gmsh/gmshc.h>
#include <rsys/rsys.h>
/*******************************************************************************
diff --git a/src/scad_geometry.c b/src/scad_geometry.c
@@ -345,6 +345,45 @@ error:
}
res_T
+scad_geometry_get_mass
+ (struct scad_geometry* geom,
+ double* mass)
+{
+ res_T res = RES_OK;
+ int dim = 0;
+ size_t i, count = 0;
+ int* data = NULL;
+ size_t sz = 0;
+
+ if(!geom || !mass) goto error;
+
+ ERR(check_device(FUNC_NAME));
+
+ ASSERT(geom->gmsh_dimTags_n % 2 == 0);
+ count = geom->gmsh_dimTags_n / 2;
+
+ ERR(gather_tags(&geom, 1, SIZE_MAX, &data, &sz));
+
+ dim = data[0];
+ *mass = 0;
+ for (i=0; i<count; ++i) {
+ double geom_mass = 0;
+ int ierr = 0;
+ if (data[2*i] != dim) goto error;
+ gmshModelOccGetMass(data[2*i], data[2*i + 1], &geom_mass, &ierr);
+ ERR(gmsh_err_to_res_T(ierr));
+ *mass += geom_mass;
+ }
+
+exit:
+ free(data);
+ return res;
+error:
+ res = RES_BAD_ARG;
+ goto exit;
+}
+
+res_T
scad_add_rectangle
(const char* name,
const double xyz[3],