star-cad

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

commit fb5c456ba501403564c177eb28cddfc76ec67690
parent 6b64e23e3b0088b1f89d2a41249ee37edace348a
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date:   Thu, 28 Jul 2022 19:08:26 +0200

Add copy operator

Diffstat:
Msrc/scad.h | 7+++++++
Msrc/scad_geometry.c | 38++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/src/scad.h b/src/scad.h @@ -263,6 +263,13 @@ scad_scene_geometry_boundary struct scad_geometry* geom, struct scad_geometry** out); +/* copy the geometry `geom'. */ +SCAD_API res_T +scad_geometry_copy + (struct scad_geometry* geom, + const char* name, /* Can be NULL */ + struct scad_geometry** copy); + /* Translate the geometry `geom' along (`dx', `dy', `dz'). */ SCAD_API res_T scad_geometry_translate diff --git a/src/scad_geometry.c b/src/scad_geometry.c @@ -828,6 +828,44 @@ error: goto exit; } +SCAD_API res_T +scad_geometry_copy + (struct scad_geometry* geom, + const char* name, /* Can be NULL */ + struct scad_geometry** copy) +{ + int* data1; + int* data2; + size_t sz1, sz2; + int ierr = 0; + res_T res = RES_OK; + + if(!geom){ + res = RES_BAD_ARG; + goto error; + } + + if(geom->scene->device->need_synchro) { + ERR(scad_device_synchronize(geom->scene->device)); + } + + sz1 = geom->gmsh_dimTags_n; + data1 = geom->gmsh_dimTags; + gmshModelOccCopy(data1, sz1, &data2, &sz2, &ierr); + geom->scene->device->need_synchro = 1; + ERR(gmsh_err_to_res_T(ierr)); + + ERR(scad_geometry_create(geom->scene, name, &geom)); + geom->gmsh_dimTags_n = sz2; + geom->gmsh_dimTags = data2; + +exit: + if(copy) *copy = geom; + return res; +error: + goto exit; +} + res_T scad_geometry_translate (struct scad_geometry* geom,