trimesh.creation

creation.py

Create meshes from primitives, or with operations.

Classes:

Polygon([shell, holes])

A two-dimensional figure bounded by a linear ring

Trimesh([vertices, faces, face_normals, …])

Functions:

align_vectors(a, b[, return_angle])

Find the rotation matrix that transforms one 3D vector to another.

annulus(r_min, r_max[, height, sections, …])

Create a mesh of an annular cylinder along Z centered at the origin.

axis([origin_size, transform, origin_color, …])

Return an XYZ axis marker as a Trimesh, which represents position and orientation.

box([extents, transform])

Return a cuboid.

camera_marker(camera[, marker_height, …])

Create a visual marker for a camera object, including an axis and FOV.

capsule([height, radius, count])

Create a mesh of a capsule, or a cylinder with hemispheric ends.

cone(radius, height[, sections, transform])

Create a mesh of a cone along Z centered at the origin.

cylinder(radius[, height, sections, …])

Create a mesh of a cylinder along Z centered at the origin.

extrude_polygon(polygon, height[, …])

Extrude a 2D shapely polygon into a 3D mesh

extrude_triangulation(vertices, faces, height)

Extrude a 2D triangulation into a watertight mesh.

faces_to_edges(faces[, return_index])

Given a list of faces (n,3), return a list of edges (n*3,2)

icosahedron()

Create an icosahedron, a 20 faced polyhedron.

icosphere([subdivisions, radius, color])

Create an isophere centered at the origin.

load_wkb(data[, hex])

Load a geometry from a WKB byte string, or hex-encoded string if hex=True.

plane_transform(origin, normal)

Given the origin and normal of a plane find the transform that will move that plane to be coplanar with the XY plane.

random_soup([face_count])

Return random triangles as a Trimesh

revolve(linestring[, angle, sections, transform])

Revolve a 2D line string around the 2D Y axis, with a result with the 2D Y axis pointing along the 3D Z axis.

sweep_polygon(polygon, path[, angles])

Extrude a 2D shapely polygon into a 3D mesh along an arbitrary 3D path.

triangulate_polygon(polygon[, …])

Given a shapely polygon create a triangulation using a python interface to triangle.c or mapbox-earcut.

truncated_prisms(tris[, origin, normal])

Return a mesh consisting of multiple watertight prisms below a list of triangles, truncated by a specified plane.

uv_sphere([radius, count, theta, phi])

Create a UV sphere (latitude + longitude) centered at the origin.

trimesh.creation.annulus(r_min, r_max, height=None, sections=None, transform=None, segment=None, **kwargs)

Create a mesh of an annular cylinder along Z centered at the origin.

Parameters
  • r_min (float) – The inner radius of the annular cylinder

  • r_max (float) – The outer radius of the annular cylinder

  • height (float) – The height of the annular cylinder

  • sections (int or None) – How many pie wedges should the annular cylinder have

  • transform ((4, 4) float or None) – Transform to apply to move result from the origin

  • segment (None or (2, 3) float) – Override transform and height with a line segment

  • **kwargs – passed to Trimesh to create annulus

Returns

annulus – Mesh of annular cylinder

Return type

trimesh.Trimesh

trimesh.creation.axis(origin_size=0.04, transform=None, origin_color=None, axis_radius=None, axis_length=None)

Return an XYZ axis marker as a Trimesh, which represents position and orientation. If you set the origin size the other parameters will be set relative to it.

Parameters
  • transform ((4, 4) float) – Transformation matrix

  • origin_size (float) – Radius of sphere that represents the origin

  • origin_color ((3,) float or int, uint8 or float) – Color of the origin

  • axis_radius (float) – Radius of cylinder that represents x, y, z axis

  • axis_length (float) – Length of cylinder that represents x, y, z axis

Returns

marker – Mesh geometry of axis indicators

Return type

trimesh.Trimesh

trimesh.creation.box(extents=None, transform=None, **kwargs)

Return a cuboid.

Parameters
  • extents (float, or (3,) float) – Edge lengths

  • transform ((4, 4) float) – Transformation matrix

  • **kwargs – passed to Trimesh to create box

Returns

geometry – Mesh of a cuboid

Return type

trimesh.Trimesh

trimesh.creation.camera_marker(camera, marker_height=0.4, origin_size=None)

Create a visual marker for a camera object, including an axis and FOV.

Parameters
  • camera (trimesh.scene.Camera) – Camera object with FOV and transform defined

  • marker_height (float) – How far along the camera Z should FOV indicators be

  • origin_size (float) – Sphere radius of the origin (default: marker_height / 10.0)

Returns

meshes – Contains Trimesh and Path3D objects which can be visualized

Return type

list

trimesh.creation.capsule(height=1.0, radius=1.0, count=[32, 32])

Create a mesh of a capsule, or a cylinder with hemispheric ends.

Parameters
  • height (float) – Center to center distance of two spheres

  • radius (float) – Radius of the cylinder and hemispheres

  • count ((2,) int) – Number of sections on latitude and longitude

Returns

capsule

Capsule geometry with:
  • cylinder axis is along Z

  • one hemisphere is centered at the origin

  • other hemisphere is centered along the Z axis at height

Return type

trimesh.Trimesh

trimesh.creation.cone(radius, height, sections=None, transform=None, **kwargs)

Create a mesh of a cone along Z centered at the origin.

Parameters
  • radius (float) – The radius of the cylinder

  • height (float) – The height of the cylinder

  • sections (int or None) – How many pie wedges per revolution

  • transform ((4, 4) float or None) – Transform to apply after creation

  • **kwargs (dict) – Passed to Trimesh constructor

Returns

