Skip to content

Instantly share code, notes, and snippets.

@wkentaro
Created February 5, 2020 11:05
Show Gist options
  • Save wkentaro/adef9a760300c009d3f1ac84fa780232 to your computer and use it in GitHub Desktop.
Save wkentaro/adef9a760300c009d3f1ac84fa780232 to your computer and use it in GitHub Desktop.
from __future__ import division
import threading
import pyglet
import trimesh.viewer
class TrimeshSceneViewer(trimesh.viewer.SceneViewer):
def __init__(self, scene, resolution=None):
self._redraw = True
pyglet.clock.schedule_interval(self.on_update, 1 / 30)
self.scene = scene
self._kwargs = dict(
scene=self.scene,
resolution=resolution,
offset_lines=False,
start_loop=False,
)
self.lock = threading.Lock()
def show(self):
self.thread = threading.Thread(target=self._init_and_start_app)
self.thread.daemon = True # terminate when main thread exit
self.thread.start()
def _init_and_start_app(self):
with self.lock:
super(TrimeshSceneViewer, self).__init__(**self._kwargs)
pyglet.app.run()
def redraw(self):
self._redraw = True
def on_update(self, dt):
self.on_draw()
def on_draw(self):
with self.lock:
self._update_vertex_list()
super(TrimeshSceneViewer, self).on_draw()
self._redraw = False
def on_mouse_press(self, *args, **kwargs):
self._redraw = True
return super(TrimeshSceneViewer, self).on_mouse_press(*args, **kwargs)
def on_mouse_drag(self, *args, **kwargs):
self._redraw = True
return super(TrimeshSceneViewer, self).on_mouse_drag(*args, **kwargs)
def on_mouse_scroll(self, *args, **kwargs):
self._redraw = True
return super(TrimeshSceneViewer, self).on_mouse_scroll(*args, **kwargs)
def on_key_press(self, *args, **kwargs):
self._redraw = True
return super(TrimeshSceneViewer, self).on_key_press(*args, **kwargs)
def on_resize(self, *args, **kwargs):
self._redraw = True
return super(TrimeshSceneViewer, self).on_resize(*args, **kwargs)
def set_camera(self, *args, **kwargs):
with self.lock:
self.scene.set_camera(*args, **kwargs)
#!/usr/bin/env python
# import pyrender
#
#
# scene_pyrender = pyrender.Scene.from_trimesh(scene_trimesh)
# viewer = pyrender.Viewer(scene_pyrender, use_raymond_lights=True)
#
# scene_trimesh # new
# scene_pyrender2 = pyrender.Scene.from_trimesh(scene_trimesh)
# scene_pyrender.update(scene_pyrender2)
import numpy as np
import trimesh
from _trimesh import TrimeshSceneViewer
scene = trimesh.Scene()
axis = trimesh.creation.axis()
axis.apply_translation(np.random.random((3,)))
scene.add_geometry(axis)
viewer = TrimeshSceneViewer(scene)
viewer.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment