commit ae5545ae8f53cf7d79cf48fda1cc0bcd975762d0
parent 361bb72404f0e5b358bdb9c8fcb7a5a3f2323a7a
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Fri, 9 Sep 2022 10:35:37 +0200
Fix geometry copy
Diffstat:
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/scad_geometry.c b/src/scad_geometry.c
@@ -964,12 +964,13 @@ res_T
scad_geometry_copy
(const struct scad_geometry* geom,
const char* name, /* Can be NULL */
- struct scad_geometry** copy)
+ struct scad_geometry** out_geometry)
{
int* data1;
- int* data2;
- size_t sz1, sz2;
+ int* tagout = NULL;
+ size_t sz1, tagoutn;
int ierr = 0;
+ struct scad_geometry* copy = NULL;
res_T res = RES_OK;
if(!geom){
@@ -984,19 +985,27 @@ scad_geometry_copy
sz1 = geom->gmsh_dimTags_n;
data1 = geom->gmsh_dimTags;
- gmshModelOccCopy(data1, sz1, &data2, &sz2, &ierr);
+ gmshModelOccCopy(data1, sz1, &tagout, &tagoutn, &ierr);
get_device()->need_synchro = 1;
ERR(gmsh_err_to_res_T(ierr));
- ERR(scad_geometry_create(name, copy));
- (*copy)->gmsh_dimTags_n = sz2;
- (*copy)->gmsh_dimTags = data2;
- ERR(device_register_tags(*copy));
+ ERR(scad_geometry_create(name, ©));
+ copy->gmsh_dimTags_n = tagoutn;
+ copy->gmsh_dimTags = tagout;
+ ERR(device_register_tags(copy));
exit:
if(out_geometry) *out_geometry = copy;
return res;
error:
+ if(copy) {
+ CHK(RES_OK == geometry_release(copy));
+ copy = NULL;
+ }
+ if(tagout) {
+ gmshModelOccRemove(tagout, tagoutn, 1, &ierr);
+ free(tagout);
+ }
goto exit;
}