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.
Matlab code is working on MATLAB 2019A.
The mex code compiles via Visual Studio 2017, only to crash due to an extreme memory allocation required. Probably something in the C MEX functions is not backwards compatible.
Sorry I don't know how to use this file.I just open the examples and run the m.file but Matlab shows error. What should I do to practice it on a real mesh?
The codes work on R2009a after some minor modification. However, the computation time is too long for only 300 faces. Only part of the C codes can be MEXed, so hopefully the complete C MEX version can be released soon. Thanks a lot for the nice work!
Added some code to correct for mesh intersections, sadly not yet perfect ...
Improved help and made input-options work for sub-functions.