star-cad

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

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:
Msrc/scad_geometry.c | 25+++++++++++++++++--------
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)); + 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; }