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:
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;
+}