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