Tetrahedral Mesh Generation
Cleaver is a multi material tetrahedral meshing API and application.
Cleaver Source Code on GitHub
Cleaver - A MultiMaterial Tetrahedral Meshing Library and Application
The Cleaver Library is based on the 'Lattice Cleaving' algorithm:
Bronson J., Levine, J., Whitaker R., "Lattice Cleaving: Conforming Tetrahedral Meshes of Multimaterial Domains with Bounded Quality". Proceedings of the 21st International Meshing Roundtable (San Jose, CA, Oct 7-10, 2012)
The method is theoretically guaranteed to produce valid meshes with bounded dihedral angles, while still conforming to multimaterial material surfaces. Empirically these bounds have been shown to be significant.
Acknowledgement: Cleaver is an Open Source software project that is principally funded through the SCI Institute's NIH/NIGMS CIBC Center. Please use the following acknowledgment and send us references to any publications, presentations, or successful funding applications that make use of NIH/NIGMS CIBC software or data sets.
"This project was supported by the National Institute of General Medical Sciences of the National Institutes of Health under grant number P41GM103545."
Copyright (C) 2012, Jonathan Bronson,
Scientific Computing & Imaging Institute, University of Utah
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files ( the "Software" ), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Supported PlatformsThe Cleaver Library is written in C++. It is designed to be cross-platform and has been successfully compiled on Windows 7, Mac OSx, and Linux. Binary forms will be available on the Cleaver project page.
The following tabs contain information designed for users interested in learning more about how to use Cleaver.
Alternatively, if you do not wish to build the command line program (which requires the Teem Library) use ccmake to disable it.
What Can Cleaver Do?
Cleaver generates conforming tetrahedral meshes for multimaterial or multiphase volumetric data. Both geometric accuracy and element quality are bounded. The method is a stencil-based approach, and relies on an octree structure to provide a coarse level of grading in regions of homogeneity.
What does Cleaver use as input?
The cleaving algorithm works by utilizing indicator functions. These functions indicate the strength or relative presence of a particular material. At each point, only the material with the largest indicator value is considered present. In practice, inside-outside and distance functions are most common.
What is the input format?
The cleaver library takes as input an instance of the Cleaver::Volume class. The Volume is a collection of Cleaver::ScalarField's, along with a sampling rate. The Cleaver::ScalarField class is an abstract class, that can be extended by users to create arbitrary inputs. We provide the FloatField class for loading 3D arrays of floating point data. The Cleaver command-line tool also offers convenience functions for loading the teem NRRD image format into the FloatField format.
What is the output format?
The Cleaver Library returns a Cleaver::TetMesh object. This object supports direct output to file in several formats:
- TetGen: .node, .ele
- SCIRun: .pts, .elem, .txt
- Matlab: .mat
Running ./cleaver -h
usage: cleaver -p -as [val] -al [val] -i [input1.nrrd input2.nrrd ...] -o [output] -f [format]
-p use padding default=no
-as alpha short default=0.357
-al alpha long default=0.203
-i input filenames minimimum=1
-o output filename default=output
-f output format default=tetgen
alpha short 0.0 to 1.0
alpha long 0.0 to 1.0
tetmesh formats tetgen, scirun, matlab
cleaver -h print help guide
cleaver -i mat1.nrrd mat2.nrrd basic use case
cleaver -p -i mat1.nrrd mat2.nrrd pad boundary
cleaver -i mat1.nrrd mat2.nrrd -o mesh specify output name
cleaver -i mat1.nrrd mat2.nrrd -o mesh -f scirun specify output format
All of our mailing lists are public and searchable through Google. For best search results, include the "cleaver" or "sympa" in your search terms.
Alternatively, you can browse the cleaver mailing list archive.
Some geometric operations in this code do not yet use proper predicates, and are therefore not guaranteed safe for all possible input fields. This is something we will work towards fixing in later releases. In the mean time, if you have data that you unable to mesh with Cleaver, contact us, and we will work with you to get it running.
Joining the Cleaver Mailing List
- Nothing needed in the Subject line. Just send.
- You will receive a response from the list manager requesting confirmation. Just send back a reply message to confirm your subscription (no added text needed).
- Finally, you will receive a welcome message confirming that you have been added to the mailing list.
- Nothing needed in the Subject line. Just send.
- You will receive a response from the list manager notifying you that the command has succeeded and you have been removed from the list.
3DSlicer ExtensionSlicer3D provides a graphical front-end interface for executing Cleaver. After Cleaver completes, Slicer can then read the VTK output into its scene automatically, or manually.
Documentation is located on the 3DSlicer wiki.