pytetwild
is a Python library for mesh tetrahedralization. It is a
Python wrapper around the efficient C++ library for tetrahedral meshing provided by
fTetWild.
We have pre-built wheels for Python 3.8 - Python 3.12 for Windows and Linux x64.
The recommended way to install pytetwild
is via PyPI:
pip install pytetwild
You can also clone the repository and install it from source, but since there's
C++ involved, the build is a bit more complicated. See CONTRIBUTING.md
for
more details.
To tetrahedralize a surface mesh from PyVista:
import pyvista as pv
import pytetwild
# Load or create a PyVista PolyData surface mesh
# Here, we'll create a simple sphere mesh as an example
surface_mesh = pv.Icosphere(nsub=2)
# Convert the surface mesh to a tetrahedral mesh. For this example let's
# use a coarse mesh
tetrahedral_mesh = pytetwild.tetrahedralize_pv(surface_mesh, edge_length_fac=1)
# Visualize the tetrahedral mesh in an "exploded" view
tetrahedral_mesh.explode(1).plot(show_edges=True)
You can also work with raw arrays. Here's a simple cube that we turn into tetrahedra.
import numpy as np
# Define vertices of the cube
vertices = np.array([
[0, 0, 0], # Vertex 0
[1, 0, 0], # Vertex 1
[1, 1, 0], # Vertex 2
[0, 1, 0], # Vertex 3
[0, 0, 1], # Vertex 4
[1, 0, 1], # Vertex 5
[1, 1, 1], # Vertex 6
[0, 1, 1] # Vertex 7
])
# Define faces using vertex indices
# Each face is a rectangle (also accepts triangles)
faces = np.array([
[0, 1, 2, 3], # Front face
[1, 5, 6, 2], # Right face
[5, 4, 7, 6], # Back face
[4, 0, 3, 7], # Left face
[4, 5, 1, 0], # Bottom face
[3, 2, 6, 7] # Top face
])
v_out, tetra = pytetwild.tetrahedralize(vertices, faces, optimize=False)
We've surfaced a handful of parameters to each of our interfaces
tetrahedralize
and tetrahedralize_pv
. Here are the optional parameters.
Additional Parameters --------------------- edge_length_fac : float, default: 0.05 Tetrahedral edge length as a function of bounding box diagional. The default ideal edge length is bb/20 (bounding box divided by 20). optimize : bool Improve the minimum scaled Jacobean for each cell. This leads to higher cell quality at the expense of computation time.
This project relies on fTetWild
and credits go to the original authors for
their efficient C++ library for tetrahedral meshing. That work is licensed
under the Mozilla Public License v2.0.
The work in this repository is also licensed under the Mozilla Public License v2.0.
If you are having issues, please feel free to raise an Issue.