trimesh.scene.scene

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

Bases: 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.

__init__(geometry=None, base_frame='world', metadata={}, graph=None, camera=None, lights=None, camera_transform=None)

Create a new Scene object.

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

  • camera (Camera or None) – A passed camera to use

  • lights ([trimesh.scene.lighting.Light] or None) – A passed lights to use

  • camera_transform ((4, 4) float or None) – Camera transform in the base frame

add_geometry(geometry, node_name=None, geom_name=None, parent_node_name=None, transform=None, extras=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

  • node_name (Name of the added node.) –

  • geom_name (Name of the added geometry.) –

  • parent_node_name (Name of the parent node in the graph.) –

  • transform (Transform that applies to the added node.) –

  • extras (Optional metadata for the node.) –

Returns

node_name – Name of single node in self.graph (passed in) or None if node was not added (eg. geometry was null or a Scene).

Return type

str

apply_transform(transform)

Apply a transform to all children of the base frame without modifying any geometry.

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 – Points in space

Return type

(n, 3) float

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

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.graph that represent identical geometry

Return type

  1. sequence

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 hash

Returns

identifiers – {Identifier hash: 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]

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

strip_visuals()

Strip visuals from every Trimesh geometry and set them to an empty ColorVisuals.

subscene(node)

Get part of a scene that succeeds a specified node.

Parameters

node (any) – Hashable key in scene.graph

Returns

subscene – Partial scene generated from current.

Return type

Scene

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'], base_frame='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

  • base_frame (str) – Base frame of the resulting scene

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