Source code for mani_skill.utils.visualization.renderer

import sys

from matplotlib import pyplot as plt


[docs]class ImageRenderer: def __init__(self, wait_for_button_press=True): """ Create a very light-weight image renderer. Args: wait_for_button_press (bool): If True, each call to this renderer will pause the process until the user presses any key. event_handler: Code to run given an event / button press. If None the default is mapping 'escape' and 'q' to sys.exit(0) """
[docs] self._image = None
[docs] self.last_event = None
[docs] self.wait_for_button_press = wait_for_button_press
[docs] self.pressed_keys = set()
[docs] def key_press_handler(self, event): self.last_event = event self.pressed_keys.add(event.key) if event.key in ["q", "escape"]: sys.exit(0)
[docs] def key_release_handler(self, event): if event.key in self.pressed_keys: self.pressed_keys.remove(event.key)
[docs] def __call__(self, buffer): if not self._image: plt.ion() self.fig = plt.figure() self._image = plt.imshow(buffer, animated=True) self.fig.canvas.mpl_connect("key_press_event", self.key_press_handler) self.fig.canvas.mpl_connect("key_release_event", self.key_release_handler) else: self._image.set_data(buffer) if self.wait_for_button_press: plt.waitforbuttonpress() else: self.fig.canvas.draw_idle() self.fig.canvas.flush_events() plt.draw()
[docs] def __del__(self): self.close()
[docs] def close(self): plt.ioff() plt.close()