diff --git a/ROADMAP.md b/ROADMAP.md index 8f4b307..2c0061e 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -7,8 +7,8 @@ LS-PrePost, with hexahedral meshing as the centre of gravity, plus its own linea |---|---|---| | M0 Foundation | Workspace, quality gates (`cargo xtask ci`), FE model, command engine with rollback and panic guard, CLI, geometry boundary on SolidCraft's kernel and tessellator | done | | M1 Surface preparation | Robust adaptive-precision predicates; weld, closed/manifold/orientation checks and feature edges on the tessellated boundary; mesh quality metrics | next | -| M2 Tetrahedral meshing | 3D Delaunay (Bowyer–Watson), boundary recovery, Delaunay refinement to a size field, Voronoi-based optimization (CVT/ODT), sliver removal; linear and quadratic tets | planned | -| M3 Hexahedral meshing (core) | Method from the literature survey: a hex mesher whose output is always valid, then quality-driven methods; hex-dominant fallback | planned | +| M2 Tetrahedral meshing | Bowyer–Watson Delaunay, robust constrained Delaunay boundary recovery (Diazzi et al. 2023), Delaunay refinement to a size field, ODT smoothing, Klingner–Shewchuk sliver removal; linear and quadratic tets | planned | +| M3 Hexahedral meshing (core) | Octree/grid dual all-hex (valid on any input), then hex-dominant by tet recombination, then polycube for blocky parts; see docs/meshing/literature.md | planned | | M4 Model definition | Materials, sections, sets and surfaces, boundary conditions, loads, steps, output requests | planned | | M5 Solver decks | Abaqus input, Nastran bulk data, LS-DYNA keyword: writers first, then readers | planned | | M6 Linear solver | Element library, sparse assembly, linear static and modal analysis, verified against analytic solutions | planned | diff --git a/docs/adr/0001-libraries.md b/docs/adr/0001-libraries.md index d2d2ad4..7a4fda7 100644 --- a/docs/adr/0001-libraries.md +++ b/docs/adr/0001-libraries.md @@ -39,6 +39,26 @@ CC0 and public domain. | Elmer | GPL-2.0 / LGPL-2.1 | multiphysics solver | | deal.II, FreeFEM, Salome | LGPL | FE libraries, pre-processing | | OpenCASCADE | LGPL-2.1 | B-rep kernel | +| Attene's CDT, Indirect_Predicates, VolumeMesher | GPL / LGPL | robust CDT, indirect predicates (implement from the papers) | +| TetWild (original), Evocube, robustPolycube, ultimaille, invertible-maps | GPL-3.0 / AGPL-3.0 | tet meshing, polycube, injective maps | +| libHexEx, libHexHex, QGP3D, MC3D, CoMISo, Graphite | GPL | integer-grid-map hex extraction, quantization | +| Shewchuk's Triangle | non-commercial only | 2D meshing | +| geogram `third_party/tetgen`, `third_party/triangle` and their wrappers | AGPL / non-commercial | (the rest of geogram is BSD-3 and readable) | +| libigl `copyleft/` modules | GPL | (libigl core is MPL-2.0 and readable) | +| OpenVolumeMesh, CGoGN | believed LGPL, unverified | treat as forbidden until checked | + +**Repositories without a licence are all rights reserved: never read them** (for example Gao +2019's octree hex code, LoopyCuts). Readable references for the meshing work (re-implement from +the paper, note anything adapted in ATTRIBUTION.md): Shewchuk's `predicates.c` (public domain), +`georust/robust` (Apache-2.0), geogram (BSD-3, exclusions above), fTetWild (MPL-2.0), CinoLib, +Gen-Adapt-Ref, HexaLab, robust_hex_dominant_meshing (MIT), quartet (ISC). The full table with +sources is in `docs/meshing/literature.md`. + +**Test geometry** follows the same rule as test data: nothing produced with a commercial CAD or +CAE product. That excludes ABC (Onshape), MAMBO (files from commercial translators) and the HexMe +models that come from ABC, GrabCAD or Siemens NX; HexMe's Gmsh-made models are allowed (CC-BY-4.0). +Thingi10K (per-model Creative Commons licences, authoring tool unrecorded) is pending an owner +decision. The default corpus is generated: SolidCraft-built parts and analytic shapes. **Commercial products** (Abaqus, Nastran, LS-DYNA, LS-PrePost, HyperMesh, ANSA, Femap, Patran, ANSYS) are never run, scripted or used as a source of data. Deck formats come from the vendors' diff --git a/docs/architecture.md b/docs/architecture.md index 579cd5d..2095559 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -43,12 +43,18 @@ Rules beyond the layer order: so feature edges and face-based loads and BCs survive meshing. 2. **Surface preparation.** Weld coincident vertices, check the surface is closed, manifold and consistently oriented, find feature edges (face boundaries, sharp dihedral angles). -3. **Tetrahedral meshing.** 3D Delaunay tetrahedralization of the boundary points with exact - predicates, boundary recovery, Delaunay refinement to a size field, then Voronoi-based - optimization (centroidal Voronoi / optimal Delaunay) and sliver removal. -4. **Hexahedral meshing (the core).** All-hex first where it can be guaranteed valid, with - hex-dominant as the fallback; the method is chosen from the literature survey - (`docs/meshing/literature.md`). +3. **Tetrahedral meshing.** Bowyer–Watson Delaunay on Shewchuk's adaptive predicates (symbolic + perturbation for degeneracies), boundary recovery by the robust constrained Delaunay method of + Diazzi et al. 2023 (implicit Steiner points on indirect predicates, gift-wrapping fallback), so + every boundary triangle and its B-rep face tag survives. Then constrained Delaunay refinement to a + size field, ODT smoothing interleaved as in Tournois et al. 2009, and the Klingner–Shewchuk 2007 + improvement schedule against slivers. +4. **Hexahedral meshing (the core).** Octree/grid dual all-hex first, the one family that meshes + any input validly (Livesu et al. 2021 dual schemes, Pitzalis et al. 2021 refinement, Gao et al. + 2019 feature projection and padding, Garanzha et al. 2021 untangling). Then hex-dominant by tet + recombination (Pellerin et al. 2018), then polycube (DualCube labelling) for blocky parts; + frame-field/integer-grid-map methods stay research. Validity uses a certified trilinear Jacobian + check (Marschner et al. 2020), not corner Jacobians alone. 5. **Quality.** Scaled Jacobian, aspect ratio, dihedral angles; every generated mesh is checked for positive Jacobians and conserved volume before it reaches the model. diff --git a/docs/meshing/literature.md b/docs/meshing/literature.md new file mode 100644 index 0000000..ffbb5f4 --- /dev/null +++ b/docs/meshing/literature.md @@ -0,0 +1,906 @@ +# Volume meshing literature survey for ModelCraft (tet → hex) + +Compiled 2026-10-13. Scope: watertight triangulated B-rep tessellation in, then (1) tetrahedral mesh by +Delaunay methods with Voronoi/ODT improvement, then (2) all-hex and hex-dominant meshes. + +## How this was verified + +- **DOIs.** Every DOI below resolved through the DOI handle API (`doi.org/api/handles/` → responseCode 1). + Each title, first author, year and venue was also checked against Crossref metadata. One wrong DOI was + caught and fixed: `10.1145/276884.276889` is Amenta's *Voronoi filtering*, and Shewchuk's SoCG'98 paper is + `.276894`. +- **Other URLs** (author PDFs, arXiv, project pages, repos) returned HTTP 200 on 2026-10-13. Two exceptions: + `cs.nyu.edu/~yixinhu/tetwild.pdf` (403) and `zenodo.org/record/6642020` (403 to a scripted client, though the + Zenodo REST API returned the record). Neither is used as a primary link; I cite the DOI instead. +- **Section numbers** were read from the PDFs for: Shewchuk 1997, 1998, 2002; Klingner–Shewchuk; Labelle–Shewchuk; + Diazzi 2021 and 2023; fTetWild; Attene 2020; Livesu 2021; Garanzha 2021; Pietroni survey; HexMe; DualCube. For any + other paper I give no section number rather than guess one. +- **Licences** come from GitHub/GitLab licence metadata, LICENSE files or README licence statements. I read no + source code. "none" means the repo has no licence, which makes it all-rights-reserved: treat it as unreadable + for a clean-room project, same as GPL. + +### Licence legend for associated code + +| Status | Meaning | +|---|---| +| **READ OK** | Permissive (MIT, BSD, Apache-2.0, ISC, MPL-2.0 file-level, public domain). May be read for reference. Still re-implement from the paper. | +| **FORBIDDEN** | GPL, LGPL or AGPL. Do not open. | +| **NO LICENCE** | All rights reserved. Do not open. | + +--- + +## Part A: Tetrahedral meshing + +### A0. Robust predicates and exactness (foundation for everything) + +**A0.1 Shewchuk 1997, adaptive-precision predicates.** **Verdict: build on.** +- **Citation.** J. R. Shewchuk. *Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates.* Discrete & Computational Geometry 18(3):305–363, 1997. +- **Links.** DOI [10.1007/PL00009321](https://doi.org/10.1007/PL00009321). PDF: https://people.eecs.berkeley.edu/~jrs/papers/robustr.pdf +- **Method.** Floating-point *expansions* (non-overlapping sums of doubles) with error-free transforms: + - Two-Sum and Fast-Two-Sum (§2.3). + - Expansion-Sum / Fast-Expansion-Sum (§2.4). + - Two-Product with Dekker splitting (§2.5). + - Scale-Expansion (§2.6). + - Compression (§2.7). + - Adaptive evaluation (§3): compute the determinant in plain doubles with a certified error bound. Escalate through + increasingly exact stages only when the sign is uncertain. +- **Predicates.** `orient2d`, `orient3d`, `incircle` and `insphere`, each with stage-wise error bounds (§4.2). + §5 lists caveats: overflow, underflow, and the assumption of round-to-even IEEE arithmetic. +- **Problem solved.** Exact sign of the core Delaunay predicates at near-double speed. +- **Robustness.** Exact for inputs in double precision. It does not handle constructed points such as + intersections or Steiner points; that is what A0.3 is for. It does not resolve true degeneracies (cospherical + points); that is what A0.2 is for. +- **Complexity.** Low to moderate: about 1–2k lines. The error-bound constants must be derived exactly as in the paper. +- **Code.** + - `predicates.c` at https://www.cs.cmu.edu/~quake/robust.html is **public domain** (the page says so explicitly): + READ OK. The same page notes that *Triangle* is copyrighted and not public domain; don't read it. + - Rust port `georust/robust` (Apache-2.0, https://github.com/georust/robust): READ OK. Useful as a differential + test oracle. +- **Why.** Every downstream algorithm (Bowyer–Watson, CDT, refinement, octree/surface classification) assumes + exact `orient3d` and `insphere`. + +**A0.2 Symbolic perturbation (Simulation of Simplicity).** **Verdict: build on.** +- **Citations.** + - H. Edelsbrunner, E. P. Mücke. *Simulation of Simplicity: a technique to cope with degenerate cases in geometric + algorithms.* ACM TOG 9(1):66–104, 1990. DOI [10.1145/77635.77639](https://doi.org/10.1145/77635.77639). + - O. Devillers, M. Teillaud. *Perturbations for Delaunay and weighted Delaunay 3D triangulations.* CGTA 44(3):160–168, + 2011. DOI [10.1016/j.comgeo.2010.09.010](https://doi.org/10.1016/j.comgeo.2010.09.010). +- **Method.** When `insphere` is exactly zero, break the tie with a consistent symbolic perturbation. Devillers–Teillaud + give a perturbation for `insphere` that needs only `orient3d` evaluations on sorted point indices. That is much + simpler than general SoS. +- **Problem solved.** Cospherical and coplanar inputs, which are ubiquitous in CAD tessellations (grids, cylinders, + regular polygons). The Delaunay triangulation stays unique and the Bowyer–Watson cavity stays a star-shaped ball. +- **Complexity.** Low, given A0.1. +- **Code.** No code was read. + +**A0.3 Attene 2020, indirect predicates.** **Verdict: build on (from the paper only).** +- **Citation.** M. Attene. *Indirect Predicates for Geometric Constructions.* Computer-Aided Design 126:102856, 2020. +- **Links.** DOI [10.1016/j.cad.2020.102856](https://doi.org/10.1016/j.cad.2020.102856). arXiv: https://arxiv.org/abs/2105.09772 +- **Method.** Represent constructed points implicitly, never rounding them: + - LPI: line–plane intersection. + - TPI: three-plane intersection. + - LNC: point on a segment. +- **Evaluation.** Predicates on implicit points are expanded symbolically into homogeneous polynomials. They are then + evaluated with a three-level filter (§5): + - static/semi-static floating-point filter (§5.1); + - interval arithmetic (§5.2); + - exact expansions (§5.3). +- The paper also covers caching (§5.4) and generating predicate code automatically from a description (§6). +- **Problem solved.** Exact predicates on Steiner and intersection points without rational or bignum arithmetic. + This is the enabling trick of A2.3 and A2.4. +- **Robustness.** Exact. The cost grows with the "depth" of the construction, so the method is designed for one + level of implicit points defined by explicit inputs. +- **Complexity.** Moderate: about 3–5k lines, mostly generated. Write a small Rust code generator, as the paper does. +- **Code.** `MarcoAttene/Indirect_Predicates` is **LGPL-2.1**: FORBIDDEN. +- **Reference alternative.** Lévy's PCK (next entry) is BSD. + +**A0.4 Lévy 2016, Predicate Construction Kit (PCK).** **Verdict: reference.** +- **Citation.** B. Lévy. *Robustness and efficiency of geometric programs: The Predicate Construction Kit (PCK).* + Computer-Aided Design 72:3–12, 2016. DOI [10.1016/j.cad.2015.10.004](https://doi.org/10.1016/j.cad.2015.10.004). +- **Method.** A code generator from a predicate formula to: + - a semi-static filter; + - an exact expansion fallback; + - SoS for degenerate cases. +- It is used in geogram's Delaunay and restricted-Voronoi code. +- **Code.** `BrunoLevy/geogram` is **BSD-3-Clause** (LICENSE file): READ OK, with one caveat. geogram vendors + `third_party/tetgen` (AGPL) and `third_party/triangle` (non-free), and has wrappers `delaunay/delaunay_tetgen.*` and + `delaunay/delaunay_triangle.*`. **Never open those.** Geogram's own `delaunay_3d.cpp`, `parallel_delaunay_3d.cpp`, + `voronoi/RVD*.cpp`, `CVT.cpp` and its numerics/PCK files are BSD. +- **Verdict reason.** It is the best permissively licensed reference for a production Delaunay + RVD + predicate stack. + +--- + +### A1. Delaunay construction + +**A1.1 Bowyer 1981 / Watson 1981, incremental cavity insertion.** **Verdict: build on.** +- **Citations.** + - A. Bowyer. *Computing Dirichlet tessellations.* The Computer Journal 24(2):162–166, 1981. + DOI [10.1093/comjnl/24.2.162](https://doi.org/10.1093/comjnl/24.2.162). + - D. F. Watson. *Computing the n-dimensional Delaunay tessellation with application to Voronoi polytopes.* + The Computer Journal 24(2):167–172, 1981. DOI [10.1093/comjnl/24.2.167](https://doi.org/10.1093/comjnl/24.2.167). +- **Method.** Insert a point, find all tetrahedra whose circumsphere contains it (the cavity), delete them, and star the + cavity boundary to the new point. +- **Robustness.** With exact `insphere`/`orient3d` (A0.1) and SoS (A0.2) the cavity is always a star-shaped ball and + the method never fails. With floating-point predicates it corrupts the mesh on degenerate CAD input. +- **Complexity.** Low for the core. Practical speed needs: + - BRIO insertion order: N. Amenta, S. Choi, G. Rote, *Incremental constructions con BRIO*, SoCG 2003, 211–219, + DOI [10.1145/777792.777824](https://doi.org/10.1145/777792.777824). Use it together with Hilbert/Morton sorting. + - Visibility or straight walking for point location: O. Devillers, S. Pion, M. Teillaud, *Walking in a + triangulation*, IJFCS 13(2):181–199, 2002, DOI [10.1142/S0129054102001047](https://doi.org/10.1142/S0129054102001047). + - A compact tet-adjacency array. +- **Code.** For a permissive reference, see geogram `delaunay_3d.cpp` (BSD). + +**A1.2 Marot, Pellerin, Remacle 2019, "One machine, one minute, three billion tetrahedra".** **Verdict: reference (later).** +- **Citation.** IJNME 117(9):967–990, 2019. DOI [10.1002/nme.5987](https://doi.org/10.1002/nme.5987). +- **Method.** Parallel Delaunay kernel: domain partitioning on a space-filling curve, lock-free cavity work, + cache-friendly data layout. +- **Use.** Only once single-threaded correctness is nailed down. +- **Code.** HXT lives inside Gmsh (GPL): FORBIDDEN. + +--- + +### A2. Boundary recovery: constrained or conforming Delaunay + +**A2.1 Shewchuk 2002, CDTs and provably good boundary recovery.** **Verdict: build on (theory).** +- **Citation.** J. R. Shewchuk. *Constrained Delaunay Tetrahedralizations and Provably Good Boundary Recovery.* + Proc. 11th International Meshing Roundtable, 2002. +- **Links.** No DOI exists. PDF: https://people.eecs.berkeley.edu/~jrs/papers/cdtbasic.pdf +- **Method.** A PLC does not always have a CDT. If every segment is *strongly Delaunay*, a CDT exists. The paper + protects edges by splitting them (§3 Edge Protection, §5 Provably Good Edge Protection) until this holds. Then it + builds the CDT (§6), for example by incremental facet insertion (§7). +- **Problem solved.** The existence theory behind every practical CDT code. +- **Robustness.** Proven termination and existence. The provable protection inserts more Steiner points than needed. +- **Complexity.** Medium. +- **Companion papers.** + - Shewchuk, *General-dimensional constrained Delaunay and constrained regular triangulations I*, DCG 39:580–637, + 2008. DOI [10.1007/s00454-008-9060-3](https://doi.org/10.1007/s00454-008-9060-3). + PDF: https://people.eecs.berkeley.edu/~jrs/papers/cdtj1.pdf + - Shewchuk, *Updating and constructing CDTs by flips* (SoCG 2003). PDF: https://people.eecs.berkeley.edu/~jrs/papers/cdtflip.pdf + +**A2.2 Si and Gärtner 2005; Si 2010; Si 2015; Shewchuk and Si 2014.** **Verdict: reference (papers only; TetGen is AGPL).** +- **Citations.** + - H. Si, K. Gärtner. *Meshing Piecewise Linear Complexes by Constrained Delaunay Tetrahedralizations.* IMR 14, + 147–163, 2005. DOI [10.1007/3-540-29090-7_9](https://doi.org/10.1007/3-540-29090-7_9). + - H. Si. *Constrained Delaunay tetrahedral mesh generation and refinement.* Finite Elements in Analysis and Design + 46(1–2):33–46, 2010. DOI [10.1016/j.finel.2009.06.017](https://doi.org/10.1016/j.finel.2009.06.017). + - H. Si. *TetGen, a Delaunay-based quality tetrahedral mesh generator.* ACM TOMS 41(2):11, 2015. + DOI [10.1145/2629697](https://doi.org/10.1145/2629697). + - J. R. Shewchuk, H. Si. *Incrementally constructing and updating constrained Delaunay tetrahedralizations with + finite-precision coordinates.* Engineering with Computers 30:253–269, 2014. + DOI [10.1007/s00366-013-0331-0](https://doi.org/10.1007/s00366-013-0331-0). + PDF (IMR'12 version): https://people.eecs.berkeley.edu/~jrs/papers/cdtupdate.pdf +- **Method.** + 1. Delaunay tetrahedralization of the vertices. + 2. Segment recovery, with Steiner points placed using a protecting-ball rule that needs far fewer points than + Shewchuk 2002. + 3. Face recovery by cavity retriangulation. + 4. Optional quality refinement (radius–edge bound) under the CDT. +- **Limitations.** + - Steiner points are rounded to doubles, which needs tolerances and can fail. + - Diazzi et al. 2023 §3.5 ("Possible failures in tetgen") also show a **theoretical** gap: cavity expansion can fail + even in exact arithmetic (their Fig. 4). +- **Code.** TetGen is **AGPL**: FORBIDDEN. Read the papers only. + +**A2.3 Diazzi, Panozzo, Vaxman, Attene 2023, robust CDT.** **Verdict: BUILD ON. This is the recommended boundary-recovery algorithm.** +- **Citation.** L. Diazzi, D. Panozzo, A. Vaxman, M. Attene. *Constrained Delaunay Tetrahedrization: A Robust and + Practical Approach.* ACM TOG 42(6):181 (SIGGRAPH Asia), 2023. +- **Links.** DOI [10.1145/3618352](https://doi.org/10.1145/3618352). arXiv: https://arxiv.org/abs/2309.09805 +- **Method.** Si–Gärtner's pipeline with every Steiner point represented **implicitly** with indirect predicates (A0.3), + so no geometric tolerance is ever needed. + - **Background, §3:** + - §3.1 problem statement; + - §3.2 PLC characteristics; + - §3.3 segment recovery; + - §3.4 face recovery; + - §3.5 TetGen failure modes. + - **Algorithm, §4:** + - §4.1 why exact rational numbers are not enough; + - §4.2 rational Steiner points; + - §4.3 implicit Steiner points (§4.3.1 indirect `orient3d`/`inSphere`); + - §4.4 a modified gift-wrapping algorithm that replaces Si's cavity expansion where that can fail; + - §4.5 interior/exterior labelling; + - §4.6 the full algorithm. + - **Rounding, §5.1:** output can be rounded to floating-point coordinates afterwards. +- **Results.** **100% success on the 4,408 valid Thingi10K models.** The output conforms exactly to the input. It is + parameter-free. +- **Problem solved.** Exact boundary conformity, which CAE needs for face groups, contact pairs, shared interfaces + between parts and boundary-condition tagging, together with a termination guarantee. +- **Limitations.** + - The input must be a valid PLC (no self-intersections). Fine for a B-rep tessellator that guarantees + watertight, non-self-intersecting output. Otherwise run A2.4 or A2.5 first. + - Rounding to doubles "almost always" stays valid but is not guaranteed. Keep implicit points through the quality + phase, or round with a validity check. + - Steiner counts can be large on nasty inputs. The paper notes about 9% of models needing over 50k. +- **Complexity.** High: about 8–12k lines of Rust including the predicate generator. It is the single most valuable + investment in the tet pipeline. +- **Code.** `MarcoAttene/CDT` is **GPL, or LGPL by build option** (README): FORBIDDEN. + +**A2.4 Diazzi and Attene 2021, convex polyhedral meshing.** **Verdict: reference.** +- **Citation.** L. Diazzi, M. Attene. *Convex polyhedral meshing for robust solid modeling.* ACM TOG 40(6):259, 2021. +- **Links.** DOI [10.1145/3478513.3480564](https://doi.org/10.1145/3478513.3480564). arXiv: https://arxiv.org/abs/2109.14434 +- **Method.** + 1. Delaunay of the vertices. + 2. Map tets to the constraints they intersect (§3.3). + 3. Binary space partition of the tets by constraint planes, with implicit points (§3.4). + 4. Virtual constraints (§3.5). + 5. Identify constrained facets (§3.6). + 6. Partition cells into inside/outside (§3.7). +- **Output.** A convex polyhedral mesh that conforms exactly even to **self-intersecting** input. It can be + tetrahedralized afterwards. +- **Use for us.** A repair path for dirty B-reps: overlapping faces, booleans, imported STEP/STL with intersections. +- **Code.** `MarcoAttene/VolumeMesher` is **GPL-3**: FORBIDDEN. + +**A2.5 Hu et al. 2018, TetWild; Hu et al. 2020, fTetWild (envelope approach).** **Verdict: reference; use as a fallback design for dirty input.** +- **Citations.** + - Y. Hu, Q. Zhou, X. Gao, A. Jacobson, D. Zorin, D. Panozzo. *Tetrahedral Meshing in the Wild.* ACM TOG 37(4):60, + 2018. DOI [10.1145/3197517.3201353](https://doi.org/10.1145/3197517.3201353). + - Y. Hu, T. Schneider, B. Wang, D. Zorin, D. Panozzo. *Fast Tetrahedral Meshing in the Wild.* ACM TOG 39(4):117, + 2020. DOI [10.1145/3386569.3392385](https://doi.org/10.1145/3386569.3392385). arXiv: https://arxiv.org/abs/1908.03581 +- **Method.** The input surface may move within an ε-envelope: + - §3.2 envelope test; + - §3.3 preprocessing; + - §3.4 incremental triangle insertion into a floating-point tet mesh. Each insertion is rejected if it would + create an inverted tet; + - §3.5 AMIPS-driven split/collapse/swap/smooth improvement that never leaves the envelope. +- **Results.** fTetWild guarantees a **valid floating-point** output (TetWild produced rational coordinates that may + invert after rounding). It meshes 98.7% of Thingi10K in under 2 minutes. +- **Limitations.** + - fTetWild does **not** guarantee every input triangle is in the output. + - The output surface only approximates the input. Sharp features and face IDs must be re-projected. + - That is acceptable for "meshes in the wild" but awkward for CAE, where face groups must match B-rep faces exactly. +- **Complexity.** High. +- **Code.** + - `wildmeshing/fTetWild` is **MPL-2.0**: READ OK (its own `src/`; it pulls in geogram and libigl). + - Original `Yixin-Hu/TetWild` is **GPL-3.0** per GitHub metadata: FORBIDDEN. + - `wildmeshing/wildmeshing-toolkit` is MIT: READ OK. + +**A2.6 Cherchi, Livesu, Scateni, Attene 2020, mesh arrangements.** **Verdict: reference (needed only for self-intersecting input).** +- **Citation.** *Fast and robust mesh arrangements using floating-point arithmetic.* ACM TOG 39(6):250, 2020. + DOI [10.1145/3414685.3417818](https://doi.org/10.1145/3414685.3417818). +- **Method.** Resolves all self-intersections of a triangle soup with indirect predicates. +- **Code.** `mlivesu/InteractiveAndRobustMeshBooleans` is MIT per GitHub, a related later work. **Caution:** check + whether it bundles Attene's LGPL predicate headers before opening any file. + +--- + +### A3. Quality: Delaunay refinement, ODT/CVT, sliver removal + +**A3.1 Shewchuk 1998, tetrahedral Delaunay refinement; thesis 1997.** **Verdict: build on.** +- **Citation.** J. R. Shewchuk. *Tetrahedral Mesh Generation by Delaunay Refinement.* SoCG 1998, 86–95. +- **Links.** + - DOI [10.1145/276884.276894](https://doi.org/10.1145/276884.276894). + - PDF: https://people.eecs.berkeley.edu/~jrs/papers/delref3d.pdf + - Thesis: https://www.cs.cmu.edu/~quake-papers/delaunay-refinement.pdf +- **Method.** Insert the circumcentres of tets whose radius–edge ratio exceeds B. Encroached subsegments are split + first, then encroached subfacets. +- **Guarantee.** Termination with B = 2 when input angles are at least 90°. +- **Limitations.** It bounds radius–edge ratio, not dihedral angles. **Slivers survive**, so pair it with A3.3–A3.6. + Small input angles, common in CAD, need the CDT-based variants: Si 2010 (A2.2), and Shewchuk & Si, SoCG 2014, + DOI [10.1145/2582112.2582138](https://doi.org/10.1145/2582112.2582138). +- **Complexity.** Medium, on top of A2.3. +- **Code.** None read. + +**A3.2 Cheng, Dey, Shewchuk, *Delaunay Mesh Generation* (CRC, 2012).** **Verdict: reference (the textbook).** +- **Links.** DOI [10.1201/b12987](https://doi.org/10.1201/b12987). +- **Use.** The consolidated treatment of 3D refinement, small-angle handling and sliver theory. Buy it. + +**A3.3 Alliez, Cohen-Steiner, Yvinec, Desbrun 2005, Variational Tetrahedral Meshing.** **Verdict: build on (ODT smoothing).** +- **Citation.** ACM TOG 24(3):617–625, 2005. DOI [10.1145/1073204.1073238](https://doi.org/10.1145/1073204.1073238). +- **Method.** Minimize the ODT energy: the L1 error between the paraboloid and its piecewise-linear interpolant. + Alternate between: + - moving each interior vertex to the volume-weighted average of its incident tets' circumcentres (closed form); + - re-Delaunaying the connectivity. +- **Findings.** ODT outperforms CVT for tet quality. Results improve with a sizing field. +- **Limitations.** + - Boundary vertices need special handling, and the paper's boundary treatment is the weak point. + - Slivers remain at the end. The paper uses a final perturbation/exudation pass. +- **Complexity.** Low to moderate, given a Delaunay kernel. + +**A3.4 Chen and Xu 2004; Chen and Holst 2011, Optimal Delaunay Triangulations.** **Verdict: build on (theory and update formulas).** +- **Citations.** + - L. Chen, J. Xu. *Optimal Delaunay triangulations.* J. Computational Mathematics 22(2):299–308, 2004. No DOI. + Publisher page: https://ojs.global-sci.org/index.php/JCM/article/view/11631. Author page with PDF link: + https://www.math.uci.edu/~chenlong/CX2004.html + - L. Chen, M. Holst. *Efficient mesh optimization schemes based on Optimal Delaunay Triangulations.* CMAME + 200(9–12):967–984, 2011. DOI [10.1016/j.cma.2010.11.007](https://doi.org/10.1016/j.cma.2010.11.007). +- **Method.** The Delaunay triangulation minimizes the interpolation error of ‖x‖² over all triangulations of a point + set. Chen–Holst give the exact and approximate vertex-update rules (ODT smoothing), including a boundary-aware variant. +- **Complexity.** Low. + +**A3.5 Tournois, Wormser, Alliez, Desbrun 2009, Delaunay refinement interleaved with optimization.** **Verdict: build on (the overall schedule).** +- **Citation.** *Interleaving Delaunay Refinement and Optimization for Practical Isotropic Tetrahedron Mesh + Generation.* ACM TOG 28(3):75, 2009. DOI [10.1145/1531326.1531381](https://doi.org/10.1145/1531326.1531381). +- **Method.** Alternate Delaunay refinement and ODT/NODT smoothing. The refinement uses the radius–edge and boundary + criteria. NODT is a Natural ODT variant for boundary vertices. Finish with sliver perturbation and exudation. +- **Results.** Minimum dihedral angles are substantially better than refinement alone. +- **Problem solved.** The practical recipe used by CGAL Mesh_3-style generators. +- **Complexity.** Moderate. +- **Code.** CGAL is GPL: FORBIDDEN. This paper is the readable source of the scheme. + +**A3.6 Klingner and Shewchuk 2007, Aggressive Tetrahedral Mesh Improvement.** **Verdict: BUILD ON (final sliver-removal stage).** +- **Citation.** B. M. Klingner, J. R. Shewchuk. IMR 16, 3–23, 2007. +- **Links.** DOI [10.1007/978-3-540-75103-8_1](https://doi.org/10.1007/978-3-540-75103-8_1). + PDF: https://people.eecs.berkeley.edu/~jrs/papers/aggress.pdf +- **Method.** + - §2: quality measures. Use volume–length, or the minimum sine of dihedral angles. + - §3, operations: + - §3.1 optimization-based smoothing with an active-set method on the worst quality; + - §3.2 edge removal; + - §3.3 multi-face removal; + - §3.4 vertex insertion; + - §3.5 composites. + - §4.2: hill-climbing schedule that accepts only operations improving the local minimum quality. +- **Results.** Dihedral angles are usually between **31° and 149°**, or 23°–136° with another objective. +- **Problem solved.** Kills slivers that ODT and refinement leave behind. Works on any valid tet mesh. +- **Robustness.** Monotone in worst quality, so it never makes the mesh worse. +- **Limitations.** Slow. Boundary vertices are constrained. +- **Complexity.** Moderate: edge removal requires Shewchuk's dynamic programming over the edge ring. + PDF: https://people.eecs.berkeley.edu/~jrs/papers/edge.pdf, not separately verified. +- **Code.** The Stellar code's licence was not verified, so it is not read. + +**A3.7 Cheng, Dey, Edelsbrunner, Facello, Teng 2000, Sliver exudation.** **Verdict: reference.** +- **Citation.** J. ACM 47(5):883–904, 2000. DOI [10.1145/355483.355487](https://doi.org/10.1145/355483.355487). +- **Method.** Assign weights to vertices so the weighted Delaunay triangulation contains no slivers. This gives a + provable but tiny dihedral bound. +- **Use.** Klingner–Shewchuk dominates it in practice. Useful as a cheap pass inside the A3.5 schedule. + +**A3.8 Labelle and Shewchuk 2007, Isosurface stuffing.** **Verdict: reference (useful only for organic, smooth domains).** +- **Citation.** ACM TOG 26(3):57, 2007. +- **Links.** DOI [10.1145/1276377.1276448](https://doi.org/10.1145/1276377.1276448). + PDF: https://people.eecs.berkeley.edu/~jrs/papers/stuffing.pdf +- **Method.** BCC lattice plus snapping and warping with stencils (§3). It has **guaranteed** dihedral bounds (§4). +- **Limitations.** It does **not preserve sharp features**, so it is wrong for CAD. +- **Code.** `crawforddoran/quartet` is ISC: READ OK. Do not read `alecjacobson/isostuffer` (LGPL-3). + +--- + +### A4. Voronoi-based: CVT, restricted Voronoi diagrams, Lp-CVT + +**A4.1 Du, Faber, Gunzburger 1999; Du and Wang 2003.** **Verdict: reference.** +- **Citations.** + - *Centroidal Voronoi Tessellations: Applications and Algorithms.* SIAM Review 41(4):637–676, 1999. + DOI [10.1137/S0036144599352836](https://doi.org/10.1137/S0036144599352836). + - Q. Du, D. Wang. *Tetrahedral mesh generation and optimization based on centroidal Voronoi tessellations.* + IJNME 56(9):1355–1373, 2003. DOI [10.1002/nme.616](https://doi.org/10.1002/nme.616). +- **Method.** Lloyd relaxation toward a CVT. The dual Delaunay triangulation gives well-shaped tets apart from slivers. +- **Assessment.** Alliez 2005 shows ODT beats CVT for tet quality, so CVT is not our tet smoother. + +**A4.2 Liu, Wang, Lévy, Sun, Yan, Lu, Yang 2009, CVT energy smoothness and quasi-Newton.** **Verdict: build on (the CVT solver).** +- **Citation.** ACM TOG 28(4):101, 2009. DOI [10.1145/1559755.1559758](https://doi.org/10.1145/1559755.1559758). +- **Method.** The CVT energy is C². Minimize it with L-BFGS instead of Lloyd for an order-of-magnitude speedup. + +**A4.3 Yan, Lévy, Liu, Sun, Wang 2009 (restricted Voronoi diagram); Yan et al. 2013 (clipped Voronoi diagram).** **Verdict: build on (the RVD and clipped-VD kernel).** +- **Citations.** + - Yan et al. *Isotropic Remeshing with Fast and Exact Computation of Restricted Voronoi Diagram.* CGF 28(5):1445–1454, + 2009. DOI [10.1111/j.1467-8659.2009.01521.x](https://doi.org/10.1111/j.1467-8659.2009.01521.x). + - D.-M. Yan, W. Wang, B. Lévy, Y. Liu. *Efficient computation of clipped Voronoi diagram for mesh generation.* + CAD 45(4):843–852, 2013. DOI [10.1016/j.cad.2011.09.004](https://doi.org/10.1016/j.cad.2011.09.004). +- **Method.** Compute the Voronoi diagram restricted to a surface (or clipped by a volume). Propagate over triangles + and clip each against the bisector half-spaces of the nearest seeds (Sutherland–Hodgman). +- **Problem solved.** The integration domain for surface remeshing and for CVT/Lp-CVT inside a closed volume. +- **Robustness.** Exact with PCK-style predicates (geogram). +- **Complexity.** Moderate. +- **Code.** geogram `voronoi/RVD*.cpp` (BSD): READ OK. + +**A4.4 Lévy and Liu 2010, Lp Centroidal Voronoi Tessellation.** **Verdict: reference (hex-dominant point placement, superseded for that purpose by Sokolov 2016).** +- **Citation.** B. Lévy, Y. Liu. *Lp Centroidal Voronoi Tessellation and its Applications.* ACM TOG 29(4):119, 2010. + DOI [10.1145/1778765.1778856](https://doi.org/10.1145/1778765.1778856). +- **Method.** Replace the L2 CVT energy with an Lp norm in a local frame (anisotropy tensor). As p grows, Voronoi cells + become cubes aligned to a field. Feature constraints come from integrating over the RVD of the surface and its + sharp edges. +- **Use.** Produces cube-like point sets for hex-dominant meshing. +- **Limitations.** Non-convex energy. Needs a smooth frame field. + +--- + +## Part B: Hexahedral meshing + +### B0. Survey and benchmark (read first) + +**B0.1 Pietroni et al. 2022, survey.** **Verdict: reference (required reading).** +- **Citation.** N. Pietroni, M. Campen, A. Sheffer, G. Cherchi, D. Bommes, X. Gao, R. Scateni, F. Ledoux, + J.-F. Remacle, M. Livesu. *Hex-Mesh Generation and Processing: a Survey.* ACM TOG 42(2):16, 2022. +- **Links.** DOI [10.1145/3554920](https://doi.org/10.1145/3554920). arXiv: https://arxiv.org/abs/2202.12670 +- **Structure.** + - §2.5 integer-grid maps; + - §4.6 grid-based; + - §4.7 polycube; + - §4.8 frame fields; + - §4.9 hex-dominant; + - §5 topological operators; + - §6 geometric optimization; + - §8 open problems; + - §9 resources. +- **Key quote (§4.6).** Grid-based methods "really stand out in terms of robustness. To date, they are the only fully + automatic methods capable of successfully hex-meshing any input shape... they are the only automatic methods + currently implemented in professional software." It also notes their cost: orientation dependence, intricate + high-valence singular structure, and no coarse block structure. +- **§8.1.** Frame-field methods are "limited to rather simple shapes" fully automatically. No characterization of + hex-meshable fields exists. Polycube graph characterization is limited to 3-connected graphs and, in the Eppstein–Mumford + form, genus 0. + +**B0.2 Beaufort, Reberol, Kalmykov, Liu, Ledoux, Bommes 2022, Hex Me If You Can (HexMe).** **Verdict: reference (benchmark, with a provenance caveat in C).** +- **Citation.** CGF 41(5):125–134 (SGP), 2022. +- **Links.** + - DOI [10.1111/cgf.14608](https://doi.org/10.1111/cgf.14608). + - arXiv: https://arxiv.org/abs/2111.10295 + - Dataset DOI [10.5281/zenodo.6642020](https://doi.org/10.5281/zenodo.6642020), **CC-BY-4.0**. + - Catalog: https://hexme.algohex.eu +- **Contents.** 189 tet meshes from 63 CAD models in three categories: simple, nasty and industrial. Each comes with + feature tags. +- **Baseline result.** A state-of-the-art frame-field → IGM → HexEx pipeline meshes all features correctly on only + **19 of 189**. On nasty and industrial shapes about half the meshes preserve under 1–8% of surfaces. +- **Why it matters.** This is the evidence that frame-field methods are not production-ready for CAD. + +--- + +### B1. Grid / octree-based (robust family) + +**B1.1 Schneiders 1996.** **Verdict: reference (historical).** +- **Citation.** R. Schneiders. *A grid-based algorithm for the generation of hexahedral element meshes.* Engineering + with Computers 12:168–177, 1996. DOI [10.1007/BF01198732](https://doi.org/10.1007/BF01198732). +- **Method.** An octree with templates resolves hanging nodes (3-refinement). The boundary layer is projected onto the + surface. + +**B1.2 Zhang and Bajaj 2006.** **Verdict: reference.** +- **Citation.** *Adaptive and quality quadrilateral/hexahedral meshing from volumetric data.* CMAME 195:942–960, 2006. + DOI [10.1016/j.cma.2005.02.016](https://doi.org/10.1016/j.cma.2005.02.016). +- **Method.** Dual contouring on an octree with templates, followed by quality improvement. + +**B1.3 Maréchal 2009, octree-based all-hex with sharp features.** **Verdict: reference (feature handling ideas).** +- **Citation.** L. Maréchal. *Advances in Octree-Based All-Hexahedral Mesh Generation: Handling Sharp Features.* + IMR 18, 65–84, 2009. DOI [10.1007/978-3-642-04319-2_5](https://doi.org/10.1007/978-3-642-04319-2_5). +- **Method.** A 2-refinement octree. Hanging nodes are removed by **dualization** with flat transition schemes. Sharp + features are captured by snapping dual vertices and by padding. +- **Significance.** The basis of commercial octree hex meshers. +- **Limitation.** The scheme set is incomplete: Livesu 2021 shows it misses some transitions. + +**B1.4 Gao, Shen, Panozzo 2019, Feature Preserving Octree-Based Hexahedral Meshing.** **Verdict: reference (pipeline design).** +- **Citation.** CGF 38(5):135–149 (SGP), 2019. DOI [10.1111/cgf.13795](https://doi.org/10.1111/cgf.13795). +- **Pipeline.** + 1. Octree refinement driven by surface approximation. + 2. Dual-based hex extraction. + 3. Feature-preserving surface projection. + 4. Padding. + 5. Global optimization that maximizes the minimum scaled Jacobian while fitting features. +- **Results.** The authors report high robustness on a large dataset. +- **Code.** `gaoxifeng/Feature-Preserving-Octree-Hex-Meshing` has **NO LICENCE**: do not read. + +**B1.5 Livesu, Pitzalis, Cherchi 2021, Optimal Dual Schemes for Adaptive Grid Based Hexmeshing.** **Verdict: BUILD ON (the core of the first hex mesher).** +- **Citation.** ACM TOG 41(2):15, 2022 (online 2021). +- **Links.** DOI [10.1145/3494456](https://doi.org/10.1145/3494456). arXiv: https://arxiv.org/abs/2103.07745 +- **Method, part 1.** + - Enumerates **all** transitions dual methods must handle (§4: §4.1 convex, §4.2 concave, §4.3 around corners). + - Shows prior schemes miss some of them. + - Gives the minimal scheme set with the simplest singular structure (§5). +- **Method, part 2.** + - Extends support from strongly to **weakly balanced** grids (§6; discussion in §7.1). Coarser meshes for the same accuracy. + - Compares with Gao 2019 and Maréchal 2009 (§7.2). + - Spells out the implementation details that earlier papers left implicit. +- **Robustness.** Combinatorially complete for balanced grids, so the dual is always all-hex. Geometry + (projection/padding/untangling) is outside the paper's scope. +- **Limitations.** + - Most grid methods do not guarantee the output keeps the input's genus or component count (survey §4.6). + - Sharp features need a separate projection and optimization stage. +- **Complexity.** Moderate: the schemes are tables plus a balancing pass. +- **Code.** Integrated into `mlivesu/cinolib`, **MIT** (paper p. 2 and §8): READ OK. Do not open cinolib's optional + TetGen/Triangle wrappers if present. + +**B1.6 Pitzalis, Livesu, Cherchi, Gobbetti, Scateni 2021, Generalized Adaptive Refinement.** **Verdict: build on (refinement and balancing stage).** +- **Citation.** ACM TOG 40(6):257, 2021. DOI [10.1145/3478513.3480508](https://doi.org/10.1145/3478513.3480508). +- **Method.** Generalizes balanced adaptive refinement so it works on any input hex mesh, not just a regular grid, + with conforming templates and no dualization. +- **Use.** Lets us refine a coarse aligned hex mesh, for example polycube output, as well as an octree. +- **Code.** `cg3hci/Gen-Adapt-Ref-for-Hexmeshing` is **MIT**: READ OK. + +--- + +### B2. Polycube maps + +**B2.1 Tarini, Hormann, Cignoni, Montani 2004, PolyCube-Maps.** **Verdict: reference (the concept).** +- **Citation.** ACM TOG 23(3):853–860, 2004. DOI [10.1145/1015706.1015810](https://doi.org/10.1145/1015706.1015810). + +**B2.2 Gregson, Sheffer, Zhang 2011, All-hex mesh generation via volumetric polycube deformation.** **Verdict: reference.** +- **Citation.** CGF 30(5):1407–1416, 2011. + DOI [10.1111/j.1467-8659.2011.02015.x](https://doi.org/10.1111/j.1467-8659.2011.02015.x). +- **Method.** Rotation-driven volumetric deformation toward axis-aligned normals, then labelling, then hex sampling. +- **Limitation.** Heuristic cleanup of invalid labellings. + +**B2.3 Livesu, Vining, Sheffer, Gregson, Scateni 2013, PolyCut.** **Verdict: reference.** +- **Citation.** ACM TOG 32(6):171, 2013. DOI [10.1145/2508363.2508388](https://doi.org/10.1145/2508363.2508388). +- **Links.** Project: https://www.cs.ubc.ca/labs/imager/tr/2013/polycut/ +- **Method.** Graph-cut labelling with monotonicity. Applies the Eppstein–Mumford validity conditions. +- **Limitation.** Not guaranteed to converge to a valid polycube (survey §4.7). + +**B2.4 Huang et al. 2014 (ℓ1 polycube); Fang et al. 2016 (closed-form induced polycube); Fu et al. 2016.** **Verdict: reference.** +- **Citations.** + - Huang, Jiang, Shi, Tong, Bao, Desbrun. *ℓ1-Based Construction of Polycube Maps from Complex Shapes.* ACM TOG + 33(3):25, 2014. DOI [10.1145/2602141](https://doi.org/10.1145/2602141). + - Fang, Xu, Bao, Huang. *All-hex meshing using closed-form induced polycube.* ACM TOG 35(4):124, 2016. + DOI [10.1145/2897824.2925957](https://doi.org/10.1145/2897824.2925957). + - Fu, Bai, Liu. *Efficient volumetric PolyCube-map construction.* CGF 35(7):97–106, 2016. + DOI [10.1111/cgf.13007](https://doi.org/10.1111/cgf.13007). +- **Method.** Deformation-based polycube construction with different energies. +- **Limitation.** They "seldom converge to a topologically consistent polyhedron" without a valid guiding labelling + (survey §4.7). + +**B2.5 Guo, Liu, Yan, Liu 2020, Cut-enhanced PolyCube-maps.** **Verdict: reference.** +- **Citation.** *Cut-enhanced PolyCube-maps for feature-aware all-hex meshing.* ACM TOG 39(4):106, 2020. + DOI [10.1145/3386569.3392378](https://doi.org/10.1145/3386569.3392378). +- **Method.** Interior cuts let polycubes align to features that a plain polycube cannot. + +**B2.6 Dumery, Protais, Mestrallet, Bourcier, Ledoux 2022, Evocube.** **Verdict: reference.** +- **Citation.** *Evocube: a Genetic Labelling Framework for Polycube-Maps.* CGF 41(6):467–479, 2022. +- **Links.** DOI [10.1111/cgf.14649](https://doi.org/10.1111/cgf.14649). arXiv: https://arxiv.org/abs/2205.00738 +- **Method.** Genetic search over labellings, scored by validity and distortion. Slow, and still with no guarantee. +- **Code.** `LIHPC-Computational-Geometry/evocube` is **GPL-3**: FORBIDDEN. + +**B2.7 Protais, Reberol, Ray, Corman, Ledoux, Sokolov 2022, Robust Quantization for Polycube Maps.** **Verdict: build on (when polycube is built).** +- **Citation.** CAD 150:103321, 2022. DOI [10.1016/j.cad.2022.103321](https://doi.org/10.1016/j.cad.2022.103321). +- **Method.** Robust integer quantization of a polycube map's chart sizes. Guarantees a valid hex layout from a valid + labelling. +- **Code.** `fprotais/robustPolycube` is **AGPL-3**: FORBIDDEN. + +**B2.8 Mandad, Chen, Bommes, Campen 2022, Intrinsic Mixed-Integer Polycubes.** **Verdict: reference.** +- **Citation.** CAGD 94:102078, 2022. DOI [10.1016/j.cagd.2022.102078](https://doi.org/10.1016/j.cagd.2022.102078). + +**B2.9 Snoep, Speckmann, Verbeek 2025, DualCube.** **Verdict: BUILD ON (when polycube is built). The first labelling method with a validity guarantee.** +- **Citation.** *Robust Construction of Polycube Segmentations via Dual Loops.* CGF 44(5):e70195 (SGP), 2025. +- **Links.** DOI [10.1111/cgf.70195](https://doi.org/10.1111/cgf.70195). arXiv: https://arxiv.org/abs/2402.00652 +- **Method.** + - Work in the **dual** loop structure of a polycube. §3 gives the dual structure, its characterization and the + valid modifications. + - §4: start from a trivial polycube of the right genus, then iteratively add loops (§4.1) while keeping validity. + Primalize into a segmentation (§4.2) and optimize the loop structure (§4.3). + - §5.2 covers hex meshing. +- **Guarantee.** "Guaranteed to return a valid polycube segmentation for 3D models of any genus." It is valid at every + iteration, so it can be stopped at any time. +- **Limitations.** Quality and feature alignment trade against complexity. Feature preservation is weaker than with + feature-driven labellings. +- **Companion.** *Polycubes via Dual Loops*, arXiv https://arxiv.org/abs/2410.16865 (2024): the dual-loop + characterization for arbitrary genus. +- **Code.** The repo named in search results (`maximsnoep/polycube-layouts-via-iterative-dual-loops`) returned 404. + Licence unknown. + +--- + +### B3. Frame fields and integer-grid maps (IGM) + +**B3.1 Nieser, Reitebuch, Polthier 2011, CubeCover.** **Verdict: reference (defines the IGM pipeline).** +- **Citation.** *CubeCover – Parameterization of 3D Volumes.* CGF 30(5):1397–1406, 2011. + DOI [10.1111/j.1467-8659.2011.02014.x](https://doi.org/10.1111/j.1467-8659.2011.02014.x). +- **Method.** Frame field → seamless volumetric parametrization whose integer iso-surfaces form hexes. It is the 3D + analogue of Bommes, Zimmer, Kobbelt, *Mixed-integer quadrangulation*, ACM TOG 28(3):77, 2009, + DOI [10.1145/1531326.1531383](https://doi.org/10.1145/1531326.1531383). + +**B3.2 Huang, Tong, Wei, Bao 2011, Boundary aligned smooth 3D cross-frame field.** **Verdict: reference.** +- **Citation.** ACM TOG 30(6):143, 2011. DOI [10.1145/2070781.2024177](https://doi.org/10.1145/2070781.2024177). +- **Method.** Spherical-harmonic (SH) frame representation, which removes the octahedral-symmetry ambiguity. + +**B3.3 Li, Liu, Xu, Wang, Guo 2012, All-hex meshing using singularity-restricted field.** **Verdict: reference.** +- **Citation.** ACM TOG 31(6):177, 2012. DOI [10.1145/2366145.2366196](https://doi.org/10.1145/2366145.2366196). +- **Method.** Local operations repair singularity graphs to be hex-meshable. + +**B3.4 Ray, Sokolov, Lévy 2016, Practical 3D frame field generation.** **Verdict: build on (only if the frame-field family is pursued).** +- **Citation.** ACM TOG 35(6):233, 2016. DOI [10.1145/2980179.2982408](https://doi.org/10.1145/2980179.2982408). +- **Method.** SH-based smoothing with local Euler-angle optimization and boundary alignment. Fast and simple. + +**B3.5 Solomon, Vaxman, Bommes 2017, Boundary element octahedral fields.** **Verdict: reference.** +- **Citation.** ACM TOG 36(3):28, 2017. DOI [10.1145/3065254](https://doi.org/10.1145/3065254). + +**B3.6 Liu, Zhang, Chien, Solomon, Bommes 2018, Singularity-constrained octahedral fields.** **Verdict: reference.** +- **Citation.** ACM TOG 37(4):93, 2018. DOI [10.1145/3197517.3201344](https://doi.org/10.1145/3197517.3201344). +- **Method.** Enumerates local meshability conditions for valence-3 and valence-5 singular edges. Computes a field + conforming to a given singularity graph. +- **Limitation.** The singular graph is user- or heuristic-supplied. + +**B3.7 Corman and Crane 2019, Symmetric Moving Frames.** **Verdict: reference.** +- **Citation.** ACM TOG 38(4):87, 2019. DOI [10.1145/3306346.3323029](https://doi.org/10.1145/3306346.3323029). +- **Links.** PDF: https://www.cs.cmu.edu/~kmcrane/Projects/SymmetricMovingFrames/paper.pdf +- **Method.** Cartan's moving frames. Frame fields with *prescribed* singularity graph and non-orthogonal frames, + obtained as connection 1-forms with integrability constraints. + +**B3.8 Palmer, Bommes, Solomon 2020, Algebraic representations for volumetric frame fields.** **Verdict: reference.** +- **Citation.** ACM TOG 39(2):16, 2020. +- **Links.** DOI [10.1145/3366786](https://doi.org/10.1145/3366786). arXiv: https://arxiv.org/abs/1908.05411 +- **Method.** Octahedral and odeco frames as varieties. Manifold-optimization (MBO-style) field computation. Supports + non-orthogonal frames. + +**B3.9 Lyon, Bommes, Kobbelt 2016, HexEx; Kohler, Heistermann, Bommes 2025, HexHex.** **Verdict: reference (needed only for the frame-field family).** +- **Citations.** + - *HexEx: Robust Hexahedral Mesh Extraction.* ACM TOG 35(4):123, 2016. + DOI [10.1145/2897824.2925976](https://doi.org/10.1145/2897824.2925976). + - *HexHex: Highspeed Extraction of Hexahedral Meshes.* ACM TOG 44(4), 2025. + DOI [10.1145/3730940](https://doi.org/10.1145/3730940). Project: https://cgg.unibe.ch/publications/hexhex/ +- **Method.** Extract the hex mesh from an IGM, tolerating some defects (HexEx). HexHex assumes a *locally injective* + map and is unconditionally robust, with about 30× speedup through a propeller data structure and conservative + rasterization. +- **Code.** + - libHexEx is **GPLv3** (RWTH page): FORBIDDEN. + - `cgg-bern/libHexHex` LICENSE is **GPL** (header plus `GPL.txt`): FORBIDDEN. + +**B3.10 Brückler, Bommes, Campen: 3D motorcycle complex (CGF 2022), QGP3D (TOG 2022), cell-complex collapsing (TOG 2023), Integer-Sheet-Pump (CGF 2024).** **Verdict: reference.** +- **Citations.** + - DOI [10.1111/cgf.14470](https://doi.org/10.1111/cgf.14470): *The 3D Motorcycle Complex for Structured Volume + Decomposition*, CGF 41(2):221–235. + - DOI [10.1145/3528223.3530123](https://doi.org/10.1145/3528223.3530123): *Volume parametrization quantization for + hexahedral meshing*, TOG 41(4):60. + - DOI [10.1145/3618384](https://doi.org/10.1145/3618384): *Collapsing Embedded Cell Complexes for Safer Hexahedral + Meshing*, TOG 42(6):205. + - DOI [10.1111/cgf.15131](https://doi.org/10.1111/cgf.15131): *Integer-Sheet-Pump Quantization*, CGF 43(5). +- **Method.** Robust quantization of seamless volume maps into valid IGMs through the motorcycle complex. +- **Code.** QGP3D, MC3D, TrulySeamless3D and C4HexMeshing are all **GPL-3**: FORBIDDEN. + +**B3.11 Liu and Bommes 2023, Locally Meshable Frame Fields.** **Verdict: reference (best current evidence of the family's state).** +- **Citation.** ACM TOG 42(4), 2023. DOI [10.1145/3592457](https://doi.org/10.1145/3592457). +- **Result.** Raises the valid-IGM success rate on HexMe "**from 2% to 58%**" (project page abstract). Local + meshability is necessary but not sufficient. +- **Code.** No code link on the project page. + +**B3.12 Nigolian, Campen, Bommes 2023, Expansion Cones.** **Verdict: reference (injective volumetric maps).** +- **Citation.** ACM TOG 42(4), 2023. DOI [10.1145/3592421](https://doi.org/10.1145/3592421). +- **Use.** Relevant for polycube maps too. + +--- + +### B4. Loop- and sweep-based block decomposition + +**B4.1 Livesu, Pietroni, Puppo, Sheffer, Cignoni 2020, LoopyCuts.** **Verdict: reference.** +- **Citation.** *LoopyCuts: Practical Feature-Preserving Block Decomposition for Strongly Hex-Dominant Meshing.* + ACM TOG 39(4):121, 2020. DOI [10.1145/3386569.3392472](https://doi.org/10.1145/3386569.3392472). +- **Method.** Trace field-aligned surface loops, cut the volume along them into simple blocks, then mesh the blocks. +- **Guarantee.** Strongly hex-dominant output, *not* all-hex. +- **Fit.** Good for CAD with features. +- **Complexity.** High. +- **Code.** `mlivesu/LoopyCuts` has **NO LICENCE**: do not read. + +**B4.2 Reberol, Verhetsel, Henrotte, Bommes, Remacle 2023, all-hex boundary layers.** **Verdict: reference (CFD boundary layers later).** +- **Citation.** *Robust Topological Construction of All-hexahedral Boundary Layer Meshes.* ACM TOMS 49(1), 2023. + DOI [10.1145/3577196](https://doi.org/10.1145/3577196). + +--- + +### B5. Hex-dominant via tet recombination or aligned points + +**B5.1 Meshkat and Talmor 2000.** **Verdict: reference.** +- **Citation.** *Generating a mixed mesh of hexahedra, pentahedra and tetrahedra from an underlying tetrahedral mesh.* + IJNME 49(1–2):17–30, 2000. + DOI [10.1002/1097-0207(20000910/20)49:1/2<17::AID-NME920>3.0.CO;2-U](https://doi.org/10.1002/1097-0207(20000910/20)49:1/2%3C17::AID-NME920%3E3.0.CO;2-U). +- **Method.** Graph search for tet groups forming hexes or prisms. + +**B5.2 Yamakawa and Shimada 2003, rectangular-solid cell packing.** **Verdict: reference.** +- **Citation.** IJNME 57(15):2099–2129, 2003. DOI [10.1002/nme.754](https://doi.org/10.1002/nme.754). +- **Method.** Pack cells to place hex-friendly points, then recombine. + +**B5.3 Baudouin, Remacle, Marchandise, Henrotte, Geuzaine 2014, frontal hex-dominant.** **Verdict: reference.** +- **Citation.** Adv. Model. Simul. Eng. Sci. 1:8, 2014. DOI [10.1186/2213-7467-1-8](https://doi.org/10.1186/2213-7467-1-8). +- **Method.** Frontal point insertion along a cross field, Delaunay of the points, then recombination. + +**B5.4 Botella, Lévy, Caumon 2016, tet recombination.** **Verdict: reference.** +- **Citation.** *Indirect unstructured hex-dominant mesh generation using tetrahedra recombination.* Comput. Geosci. + 20(3):437–451, 2016. DOI [10.1007/s10596-015-9484-9](https://doi.org/10.1007/s10596-015-9484-9). + +**B5.5 Sokolov, Ray, Untereiner, Lévy 2016, Hexahedral-Dominant Meshing.** **Verdict: reference (strong candidate for the hex-dominant product).** +- **Citation.** ACM TOG 35(5):157, 2016. DOI [10.1145/2930662](https://doi.org/10.1145/2930662). +- **Method.** + 1. Frame field. + 2. Global parametrization, tolerating defects. + 3. Point set from the integer iso-values. + 4. Delaunay of the points. + 5. Recombine tets into hexes. + 6. Fill the rest with tets, prisms and pyramids. +- **Result.** Robust hex-dominant output even where the parametrization is defective. +- **Code.** Graphite is GPL-2: FORBIDDEN. + +**B5.6 Gao, Jakob, Tarini, Panozzo 2017, field-guided polyhedral agglomeration.** **Verdict: reference.** +- **Citation.** ACM TOG 36(4):114, 2017. DOI [10.1145/3072959.3073676](https://doi.org/10.1145/3072959.3073676). +- **Method.** Instant-Meshes-style position field in 3D, giving a polyhedral, mostly-hex mesh. +- **Code.** `gaoxifeng/robust_hex_dominant_meshing` is **MIT**: READ OK. + +**B5.7 Pellerin, Johnen, Verhetsel, Remacle 2018, vertex-based tet-to-hex identification.** **Verdict: build on (the recombination step).** +- **Citation.** *Identifying combinations of tetrahedra into hexahedra: a vertex based strategy.* CAD 105:1–10, 2018. + DOI [10.1016/j.cad.2018.05.004](https://doi.org/10.1016/j.cad.2018.05.004). +- **Method.** Enumerate **all** potential hexes in a tet mesh exhaustively from vertex neighbourhoods. This is faster + and complete compared with pattern-matching on tet groups. A selection step (maximum compatible set) then follows. +- **Fit.** Reuses our tet pipeline directly. +- **Code.** Implemented in Gmsh (GPL): FORBIDDEN. + +**B5.8 Verhetsel, Pellerin, Remacle 2019, hexahedrizations of small quadrangulations.** **Verdict: skip for now (research).** +- **Citation.** *Finding hexahedrizations for small quadrangulations of the sphere.* ACM TOG 38(4):53, 2019. + DOI [10.1145/3306346.3323017](https://doi.org/10.1145/3306346.3323017). + +--- + +### B6. Hex quality improvement and untangling + +**B6.1 Livesu, Sheffer, Vining, Tarini 2015, edge-cone rectification.** **Verdict: reference.** +- **Citation.** *Practical hex-mesh optimization via edge-cone rectification.* ACM TOG 34(4):141, 2015. + DOI [10.1145/2766905](https://doi.org/10.1145/2766905). +- **Method.** Local-global optimization that makes each corner's edge cone well-shaped. It fixes inverted elements, + with surface constraints. + +**B6.2 Xu, Gao, Chen 2018, edge-angle optimization.** **Verdict: reference.** +- **Citation.** *Hexahedral mesh quality improvement via edge-angle optimization.* Computers & Graphics 70:17–27, 2018. + DOI [10.1016/j.cag.2017.07.002](https://doi.org/10.1016/j.cag.2017.07.002). +- **Note.** This is the "Xu et al. 2018" hex improvement and untangling paper. + +**B6.3 Marschner, Palmer, Zhang, Solomon 2020, sum-of-squares hex repair.** **Verdict: reference.** +- **Citation.** *Hexahedral Mesh Repair via Sum-of-Squares Relaxation.* CGF 39(5):133–147, 2020. + DOI [10.1111/cgf.14074](https://doi.org/10.1111/cgf.14074). +- **Method.** Polynomial (SOS) relaxation of the trilinear-hex Jacobian positivity. It certifies validity of the + *trilinear* element, not just its corners. +- **Assessment.** Heavy machinery, since it needs an SDP solver. Reference for the **validity check**: corner Jacobians + are insufficient for trilinear hexes. + +**B6.4 Garanzha, Kaporin, Kudryavtseva, Protais, Ray, Sokolov 2021, Foldover-free maps in 50 lines of code.** **Verdict: BUILD ON (the untangler for every hex family and for polycube/IGM maps).** +- **Citation.** ACM TOG 40(4):102, 2021. +- **Links.** DOI [10.1145/3450626.3459847](https://doi.org/10.1145/3450626.3459847). arXiv: https://arxiv.org/abs/2102.03069 +- **Method.** + - §2.1: a variational barrier energy, with χ-regularization of det J. + - §2.2: penalty method. ε_k is driven to zero (§4.2). + - §2.3: L-BFGS resolution scheme. +- **Result.** Untangles meshes reliably and is simple to implement. The paper reports it on a large benchmark (§3.1). +- **Code.** `ssloy/invertible-maps` is **AGPL-3**: FORBIDDEN. The paper itself is enough, by design. + +**B6.5 Visualization and metrics.** **Verdict: reference.** +- **HexaLab** (MIT, https://github.com/mlivesu/HexaLab, https://www.hexalab.net) is READ OK. It is a hex quality + viewer whose metrics match the literature's. + +--- + +## Part C: Datasets and benchmarks + +| Dataset | Content | Licence | Usable for ModelCraft? | +|---|---|---|---| +| **Thingi10K**: Zhou & Jacobson 2016, arXiv https://arxiv.org/abs/1605.04797; site https://ten-thousand-models.appspot.com; tooling https://github.com/Thingi10K/Thingi10K | 10,000 STL meshes. 45% self-intersecting, 50% non-solid. The 4,408 "valid" subset is the standard tet-meshing robustness benchmark (fTetWild, Diazzi 2023). | Tooling Apache-2.0. **Each model has its own licence** (10 licences, including CC-BY-NC and GPL). Filter by the `license` field. | **Conditionally.** Use CC-BY / CC0 / public-domain models for robustness testing. **Provenance risk:** Thingiverse records no authoring tool, and many uploads were modelled in commercial CAD. Under the "no test data produced with commercial CAD products" rule this is an **owner decision**. | +| **HexMe**: DOI 10.5281/zenodo.6642020, https://hexme.algohex.eu | 189 tet meshes from 63 CAD models, with feature tags. | Dataset **CC-BY-4.0**. The source models come from the **ABC dataset (Onshape terms), GrabCAD (GrabCAD terms)**, MAMBO (Apache-2.0), and models made with **Gmsh and Siemens NX** (the paper's own statement). | **Only a filtered subset.** The ABC/Onshape, GrabCAD and Siemens NX models are produced with commercial CAD: exclude them. Gmsh-authored ones are acceptable as data. | +| **MAMBO**: https://gitlab.com/franck.ledoux/mambo | STEP models: basic, simple, medium. Designed for hex block-meshing evaluation. | **Apache-2.0** | **Risky.** The STEP headers I sampled say `'Spatial InterOp 3D'` as originating system and authors `'Cubit 15.2'` / `'MGX'`. These are commercial or closed tools. Treat as commercial-CAD-produced unless the owner rules otherwise. | +| **ABC**: Koch et al., CVPR 2019, DOI [10.1109/CVPR.2019.00983](https://doi.org/10.1109/CVPR.2019.00983), arXiv https://arxiv.org/abs/1812.06216, https://deep-geometry.github.io/abc-dataset/ | 1M CAD models (B-rep and meshes). | "Copyright of the CAD models is owned by their creators", under **Onshape Terms of Use**. The models come from Onshape. | **No.** Produced with a commercial CAD product, and the licence is not open. Skip. | + +**Recommendation for test data.** Build ModelCraft's own corpus: +- **Generated cases.** Parametric primitives plus booleans from our own kernel: + - cubes and cylinders with holes; + - fillets; + - thin walls; + - multi-material interfaces; + - genus-n plates; + - a "nasty" series modelled on HexMe's categories by description, not by copying its models. +- **Analytic cases.** Sphere and torus volumes, with exact volumes for checks. +- **Robustness stress.** The CC-licensed Thingi10K subset, if the owner approves. +- **Hex-meshing claims.** Report results on our own corpus. Report the HexMe Gmsh-authored subset separately. + +--- + +## Part D: Recommended pipeline (opinionated) + +### Step 1: Robust predicates (weeks 1–3) +1. Shewchuk adaptive `orient2d`, `orient3d`, `incircle` and `insphere` (A0.1, §2–§4). + - Port the expansion primitives from the paper. + - Use `predicates.c` (public domain) and `georust/robust` (Apache-2.0) only as differential oracles in tests. +2. Devillers–Teillaud symbolic perturbation for `insphere` (A0.2). +3. Indirect predicates for LPI/TPI implicit points (A0.3, §4–§5). Use a small build-time code generator that emits a + floating-point filter, an interval filter and an expansion fallback. Model it on PCK (A0.4, BSD-readable). Do not + use Attene's LGPL code. +4. **Tests.** Exhaustive near-degenerate fuzzing against an exact rational reference (`num-rational` / BigInt in tests only). + +**If wrong.** Every later stage inherits silent topological corruption. This is the one stage where "almost right" is fatal. + +### Step 2: Delaunay plus boundary recovery (weeks 3–12) +1. Bowyer–Watson with BRIO and Hilbert order, straight walking, and a compact adjacency array (A1.1). +2. **Boundary recovery: implement Diazzi et al. 2023 (A2.3).** + - Si–Gärtner segment recovery (§3.3) and face recovery (§3.4). + - Implicit Steiner points (§4.3). + - The gift-wrapping fallback (§4.4), which is mandatory: it closes the theoretical gap in TetGen. + - Inside/outside labelling (§4.5). + - **Why CDT over the envelope approach.** The B-rep tessellator gives a watertight, non-self-intersecting PLC. CAE + needs exact face conformity: B-rep face IDs on boundary triangles, shared interfaces in assemblies, contact + surfaces. CDT preserves this by construction. fTetWild (A2.5) does not preserve all input triangles. +3. Keep **fTetWild's design (MPL-2.0, readable) as the documented fallback** for imported dirty geometry. Do not build + it now. Convex polyhedral meshing (A2.4) is the alternative if exact conformity on self-intersecting input is ever + required. + +**If wrong.** If the tessellator emits self-intersections (common at tolerant B-rep edges), the CDT rejects the input. +- **Mitigation.** Run an exact self-intersection check before CDT. +- **Then route to repair.** Use the arrangement method (A2.6), or the fTetWild path once it exists. + +### Step 3: Quality (weeks 12–18) +1. Constrained Delaunay refinement with a radius–edge bound of about 2 and a sizing field (A3.1, A2.2/Si 2010 for small + input angles). +2. Interleave with ODT vertex smoothing following Tournois 2009 (A3.5). Use the Chen–Holst update formulas (A3.4) and + keep boundary vertices on their B-rep faces. +3. **Final pass: the Klingner–Shewchuk schedule (A3.6, §3–§4.2).** Smoothing, edge removal, multi-face removal and + vertex insertion, monotone in worst quality. +4. **Targets.** Report min/max dihedral angles and an FE quality metric. Use Shewchuk's *What is a good linear + element?*, PDF https://people.eecs.berkeley.edu/~jrs/papers/elemj.pdf, for the metric choice. +5. **CVT/RVD (A4.2–A4.3).** Build only for **surface remeshing** and for Lp-CVT if needed later. Not for tet + smoothing, where ODT is better. + +**If wrong.** ODT alone leaves boundary slivers, which can make FE results wrong. Step 3.3 is the guard. Do not ship without it. + +### Step 4: Hex meshing. Build the grid/octree dual family first. + +**Order.** +1. **(a) Octree dual all-hex.** Livesu 2021 schemes (B1.5) with Pitzalis 2021 refinement (B1.6). Then the Gao 2019 + stage list (B1.4): feature projection, padding layer, and global min-scaled-Jacobian optimization. Use the Garanzha + 2021 untangler (B6.4) for any inverted elements. Validate with the Marschner 2020 insight (B6.3) that corner + Jacobians do not certify trilinear hexes; use a subdivided or Bernstein Jacobian check. +2. **(b) Hex-dominant by recombination.** Frame-field-aligned point placement: + - Ray 2016 field (B3.4); + - frontal or Sokolov-style points (B5.3/B5.5); + - our own Delaunay; + - Pellerin 2018 vertex-based hex identification (B5.7) and selection; + - pyramids, prisms and tets for the rest. + This reuses all of steps 1–3. +3. **(c) Polycube for blocky CAD parts.** + - DualCube labelling (B2.9): guaranteed valid. + - Volumetric map with an injective solve (B6.4). + - Robust quantization (B2.7, from the paper only). + - Pitzalis refinement (B1.6) for grading. +4. **(d) Frame-field/IGM all-hex last, as R&D.** All mature implementations are GPL. HexMe shows 19/189 fully correct + outputs, and the best 2023 method reaches 58% valid IGMs. + +**Why octree first.** +- It is the **only family with a robustness guarantee on arbitrary input** (survey §4.6, quoted in B0.1). +- It is the only family shipped in professional automatic hex meshers. +- Every component has a permissive reference: CinoLib MIT for the dual schemes, Gen-Adapt-Ref MIT for refinement, + geogram BSD. +- A CAE customer gets *a* valid all-hex mesh for any part on day one, which polycube and frame-field methods cannot promise. + +**Risks per family.** + +| Family | Main risk | Mitigation | +|---|---|---| +| Octree dual | Poor element quality at the boundary (low scaled Jacobian near concave features); orientation dependence; high element count; edges where more than 3 faces meet; genus not guaranteed (survey §4.6). | Padding layer. Feature-aware projection plus global optimization (B1.4). Align the octree to the part's principal axes. Weakly balanced grids (B1.5 §6) reduce element count. A topology check rejects genus changes. | +| Hex-dominant recombination | Solvers must support pyramids and prisms; hex ratio is often only 60–90%; pyramids hurt accuracy. | Check the solver targets (Abaqus/Nastran element libraries support mixed meshes). Report the hex ratio honestly. | +| Polycube | High distortion on organic or highly non-axis-aligned parts; features at oblique angles are lost; the injective volumetric map can fail. | Use only when the labelling distortion score is acceptable; otherwise fall back to octree. The Garanzha untangler handles the map. | +| Frame-field IGM | Low success rate on CAD (HexMe, Liu & Bommes 2023); mixed-integer solves; all reference code is GPL. | Treat as R&D. Keep it out of the critical path. | + +**If the octree-first call is wrong.** Customers wanting high-quality structured hex for thin-walled or extruded parts +would find octree meshes too unstructured. The answer then is sweeping and block decomposition (LoopyCuts-style, B4.1), +not frame fields. That family is not covered in depth here and would need a follow-up survey on sweeping and +multi-sweeping. + +--- + +## Licence summary of associated code (metadata only; no source read) + +| Repo / code | Licence | Status | +|---|---|---| +| Shewchuk `predicates.c` | Public domain | READ OK | +| Shewchuk Triangle | Proprietary (non-commercial) | FORBIDDEN | +| `georust/robust` | Apache-2.0 (GitHub metadata) | READ OK | +| `BrunoLevy/geogram` | BSD-3, **except** `third_party/tetgen` (AGPL), `third_party/triangle` and the `delaunay_tetgen/triangle` wrappers | READ OK, with exclusions | +| `wildmeshing/fTetWild` | MPL-2.0 | READ OK | +| `wildmeshing/wildmeshing-toolkit` | MIT | READ OK | +| `Yixin-Hu/TetWild` | GPL-3.0 | FORBIDDEN | +| TetGen | AGPL | FORBIDDEN | +| CGAL, Gmsh (incl. HXT, recombination), Netgen | GPL / LGPL | FORBIDDEN | +| `MarcoAttene/CDT`, `Delaunay3D` | GPL, or LGPL by option | FORBIDDEN | +| `MarcoAttene/Indirect_Predicates` | LGPL-2.1 | FORBIDDEN | +| `MarcoAttene/VolumeMesher` | GPL-3 | FORBIDDEN | +| `libigl/libigl` | MPL-2.0 core; GPL `copyleft/` modules (GitHub reports GPL-3 because both licence files exist) | Core READ OK; `copyleft/` FORBIDDEN | +| `mlivesu/cinolib` | MIT | READ OK | +| `cg3hci/Gen-Adapt-Ref-for-Hexmeshing` | MIT | READ OK | +| `mlivesu/HexaLab` | MIT | READ OK | +| `crawforddoran/quartet` (isosurface stuffing) | ISC | READ OK | +| `alecjacobson/isostuffer` | LGPL-3 | FORBIDDEN | +| `gaoxifeng/robust_hex_dominant_meshing` | MIT | READ OK | +| `gaoxifeng/Feature-Preserving-Octree-Hex-Meshing` | none | NO LICENCE | +| `mlivesu/LoopyCuts` | none | NO LICENCE | +| `LIHPC-Computational-Geometry/evocube` | GPL-3 | FORBIDDEN | +| `LIHPC-Computational-Geometry/dds-hexmeshing` (HexMe-related workflow) | MIT | READ OK | +| `fprotais/robustPolycube`, `ultimaille`, `marchinghex` | AGPL-3 | FORBIDDEN | +| `ssloy/invertible-maps` (foldover-free) | AGPL-3 | FORBIDDEN | +| libHexEx (RWTH) | GPLv3 | FORBIDDEN | +| `cgg-bern/libHexHex` | GPL | FORBIDDEN | +| `HendrikBrueckler/QGP3D`, `MC3D`, `TrulySeamless3D`, `C4HexMeshing` | GPL-3 | FORBIDDEN | +| `mlivesu/CoMISo` (mixed-integer solver fork) | GPL-3 | FORBIDDEN | +| Graphite (`BrunoLevy/GraphiteThree`) | GPL-2 | FORBIDDEN | +| OpenVolumeMesh, CGoGN | Not checked in this pass. Believed LGPL. | Treat as FORBIDDEN until verified | + +## Unverified items +- Stellar (Klingner's mesh improvement code): licence not checked. +- `https://people.eecs.berkeley.edu/~jrs/papers/edge.pdf`: listed on Shewchuk's page but not fetched. +- The DualCube code repo: 404 at the name given in search results. +- The HexMe workflow repo URL: not stated in the paper. `dds-hexmeshing` is a related LIHPC repo, not confirmed as the + HexMe workflow.