trimesh.viewer.windowed

windowed.py

Provides a pyglet- based windowed viewer to preview Trimesh, Scene, PointCloud, and Path objects.

Works on all major platforms: Windows, Linux, and OSX.

class trimesh.viewer.windowed.SceneViewer(scene, smooth=True, flags=None, visible=True, resolution=None, start_loop=True, callback=None, callback_period=None, caption=None, fixed=None, offset_lines=True, line_settings=None, background=None, window_conf=None, profile=False, record=False, **kwargs)

Bases: pyglet.window.BaseWindow

__init__(scene, smooth=True, flags=None, visible=True, resolution=None, start_loop=True, callback=None, callback_period=None, caption=None, fixed=None, offset_lines=True, line_settings=None, background=None, window_conf=None, profile=False, record=False, **kwargs)

Create a window that will display a trimesh.Scene object in an OpenGL context via pyglet.

Parameters
  • scene (trimesh.scene.Scene) – Scene with geometry and transforms

  • smooth (bool) – If True try to smooth shade things

  • flags (dict) – If passed apply keys to self.view: [‘cull’, ‘wireframe’, etc]

  • visible (bool) – Display window or not

  • resolution ((2,) int) – Initial resolution of window

  • start_loop (bool) – Call pyglet.app.run() at the end of init

  • callback (function) – A function which can be called periodically to update things in the scene

  • callback_period (float) – How often to call the callback, in seconds

  • fixed (None or iterable) – List of keys in scene.geometry to skip view transform on to keep fixed relative to camera

  • offset_lines (bool) – If True, will offset lines slightly so if drawn coplanar with mesh geometry they will be visible

  • background (None or (4,) uint8) – Color for background

  • window_conf (None, or gl.Config) – Passed to window init

  • profile (bool) – If set will run a pyinstrument profile for every call to on_draw and print the output.

  • record (bool) – If True, will save a list of png bytes to a list located in scene.metadata[‘recording’]

  • kwargs (dict) – Additional arguments to pass, including ‘background’ for to set background color

add_geometry(name, geometry, **kwargs)

Add a geometry to the viewer.

Parameters
  • name (hashable) – Name that references geometry

  • geometry (Trimesh, Path2D, Path3D, PointCloud) – Geometry to display in the viewer window

  • ** (kwargs) – Passed to rendering.convert_to_vertexlist

cleanup_geometries()

Remove any stored vertex lists that no longer exist in the scene.

flip()

Swap the OpenGL front and back buffers.

Call this method on a double-buffered window to update the visible display with the back buffer. The contents of the back buffer is undefined after this operation.

Windows are double-buffered by default. This method is called automatically by EventLoop after the on_draw() event.

hide_geometry(node)

Don’t display the geometry contained at a node on the next draw.

Parameters

node (str) – Node to not display

init_gl()

Perform the magic incantations to create an OpenGL scene using pyglet.

on_draw()

Run the actual draw calls.

on_key_press(symbol, modifiers)

Call appropriate functions given key presses.

on_mouse_drag(x, y, dx, dy, buttons, modifiers)

Pan or rotate the view.

on_mouse_press(x, y, buttons, modifiers)

Set the start point of the drag.

on_mouse_scroll(x, y, dx, dy)

Zoom the view.

on_resize(width, height)

Handle resized windows.

reset_view(flags=None)

Set view to the default view.

Parameters

flags (None or dict) – If any view key passed override the default e.g. {‘cull’: False}

save_image(file_obj)

Save the current color buffer to a file object in PNG format.

Parameters

file_obj (file name, or file- like object) –

toggle_axis()

Toggle a rendered XYZ/RGB axis marker: off, world frame, every frame

toggle_culling()

Toggle back face culling.

It is on by default but if you are dealing with non- watertight meshes you probably want to be able to see the back sides.

toggle_fullscreen()

Toggle between fullscreen and windowed mode.

toggle_grid()

Toggle a rendered grid.

toggle_wireframe()

Toggle wireframe mode

Good for looking inside meshes, off by default.

unhide_geometry(node)

If a node is hidden remove the flag and show the geometry on the next draw.

Parameters

node (str) – Node to display

update_flags()

Check the view flags, and call required GL functions.

trimesh.viewer.windowed.geometry_hash(geometry)

Get a hash for a geometry object

Parameters

geometry (object) –

Returns

hash

Return type

str

trimesh.viewer.windowed.render_scene(scene, resolution=None, visible=True, **kwargs)

Render a preview of a scene to a PNG. Note that whether this works or not highly variable based on platform and graphics driver.

Parameters
  • scene (trimesh.Scene) – Geometry to be rendered

  • resolution ((2,) int or None) – Resolution in pixels or set from scene.camera

  • visible (bool) – Show a window during rendering. Note that MANY platforms refuse to render with hidden windows and will likely return a blank image; this is a platform issue and cannot be fixed in Python.

  • kwargs – Passed to SceneViewer

Returns

render – Image in PNG format

Return type

bytes