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