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
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
- 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
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
- 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
- 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
- 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.
- 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
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
- 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
- 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
- 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
- Returns
result – Scene containing all geometry
- Return type
- 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