star-cad

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

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:
Msrc/scad.c | 2+-
Msrc/scad.h | 7+++++++
Msrc/scad_device.c | 2+-
Msrc/scad_geometry.c | 39+++++++++++++++++++++++++++++++++++++++
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],