star-cad

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

commit acf96be6021919142c1687d8bd22ff728c8cf415
parent 350a04539173f8bbf8c55be363f83c3111613c0c
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon, 28 Nov 2022 11:18:59 +0100

Add options and change defaults to help improve mesh quality

Diffstat:
Msrc/scad.h | 53+++++++++++++++++++++++++++++++++++------------------
Msrc/scad_device.c | 12+++++++-----
2 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/src/scad.h b/src/scad.h @@ -45,46 +45,63 @@ struct scad_geometry; /* Wrapping of dimTags gmsh description */ /* Verbosity levels */ enum scad_verbosity_levels { - scad_verbosity_fatal_errors = 0, - scad_verbosity_errors = 1, - scad_verbosity_warnings = 2, - scad_verbosity_direct = 3, - scad_verbosity_information = 4, - scad_verbosity_status = 5, - scad_verbosity_debug = 99 + scad_verbosSCAD_ity_fatal_errors = 0, + Scad_verbosity_errors = 1, + Scad_verbosity_warnings = 2, + Scad_verbosity_direct = 3, + Scad_verbosity_information = 4, + Scad_verbosity_status = 5, + Scad_verbosity_debug = 99 }; /* Mesh algorithms */ enum scad_mesh_algorithm { - MeshAdapt = 1, - Delaunay = 5, - FrontalDelaunay = 6 + Scad_meshAdapt = 1, + Scad_Delaunay = 5, + Scad_frontal_Delaunay = 6 +}; + +enum scad_sizes_extend_from_boundary { + Scad_never = 0, + Scad_surfaces_and_volumes = 1, + Scad_surfaces_and_volumes_smallest = 2, + Scad_surfaces_only = -2, + Scad_volumes_only = -3 +}; + +enum scad_stl_solids { + Scad_single_solid = 0, + Scad_one_solid_per_surface = 1, + Scad_one_solid_per_physical_surface = 2 }; /* A type to specify options for the gmsh library */ struct scad_options { struct { - double StlOneSolidPerSurface; enum scad_mesh_algorithm Algorithm; - double MeshSizeFromPoints; + enum scad_sizes_extend_from_boundary MeshSizeExtendFromBoundary; + double MeshSizeFactor; double MeshSizeFromCurvature; - double MeshSizeMin; + int MeshSizeFromPoints; double MeshSizeMax; - double MeshSizeFactor; - double MeshSizeExtendFromBoundary; + double MeshSizeMin; + double Smoothing; + enum scad_stl_solids StlOneSolidPerSurface; } Mesh; struct { enum scad_verbosity_levels Verbosity; + int ExpertMode; /* Avoid user interaction on some option combinations */ } General; struct { - int Step; + int Step; /* Run UI when entering any scad API function; requires a FLTK-enabled gmsh build */ int SynchronizeOnRunUI; } Misc; }; #define SCAD_DEFAULT_OPTIONS__ \ - { { 2, FrontalDelaunay, 0, 36, 0, 1e+22, 1, 0 }, \ - { scad_verbosity_errors }, \ + { { Scad_frontal_Delaunay, Scad_surfaces_and_volumes, 1, 36, 1, 1e+22, 0, \ + 1, Scad_one_solid_per_physical_surface }, \ + { Scad_verbosity_errors, 1 }, \ { 0, 0 } \ } diff --git a/src/scad_device.c b/src/scad_device.c @@ -327,16 +327,18 @@ scad_set_options dev = get_device(); keep = dev->options; - SET_GMSH_OPTION_DOUBLE(Mesh.StlOneSolidPerSurface); SET_GMSH_OPTION_INT(Mesh.Algorithm); - SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeFromPoints); + SET_GMSH_OPTION_INT(Mesh.MeshSizeExtendFromBoundary); + SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeFactor); SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeFromCurvature); - SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeMin); + SET_GMSH_OPTION_INT(Mesh.MeshSizeFromPoints); SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeMax); - SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeFactor); - SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeExtendFromBoundary); + SET_GMSH_OPTION_DOUBLE(Mesh.MeshSizeMin); + SET_GMSH_OPTION_DOUBLE(Mesh.Smoothing); + SET_GMSH_OPTION_INT(Mesh.StlOneSolidPerSurface); SET_GMSH_OPTION_INT(General.Verbosity); + SET_GMSH_OPTION_INT(General.ExpertMode); if(options) { /* Check non-gmsh option validity if user-provided */