# trimesh.triangles#

## triangles.py#

Functions for dealing with triangle soups in (n, 3, 3) float form.

class trimesh.triangles.MassProperties(density: float, mass: float, volume: float, center_mass: numpy.ndarray[Any, numpy.dtype[numpy.float64]], inertia: numpy.ndarray[Any, numpy.dtype[numpy.float64]] | None = None)#

Bases: `object`

__init__(density: float, mass: float, volume: float, center_mass: ndarray[Any, dtype[float64]], inertia: ndarray[Any, dtype[float64]] | None = None) None#
center_mass: ndarray[Any, dtype[float64]]#
density: float#
inertia: ndarray[Any, dtype[float64]] | None = None#
mass: float#
volume: float#
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=None, center_mass=None, skip_inertia=False) #

Calculate the mass properties of a group of triangles.

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:

http://blackpawn.com/texts/pointinpoly

The cross product solution implements:

https://www.cs.ubc.ca/~heidrich/Papers/JGT.05.pdf

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