trimesh.scene.scene#

class trimesh.scene.scene.Scene(geometry=None, base_frame='world', metadata=None, 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=None, 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, metadata=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 (None or str) – Name of the added node.

  • geom_name (None or str) – Name of the added geometry.

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

  • transform (None or (4, 4) float) – Transform that applies to the added node.

  • metadata (None or dict) – 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#

Get the post-transform AABB for each node which has geometry defined.

Returns:

corners

Bounds for each node with vertices:

{node_name : (2, 3) float}

Return type:

dict

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 center_mass#

Find the center of mass for every instance in the scene.

Returns:

center_mass – The center of mass of the scene

Return type:

(3,) 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: str, guess: bool = False) Scene#

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 – Depending on what the scene contains. If concatenate then some geometry may be dropped if it doesn’t match.

Return type:

(n,) Trimesh, Path2D, Path3D, PointCloud

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]

property moment_inertia#

Return the moment of inertia of the current scene with respect to the center of mass of the current scene.

Returns:

inertia – Inertia with respect to cartesian axis at scene.center_mass

Return type:

(3, 3) float

moment_inertia_frame(transform)#

Return the moment of inertia of the current scene relative to a transform from the base frame.

Parameters transform : (4, 4) float

Homogeneous transformation matrix.

Returns:

inertia – Inertia tensor at requested frame.

Return type:

(3, 3) float

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 or (3,) 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 (Union[str, callable, None]) – What kind of viewer to use, such as ‘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: str#

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

property volume#

What is the summed volume of every geometry which has volume

Returns:

volume – Summed area of every instanced geometry

Return type:

float

trimesh.scene.scene.append_scenes(iterable, common=None, 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