This function MESH2TETRA converts a triangulated surface mesh into a tetrahedron volume mesh.
Main advantage above existing constrained 3D Delaunay is that it
will never add new boundary points, (useful for active appearance models)
Disadvantage, some highly non-convex surface-shapes cannot be converted.
V : Vertex List N x 3, with x,y,z positions
F : Face List M x 3, with vertex indices
options : Struct with options
options.verbose : if true, show information
options.checkinput : if true, check input mesh on errors
T : Tetrahedron List K x 4, with tetrahedron indices
Note!, most functions are also available as c-code (much faster),
run compile_c_files.m to compile the code
How the software works:
- First, normal Delaunay is used to created a tetrahedron convexhull.
Then outside tetrahedrons and tetrahedrons intersecting the boundary
mesh are removed.
- Second, New triangulated surface meshes are constructed for the space
not yet filled by tetrahedrons. After which Delaunay
is done on the new boundary meshes.
- Third, The remaining boundary which cannot be filled using Delaunay
constraints, is filled with a "Boundary collapse method". The Boundary
collapse method merges vertex neighbors, creating tetrahedrons while
making the surface mesh smaller (like a deflating balloon)
- Fourth, It is possible that a part of the boundary mesh is left over which
cannot be filled with tetrahedrons. This is the case if there are no 4
vertices left who can see each other (like a non-convex polygon). In
that case nearby Tetrahedrons are removed creating a new boundary
mesh. And tetrahedron fitting with the boundary collapse methods is
tried again (until success, or a fixed amount of tries).
Please leave a comment if you find a bug, like the code, or have a good suggestion.