star-cad

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

commit b06bb9c2f717c3c1f52a84f3d2e47fcba0ef4d76
parent 21a4f2d08c7bd0a6e1914d833b52ebc9fc4a1bce
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date:   Sun, 14 Aug 2022 15:42:11 +0200

Add step import function

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

diff --git a/src/scad.h b/src/scad.h @@ -311,6 +311,13 @@ scad_stl_export_split const char* prefix, /* Can be NULL if geometry was named: use geometry name */ const int binary); /* File format */ +SCAD_API res_T +scad_step_import + (struct scad_scene* scene, + const char* filename, + struct scad_geometry*** out_geometry, + size_t* out_geometry_n); + SCAD_API res_T /* FIXME remove this */ scad_run_ui (void); diff --git a/src/scad_geometry.c b/src/scad_geometry.c @@ -113,7 +113,7 @@ scad_geometry_release } } else if(sz != 0) { - gmshModelOccRemove(data, sz, 0, &ierr); + gmshModelOccRemove(data, sz, 1, &ierr); ERR(gmsh_err_to_res_T(ierr)); ASSERT(data); free(data); @@ -959,7 +959,7 @@ scad_scene_geometry_boundary struct scad_geometry** out_geometry) { int* tagout = NULL; -size_t tagoutn, sz; + size_t tagoutn, sz; int* data; int ierr = 0; res_T res = RES_OK; @@ -989,3 +989,54 @@ error: goto exit; } +SCAD_API res_T +scad_step_import + (struct scad_scene* scene, + const char* filename, + struct scad_geometry*** out_geometry, + size_t* out_geometry_n) +{ + int ierr; + int* tagout = NULL; + size_t tagoutn, i; + res_T res = RES_OK; + + if(!scene || !filename) { + res = RES_BAD_ARG; + goto error; + } + + if(scene->device->need_synchro) { + ERR(scad_device_synchronize(scene->device)); + } + + gmshModelOccImportShapes(filename, + &tagout, &tagoutn, + 1, + "step", + &ierr); + ERR(gmsh_err_to_res_T(ierr)); + + *out_geometry = malloc(tagoutn/2 * sizeof(struct scad_geometry*)); + + for (i=0; i<tagoutn/2; ++i) { + /*struct str strname;*/ + /*str_init(NULL, &strname);*/ + /*ERR(str_set(&strname, name));*/ + /*ERR(str_append_printf(&strname,"_%lu", (unsigned long)i)); */ + + /*ERR(scad_geometry_create(scene, str_cget(&strname), &(*out_geometry)[i]));*/ + ERR(scad_geometry_create(scene, NULL, &(*out_geometry)[i])); + (*out_geometry)[i]->gmsh_dimTags_n = 2; + (*out_geometry)[i]->gmsh_dimTags = malloc(2 * sizeof(int)); + (*out_geometry)[i]->gmsh_dimTags[0] = tagout[2*i]; + (*out_geometry)[i]->gmsh_dimTags[1] = tagout[2*i+1]; + /*str_release(&strname);*/ + } + + *out_geometry_n = tagoutn/2; +exit: + return res; +error: + goto exit; +}