trimesh.bounds module

Functions

contains(bounds, points)

Do an axis aligned bounding box check on a list of points.

corners(bounds)

Given a pair of axis aligned bounds, return all 8 corners of the bounding box.

minimum_cylinder(obj[, sample_count, angle_tol])

Find the approximate minimum volume cylinder which contains a mesh or a a list of points.

oriented_bounds(obj[, angle_digits, …])

Find the oriented bounding box for a Trimesh

oriented_bounds_2D(points[, qhull_options])

Find an oriented bounding box for an array of 2D points.

trimesh.bounds.contains(bounds, points)

Do an axis aligned bounding box check on a list of points.

Parameters
  • bounds ((2, dimension) float) – Axis aligned bounding box

  • points ((n, dimension) float) – Points in space

Returns

points_inside – True if points are inside the AABB

Return type

(n,) bool

trimesh.bounds.corners(bounds)

Given a pair of axis aligned bounds, return all 8 corners of the bounding box.

Parameters

bounds ((2,3) or (2,2) float) – Axis aligned bounds

Returns

corners – Corner vertices of the cube

Return type

(8,3) float

trimesh.bounds.minimum_cylinder(obj, sample_count=6, angle_tol=0.001)

Find the approximate minimum volume cylinder which contains a mesh or a a list of points.

Samples a hemisphere then uses scipy.optimize to pick the final orientation of the cylinder.

A nice discussion about better ways to implement this is here: https://www.staff.uni-mainz.de/schoemer/publications/ALGO00.pdf

Parameters
  • obj (trimesh.Trimesh, or (n, 3) float) – Mesh object or points in space

  • sample_count (int) – How densely should we sample the hemisphere. Angular spacing is 180 degrees / this number

Returns

result

With keys:

’radius’ : float, radius of cylinder ‘height’ : float, height of cylinder ‘transform’ : (4,4) float, transform from the origin

to centered cylinder

Return type

dict

trimesh.bounds.oriented_bounds(obj, angle_digits=1, ordered=True, normal=None)

Find the oriented bounding box for a Trimesh

Parameters
  • obj (trimesh.Trimesh, (n, 2) float, or (n, 3) float) – Mesh object or points in 2D or 3D space

  • angle_digits (int) – How much angular precision do we want on our result. Even with less precision the returned extents will cover the mesh albeit with larger than minimal volume, and may experience substantial speedups.

  • ordered (bool) – Return a consistent order for bounds

  • normal (None or (3,) float) – Override search for normal on 3D meshes

Returns

  • to_origin ((4,4) float) – Transformation matrix which will move the center of the bounding box of the input mesh to the origin.

  • extents ((3,) float) – The extents of the mesh once transformed with to_origin

trimesh.bounds.oriented_bounds_2D(points, qhull_options='QbB')

Find an oriented bounding box for an array of 2D points.

Parameters

points ((n,2) float) – Points in 2D.

Returns

  • transform ((3,3) float) – Homogeneous 2D transformation matrix to move the input points so that the axis aligned bounding box is CENTERED AT THE ORIGIN.

  • rectangle ((2,) float) – Size of extents once input points are transformed by transform