trimesh.scene.scene

Classes:

Geometry3D()

The Geometry3D object is the parent object of geometry objects which are three dimensional, including Trimesh, PointCloud, and Scene objects.

Scene([geometry, base_frame, metadata, …])

A simple scene graph which can be rendered directly via pyglet/openGL or through other endpoints such as a raytracer.

TransformForest([base_frame])

Functions:

append_scenes(iterable[, common])

Concatenate multiple scene objects into one scene.

split_scene(geometry, **kwargs)

Given a geometry, list of geometries, or a Scene return them as a single Scene object.

class trimesh.scene.scene.Scene(geometry=None, base_frame='world', metadata={}, graph=None, camera=None, lights=None, camera_transform=None)

Bases: trimesh.parent.Geometry3D

A simple scene graph which can be rendered directly via pyglet/openGL or through other endpoints such as a raytracer. Meshes are added by name, which can then be moved by updating transform in the transform tree.

Methods:

add_geometry(geometry[, node_name, …])

Add a geometry to the scene.

apply_transform(transform)

Apply a transform to every geometry in the scene.

camera_rays()

Calculate the trimesh.scene.Camera origin and ray direction vectors.

convert_units(desired[, guess])

If geometry has units defined convert them to new units.

copy()

Return a deep copy of the current scene

crc()

deduplicated()

Return a new scene where each unique geometry is only included once and transforms are discarded.

delete_geometry(names)

Delete one more multiple geometries from the scene and also remove any node in the transform graph which references it.

dump([concatenate])

Append all meshes in scene freezing transforms.

explode([vector, origin])

Explode a scene around a point and vector.

export([file_obj, file_type])

Export a snapshot of the current scene.

md5()

MD5 of scene which will change when meshes or transforms are changed

rezero()

Move the current scene so that the AABB of the whole scene is centered at the origin.

save_image([resolution])

Get a PNG image of a scene.

scaled(scale)

Return a copy of the current scene, with meshes and scene transforms scaled to the requested factor.

set_camera([angles, distance, center, …])

Create a camera object for self.camera, and add a transform to self.graph for it.

show([viewer])

Display the current scene.

Attributes:

area

What is the summed area of every geometry which has area.

bounds

Return the overall bounding box of the scene.

bounds_corners

A list of points that represent the corners of the AABB of every geometry in the scene.

camera

Get the single camera for the scene.

camera_transform

Get camera transform in the base frame

centroid

Return the center of the bounding box for the scene.

convex_hull

The convex hull of the whole scene

duplicate_nodes

Return a sequence of node keys of identical meshes.

extents

Return the axis aligned box size of the current scene.

geometry_identifiers

Look up geometries by identifier MD5

has_camera

is_empty

Does the scene have anything in it.

is_valid

Is every geometry connected to the root node.

lights

Get a list of the lights in the scene.

scale

The approximate scale of the mesh

triangles

Return a correctly transformed polygon soup of the current scene.

triangles_node

Which node of self.graph does each triangle come from.

units

Get the units for every model in the scene, and raise a ValueError if there are mixed units.

add_geometry(geometry, node_name=None, geom_name=None, parent_node_name=None, transform=None)

Add a geometry to the scene.

If the mesh has multiple transforms defined in its metadata, they will all be copied into the TransformForest of the current scene automatically.

Parameters
  • geometry (Trimesh, Path2D, Path3D PointCloud or list) – Geometry to initially add to the scene

  • base_frame (str or hashable) – Name of base frame

  • metadata (dict) – Any metadata about the scene

  • graph (TransformForest or None) – A passed transform graph to use

Returns

node_name – Name of node in self.graph

Return type

str

apply_transform(transform)

Apply a transform to every geometry in the scene.

Parameters

transform ((4, 4)) – Homogeneous transformation matrix

property area

What is the summed area of every geometry which has area.

Returns

area – Summed area of every instanced geometry

Return type

float

property bounds

Return the overall bounding box of the scene.

Returns

bounds – Position of [min, max] bounding box Returns None if no valid bounds exist

Return type

(2, 3) float or None

property bounds_corners

A list of points that represent the corners of the AABB of every geometry in the scene.

This can be useful if you want to take the AABB in a specific frame.

Returns

corners

Return type

(n, 3) float, points in space

property camera

Get the single camera for the scene. If not manually set one will abe automatically generated.

Returns

camera – Camera object defined for the scene

Return type

trimesh.scene.Camera

camera_rays()

Calculate the trimesh.scene.Camera origin and ray direction vectors. Returns one ray per pixel as set in camera.resolution

Returns

  • origin ((n, 3) float) – Ray origins in space

  • vectors ((n, 3) float) – Ray direction unit vectors in world coordinates

  • pixels ((n, 2) int) – Which pixel does each ray correspond to in an image

property camera_transform

Get camera transform in the base frame

Returns

camera_transform – Camera transform in the base frame

Return type

(4, 4) float

property centroid

Return the center of the bounding box for the scene.

Returns

centroid – Point for center of bounding box

Return type

  1. float

convert_units(desired, guess=False)

If geometry has units defined convert them to new units.

Returns a new scene with geometries and transforms scaled.

