trimesh.triangles
triangles.py
Functions for dealing with triangle soups in (n, 3, 3) float form.
- trimesh.triangles.all_coplanar(triangles)
Check to see if a list of triangles are all coplanar
- Parameters
triangles ((n, 3, 3) float) – Vertices of triangles
- Returns
all_coplanar – True if all triangles are coplanar
- Return type
bool
- trimesh.triangles.angles(triangles)
Calculates the angles of input triangles.
- Parameters
triangles ((n, 3, 3) float) – Vertex positions
- Returns
angles – Angles at vertex positions in radians Degenerate angles will be returned as zero
- Return type
(n, 3) float
- trimesh.triangles.any_coplanar(triangles)
For a list of triangles if the FIRST triangle is coplanar with ANY of the following triangles, return True. Otherwise, return False.
- trimesh.triangles.area(triangles=None, crosses=None, sum=False)
Calculates the sum area of input triangles
- Parameters
triangles ((n, 3, 3) float) – Vertices of triangles
crosses ((n, 3) float or None) – As a speedup don’t re- compute cross products
sum (bool) – Return summed area or individual triangle area
- Returns
area – Individual or summed area depending on sum argument
- Return type
(n,) float or float
- trimesh.triangles.barycentric_to_points(triangles, barycentric)
Convert a list of barycentric coordinates on a list of triangles to cartesian points.
- Parameters
triangles ((n, 3, 3) float) – Triangles in space
barycentric ((n, 2) float) – Barycentric coordinates
- Returns
points – Points in space
- Return type
(m, 3) float
- trimesh.triangles.bounds_tree(triangles)
Given a list of triangles, create an r-tree for broad- phase collision detection
- Parameters
triangles ((n, 3, 3) float) – Triangles in space
- Returns
tree – One node per triangle
- Return type
rtree.Rtree
- trimesh.triangles.closest_point(triangles, points)
Return the closest point on the surface of each triangle for a list of corresponding points.
Implements the method from “Real Time Collision Detection” and use the same variable names as “ClosestPtPointTriangle” to avoid being any more confusing.
- Parameters
triangles ((n, 3, 3) float) – Triangle vertices in space
points ((n, 3) float) – Points in space
- Returns
closest – Point on each triangle closest to each point
- Return type
(n, 3) float
- trimesh.triangles.cross(triangles)
Returns the cross product of two edges from input triangles
- Parameters
triangles ((n, 3, 3) float) – Vertices of triangles
- Returns
crosses – Cross product of two edge vectors
- Return type
(n, 3) float
- trimesh.triangles.extents(triangles, areas=None)
Return the 2D bounding box size of each triangle.
- Parameters
triangles ((n, 3, 3) float) – Triangles in space
areas ((n,) float) – Optional area of input triangles
- Returns
box – The size of each triangle’s 2D oriented bounding box
- Return type
(n, 2) float
- trimesh.triangles.mass_properties(triangles, crosses=None, density=1.0, center_mass=None, skip_inertia=False)
Calculate the mass properties of a group of triangles.
Implemented from: http://www.geometrictools.com/Documentation/PolyhedralMassProperties.pdf
- Parameters
triangles ((n, 3, 3) float) – Triangle vertices in space
crosses ((n,) float) – Optional cross products of triangles
density (float) – Optional override for density
center_mass ((3,) float) – Optional override for center mass
skip_inertia (bool) – if True will not return moments matrix
- Returns
info – Mass properties
- Return type
dict
- trimesh.triangles.nondegenerate(triangles, areas=None, height=None)
Find all triangles which have an oriented bounding box where both of the two sides is larger than a specified height.
Degenerate triangles can be when: 1) Two of the three vertices are colocated 2) All three vertices are unique but colinear
- Parameters
triangles ((n, 3, 3) float) – Triangles in space
height (float) – Minimum edge length of a triangle to keep
- Returns
nondegenerate – True if a triangle meets required minimum height
- Return type
(n,) bool
- trimesh.triangles.normals(triangles=None, crosses=None)
Calculates the normals of input triangles
- Parameters
triangles ((n, 3, 3) float) – Vertex positions
crosses ((n, 3) float) – Cross products of edge vectors
- Returns
normals ((m, 3) float) – Normal vectors
valid ((n,) bool) – Was the face nonzero area or not
- trimesh.triangles.points_to_barycentric(triangles, points, method='cramer')
Find the barycentric coordinates of points relative to triangles.
- The Cramer’s rule solution implements:
- The cross product solution implements:
- Parameters
triangles ((n, 3, 3) float) – Triangles vertices in space
points ((n, 3) float) – Point in space associated with a triangle
method (str) –
- Which method to compute the barycentric coordinates with:
- ’cross’: uses a method using cross products, roughly 2x slower but
different numerical robustness properties
anything else: uses a cramer’s rule solution
- Returns
barycentric – Barycentric coordinates of each point
- Return type
(n, 3) float
- trimesh.triangles.to_kwargs(triangles)
Convert a list of triangles to the kwargs for the Trimesh constructor.
- Parameters
triangles ((n, 3, 3) float) – Triangles in space
- Returns
kwargs – Keyword arguments for the trimesh.Trimesh constructor Includes keys ‘vertices’ and ‘faces’
- Return type
dict
Examples
>>> mesh = trimesh.Trimesh(**trimesh.triangles.to_kwargs(triangles))
- trimesh.triangles.windings_aligned(triangles, normals_compare)
Given a list of triangles and a list of normals determine if the two are aligned
- Parameters
triangles ((n, 3, 3) float) – Vertex locations in space
normals_compare ((n, 3) float) – List of normals to compare
- Returns
aligned – Are normals aligned with triangles
- Return type
(n,) bool