commit eb87c7ea451ea34f17859fff00357137ac7f8493
parent a9b7b8061b28c432ba718dc7c95afc3f601198d0
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date: Mon, 1 Aug 2022 11:51:04 +0200
Add is_meshed parameter to a scene. Set outwardorientation before stl
export
Diffstat:
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/scad.c b/src/scad.c
@@ -274,9 +274,13 @@ scad_stl_export
}
#endif
}
- ERR(scad_device_synchronize(geometry->scene->device));
- gmshModelMeshGenerate(2, &ierr);
- ERR(gmsh_err_to_res_T(ierr));
+ /* WARNING : an export may be prohibited without a prior conformal mesh*/
+ if (!geometry->scene->is_meshed) {
+ ERR(scad_device_synchronize(geometry->scene->device));
+ gmshModelMeshGenerate(2, &ierr);
+ ERR(gmsh_err_to_res_T(ierr));
+ geometry->scene->is_meshed = 1;
+ }
ERR(scad_device_synchronize(geometry->scene->device));
gmshModelGetBoundary(data, sz, &tagout, &tagoutn, 1, 0, 0, &ierr);
@@ -296,6 +300,11 @@ scad_stl_export
goto error;
}
+ for(i = 0; i < sz/2; i++) {
+ gmshModelMeshSetOutwardOrientation(data[2*i+1], &ierr);
+ ERR(gmsh_err_to_res_T(ierr));
+ }
+
tcount = 0;
for(i = 0; i < tagoutn/2; i++) {
gmshModelMeshGetNodesByElementType(2, nodeTags+i, nodeTags_n+i,
diff --git a/src/scad_scene.c b/src/scad_scene.c
@@ -99,6 +99,7 @@ scad_scene_create
htable_names_init(device->allocator, &scn->geometry_names);
scn->device = device;
set_name(scn);
+ scn->is_meshed = 0;
ref_init(&scn->ref);
SCAD(device_ref_get(scn->device));
@@ -144,7 +145,8 @@ scad_scene_conformal_mesh
ERR(gmsh_err_to_res_T(ierr));
gmshModelMeshGenerate(2, &ierr);
ERR(gmsh_err_to_res_T(ierr));
-
+ scene->is_meshed = 1;
+
exit:
if(dimTags) free(dimTags);
return res;
diff --git a/src/scad_scene.h b/src/scad_scene.h
@@ -41,6 +41,7 @@ struct scad_scene {
struct scad_device* device;
struct htable_names geometry_names;
char name[8];
+ int is_meshed;
ref_T ref;
};