Module rpps.viz.blit

Classes

class BlitManager (fig, animated_artists=())
Expand source code
class BlitManager:
    def __init__(self, fig, animated_artists=()):
        self.fig = fig
        self.canvas = fig.canvas
        self._artists = []
        self._bg = None
        for a in animated_artists:
            self.add_artist(a)
        self.cid = fig.canvas.mpl_connect("draw_event", self.on_draw)
        self.size = fig.get_size_inches()

    def on_draw(self, event): # Handle resizes
        if event is not None:
            if event.canvas != self.canvas:
                raise RuntimeError

        size = self.fig.get_size_inches()
        if (self.size != size).any():
            self.size = size
            print(f"Saving BG")
            self._bg = self.canvas.copy_from_bbox(self.canvas.figure.bbox)
        self._draw_animated()

    def _draw_animated(self):
        for a in self._artists:
            self.fig.draw_artist(a)

    def add_artist(self, art):
        if art.figure != self.canvas.figure:
            raise RuntimeError
        art.set_animated(True)
        self._artists.append(art)

    def update(self):
        if self._bg is None:
            self.on_draw(None)
        self.canvas.restore_region(self._bg)
        self._draw_animated()
        self.canvas.blit(self.canvas.figure.bbox)
        self.canvas.flush_events()

Methods

def add_artist(self, art)
Expand source code
def add_artist(self, art):
    if art.figure != self.canvas.figure:
        raise RuntimeError
    art.set_animated(True)
    self._artists.append(art)
def on_draw(self, event)
Expand source code
def on_draw(self, event): # Handle resizes
    if event is not None:
        if event.canvas != self.canvas:
            raise RuntimeError

    size = self.fig.get_size_inches()
    if (self.size != size).any():
        self.size = size
        print(f"Saving BG")
        self._bg = self.canvas.copy_from_bbox(self.canvas.figure.bbox)
    self._draw_animated()
def update(self)
Expand source code
def update(self):
    if self._bg is None:
        self.on_draw(None)
    self.canvas.restore_region(self._bg)
    self._draw_animated()
    self.canvas.blit(self.canvas.figure.bbox)
    self.canvas.flush_events()