trimesh.remesh module¶
remesh.py¶
Deal with re- triangulation of existing meshes.
- trimesh.remesh.subdivide(vertices, faces, face_index=None, vertex_attributes=None, return_index=False)¶
Subdivide a mesh into smaller triangles.
Note that if face_index is passed, only those faces will be subdivided and their neighbors won’t be modified making the mesh no longer “watertight.”
- Parameters:
vertices ((n, 3) float) – Vertices in space
faces ((m, 3) int) – Indexes of vertices which make up triangular faces
face_index (faces to subdivide.) – if None: all faces of mesh will be subdivided if (n,) int array of indices: only specified faces
vertex_attributes (dict) – Contains (n, d) attribute data
return_index (bool) – If True, return index of original face for new faces
- Returns:
new_vertices ((q, 3) float) – Vertices in space
new_faces ((p, 3) int) – Remeshed faces
index_dict (dict) – Only returned if return_index, {index of original face : index of new faces}.
- trimesh.remesh.subdivide_loop(vertices, faces, iterations=None)¶
Subdivide a mesh by dividing each triangle into four triangles and approximating their smoothed surface (loop subdivision). This function is an array-based implementation of loop subdivision, which avoids slow for loop and enables faster calculation.
Overall process: 1. Calculate odd vertices.
Assign a new odd vertex on each edge and calculate the value for the boundary case and the interior case. The value is calculated as follows.
v2
/ f0 0
- v0–e–v1 /
- f1 / v0–e–v1
v3
interior case : 3:1 ratio of mean(v0,v1) and mean(v2,v3)
boundary case : mean(v0,v1)
Calculate even vertices.
The new even vertices are calculated with the existing vertices and their adjacent vertices.
1—2
/ / 0—1
- 0—v—3 / /
- // b0—v—b1
k…4
interior case : (1-kB):B ratio of v and k adjacencies
boundary case : 3:1 ratio of v and mean(b0,b1)
Compose new faces with new vertices.
- Parameters:
vertices ((n, 3) float) – Vertices in space
faces ((m, 3) int) – Indices of vertices which make up triangles
- Returns:
vertices ((j, 3) float) – Vertices in space
faces ((q, 3) int) – Indices of vertices
iterations (int) – Number of iterations to run subdivision
- trimesh.remesh.subdivide_to_size(vertices, faces, max_edge, max_iter=10, return_index=False)¶
Subdivide a mesh until every edge is shorter than a specified length.
Will return a triangle soup, not a nicely structured mesh.
- Parameters:
vertices ((n, 3) float) – Vertices in space
faces ((m, 3) int) – Indices of vertices which make up triangles
max_edge (float) – Maximum length of any edge in the result
max_iter (int) – The maximum number of times to run subdivision
return_index (bool) – If True, return index of original face for new faces
- Returns:
vertices ((j, 3) float) – Vertices in space
faces ((q, 3) int) – Indices of vertices
index ((q, 3) int) – Only returned if return_index, index of original face for each new face.