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.
Dirk-Jan Kroon (2020). Mesh2Tetra (https://www.mathworks.com/matlabcentral/fileexchange/27830-mesh2tetra), MATLAB Central File Exchange. Retrieved .
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.