cone – Resulting mesh of a cone

Return type

trimesh.Trimesh

trimesh.creation.cylinder(radius, height=None, sections=None, segment=None, transform=None, **kwargs)

Create a mesh of a cylinder along Z centered at the origin.

Parameters
  • radius (float) – The radius of the cylinder

  • height (float or None) – The height of the cylinder

  • sections (int or None) – How many pie wedges should the cylinder have

  • segment ((2, 3) float) – Endpoints of axis, overrides transform and height

  • transform ((4, 4) float) – Transform to apply

  • **kwargs – passed to Trimesh to create cylinder

Returns

cylinder – Resulting mesh of a cylinder

Return type

trimesh.Trimesh

trimesh.creation.extrude_polygon(polygon, height, transform=None, triangle_args=None, **kwargs)

Extrude a 2D shapely polygon into a 3D mesh

Parameters
  • polygon (shapely.geometry.Polygon) – 2D geometry to extrude

  • height (float) – Distance to extrude polygon along Z

  • triangle_args (str or None) – Passed to triangle

  • **kwargs – passed to Trimesh

Returns

mesh – Resulting extrusion as watertight body

Return type

trimesh.Trimesh

trimesh.creation.extrude_triangulation(vertices, faces, height, transform=None, **kwargs)

Extrude a 2D triangulation into a watertight mesh.

Parameters
  • vertices ((n, 2) float) – 2D vertices

  • faces ((m, 3) int) – Triangle indexes of vertices

  • height (float) – Distance to extrude triangulation

  • **kwargs (dict) – Passed to Trimesh constructor

Returns

mesh – Mesh created from extrusion

Return type

trimesh.Trimesh

trimesh.creation.icosahedron()

Create an icosahedron, a 20 faced polyhedron.

Returns

ico – Icosahederon centered at the origin.

Return type

trimesh.Trimesh

trimesh.creation.icosphere(subdivisions=3, radius=1.0, color=None)

Create an isophere centered at the origin.

Parameters
  • subdivisions (int) – How many times to subdivide the mesh. Note that the number of faces will grow as function of 4 ** subdivisions, so you probably want to keep this under ~5

  • radius (float) – Desired radius of sphere

  • color ((3,) float or uint8) – Desired color of sphere

Returns

ico – Meshed sphere

Return type

trimesh.Trimesh

trimesh.creation.random_soup(face_count=100)

Return random triangles as a Trimesh

Parameters

face_count (int) – Number of faces desired in mesh

Returns

soup – Geometry with face_count random faces

Return type

trimesh.Trimesh

trimesh.creation.revolve(linestring, angle=None, sections=None, transform=None, **kwargs)

Revolve a 2D line string around the 2D Y axis, with a result with the 2D Y axis pointing along the 3D Z axis.

This function is intended to handle the complexity of indexing and is intended to be used to create all radially symmetric primitives, eventually including cylinders, annular cylinders, capsules, cones, and UV spheres.

Note that if your linestring is closed, it needs to be counterclockwise if you would like face winding and normals facing outwards.

Parameters
  • linestring ((n, 2) float) – Lines in 2D which will be revolved

  • angle (None or float) – Angle in radians to revolve curve by

  • sections (None or int) – Number of sections result should have If not specified default is 32 per revolution

  • transform (None or (4, 4) float) – Transform to apply to mesh after construction

  • **kwargs (dict) – Passed to Trimesh constructor

Returns

revolved – Mesh representing revolved result

Return type

Trimesh

trimesh.creation.sweep_polygon(polygon, path, angles=None, **kwargs)

Extrude a 2D shapely polygon into a 3D mesh along an arbitrary 3D path. Doesn’t handle sharp curvature well.

Parameters
  • polygon (shapely.geometry.Polygon) – Profile to sweep along path

  • path ((n, 3) float) – A path in 3D

  • angles ((n,) float) – Optional rotation angle relative to prior vertex at each vertex

Returns

mesh – Geometry of result

Return type

trimesh.Trimesh

trimesh.creation.triangulate_polygon(polygon, triangle_args=None, engine=None, **kwargs)

Given a shapely polygon create a triangulation using a python interface to triangle.c or mapbox-earcut. > pip install triangle > pip install mapbox_earcut

Parameters
  • polygon (Shapely.geometry.Polygon) – Polygon object to be triangulated

  • triangle_args (str or None) – Passed to triangle.triangulate i.e: ‘p’, ‘pq30’

  • engine (None or str) – Any value other than ‘earcut’ will use triangle

Returns

  • vertices ((n, 2) float) – Points in space

  • faces ((n, 3) int) – Index of vertices that make up triangles

trimesh.creation.truncated_prisms(tris, origin=None, normal=None)

Return a mesh consisting of multiple watertight prisms below a list of triangles, truncated by a specified plane.

Parameters
  • triangles ((n, 3, 3) float) – Triangles in space

  • origin (None or (3,) float) – Origin of truncation plane

  • normal (None or (3,) float) – Unit normal vector of truncation plane

Returns

mesh – Triangular mesh

Return type

trimesh.Trimesh

trimesh.creation.uv_sphere(radius=1.0, count=[32, 32], theta=None, phi=None)

Create a UV sphere (latitude + longitude) centered at the origin. Roughly one order of magnitude faster than an icosphere but slightly uglier.

Parameters
  • radius (float) – Radius of sphere

  • count ((2,) int) – Number of latitude and longitude lines

  • theta ((n,) float) – Optional theta angles in radians

  • phi ((n,) float) – Optional phi angles in radians

Returns

mesh – Mesh of UV sphere with specified parameters

Return type

trimesh.Trimesh