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:
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 */