File Exchange

image thumbnail


version 1.2 (39.7 KB) by

Convert a closed triangulated mesh to a tetrahedron volume ( like constrained Delaunay )



View License

 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.

Comments and Ratings (3)


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?

linreal Lin

linreal Lin

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.

MATLAB Release
MATLAB 7.10 (R2010a)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video