Parameters
  • desired (str) – Desired final unit system: ‘inches’, ‘mm’, etc.

  • guess (bool) – Is the converter allowed to guess scale when models don’t have it specified in their metadata.

Returns

scaled – Copy of scene with scaling applied and units set for every model

Return type

trimesh.Scene

property convex_hull

The convex hull of the whole scene

Returns

hull

Return type

Trimesh object, convex hull of all meshes in scene

copy()

Return a deep copy of the current scene

Returns

copied – Copy of the current scene

Return type

trimesh.Scene

crc()
deduplicated()

Return a new scene where each unique geometry is only included once and transforms are discarded.

Returns

dedupe – One copy of each unique geometry from scene

Return type

Scene

delete_geometry(names)

Delete one more multiple geometries from the scene and also remove any node in the transform graph which references it.

Parameters

name (hashable) – Name that references self.geometry

dump(concatenate=False)

Append all meshes in scene freezing transforms.

Parameters

concatenate (bool) – If True, concatenate results into single mesh

Returns

dumped – Trimesh objects transformed to their location the scene.graph

Return type

(n,) Trimesh or Trimesh

property duplicate_nodes

Return a sequence of node keys of identical meshes.

Will include meshes with different geometry but identical spatial hashes as well as meshes repeated by self.nodes.

Returns

duplicates – Keys of self.nodes that represent identical geometry

Return type

  1. sequenc

explode(vector=None, origin=None)

Explode a scene around a point and vector.

Parameters
  • vector ((3,) float or float) – Explode radially around a direction vector or spherically

  • origin ((3,) float) – Point to explode around

export(file_obj=None, file_type=None, **kwargs)

Export a snapshot of the current scene.

Parameters
  • file_obj (str, file-like, or None) – File object to export to

  • file_type (str or None) – What encoding to use for meshes IE: dict, dict64, stl

Returns

export – Only returned if file_obj is None

Return type

bytes

property extents

Return the axis aligned box size of the current scene.

Returns

extents – Bounding box sides length

Return type

(3,) float

property geometry_identifiers

Look up geometries by identifier MD5

Returns

identifiers – {Identifier MD5: key in self.geometry}

Return type

dict

property has_camera
property is_empty

Does the scene have anything in it.

Returns

is_empty

Return type

bool, True if nothing is in the scene

property is_valid

Is every geometry connected to the root node.

Returns

is_valid – Does every geometry have a transform

Return type

bool

property lights

Get a list of the lights in the scene. If nothing is set it will generate some automatically.

Returns

lights – Lights in the scene.

Return type

[trimesh.scene.lighting.Light]

md5()

MD5 of scene which will change when meshes or transforms are changed

Returns

hashed – MD5 hash of scene

Return type

str

rezero()

Move the current scene so that the AABB of the whole scene is centered at the origin.

Does this by changing the base frame to a new, offset base frame.

save_image(resolution=None, **kwargs)

Get a PNG image of a scene.

Parameters
  • resolution ((2,) int) – Resolution to render image

  • **kwargs – Passed to SceneViewer constructor

Returns

png – Render of scene as a PNG

Return type

bytes

property scale

The approximate scale of the mesh

Returns

scale – The mean of the bounding box edge lengths

Return type

float

scaled(scale)

Return a copy of the current scene, with meshes and scene transforms scaled to the requested factor.

Parameters

scale (float) – Factor to scale meshes and transforms

Returns

scaled – A copy of the current scene but scaled

Return type

trimesh.Scene

set_camera(angles=None, distance=None, center=None, resolution=None, fov=None)

Create a camera object for self.camera, and add a transform to self.graph for it.

If arguments are not passed sane defaults will be figured out which show the mesh roughly centered.

Parameters
  • angles ((3,) float) – Initial euler angles in radians

  • distance (float) – Distance from centroid

  • center ((3,) float) – Point camera should be center on

  • camera (Camera object) – Object that stores camera parameters

show(viewer=None, **kwargs)

Display the current scene.

Parameters
  • viewer (str) – What kind of viewer to open, including ‘gl’ to open a pyglet window, ‘notebook’ for a jupyter notebook or None

  • kwargs (dict) – Includes smooth, which will turn on or off automatic smooth shading

property triangles

Return a correctly transformed polygon soup of the current scene.

Returns

triangles – Triangles in space

Return type

(n, 3, 3) float

property triangles_node

Which node of self.graph does each triangle come from.

Returns

triangles_index – Node name for each triangle

Return type

(len(self.triangles),)

property units

Get the units for every model in the scene, and raise a ValueError if there are mixed units.

Returns

units – Units for every model in the scene

Return type

str

trimesh.scene.scene.append_scenes(iterable, common=['world'])

Concatenate multiple scene objects into one scene.

Parameters
  • iterable ((n,) Trimesh or Scene) – Geometries that should be appended

  • common ((n,) str) – Nodes that shouldn’t be remapped

Returns

result – Scene containing all geometry

Return type

trimesh.Scene

trimesh.scene.scene.split_scene(geometry, **kwargs)

Given a geometry, list of geometries, or a Scene return them as a single Scene object.

Parameters

geometry (splittable) –

Returns

scene

Return type

trimesh.Scene