star-cad

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

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:
Msrc/scad.c | 15++++++++++++---
Msrc/scad_scene.c | 4+++-
Msrc/scad_scene.h | 1+
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; };