class AnimSepSpaceOld: def __init__(self, d, fargs=None, save_count=None, interval=200, repeat=None, repeat_delay=None, blit=None, figsize=(8, 6), figdpi=100): self.fargs = fargs self.save_count = save_count self.interval = interval self.repeat_delay = repeat_delay self.repeat = repeat self.blit = blit self.play = True self.fig, self.ax = plt.subplots() self.fig.set_size_inches(figsize) self.fig.set_dpi(figdpi) self.d = d self.patches = [] self.anim = None self.step_num = 0 self.step_min = 0 self.step_max = d['num_points'] self.is_running = True self.is_forward = True # button_pos = (0.125, 0.92) # playerax = self.fig.add_axes([pos[0], pos[1], 0.22, 0.04]) # divider = mpl_toolkits.axes_grid1.make_axes_locatable(playerax) # bax = divider.append_axes("right", size="80%", pad=0.05) # sax = divider.append_axes("right", size="80%", pad=0.05) # fax = divider.append_axes("right", size="80%", pad=0.05) # ofax = divider.append_axes("right", size="100%", pad=0.05) # # self.button_oneback = matplotlib.widgets.Button(playerax, label=u'$\u29CF$') # self.button_back = matplotlib.widgets.Button(bax, label=u'$\u25C0$') # self.button_stop = matplotlib.widgets.Button(sax, label=u'$\u25A0$') # self.button_forward = matplotlib.widgets.Button(fax, label=u'$\u25B6$') # self.button_oneforward = matplotlib.widgets.Button(ofax, label=u'$\u29D0$') # # self.button_oneback.on_clicked(self.step_back) # self.button_back.on_clicked(self.back) # self.button_stop.on_clicked(self.stop) # self.button_forward.on_clicked(self.forward) # self.button_oneforward.on_clicked(self.step_forward) # play_ax = self.fig.add_axes([button_pos[0], button_pos[1], 0.16, 0.04]) # divider = mpl_toolkits.axes_grid1.make_axes_locatable(play_ax) # pause_ax = divider.append_axes("right", size="100%", pad=0.05) # self.button_play = matplotlib.widgets.Button(play_ax, label=u'$\u25B6$') # self.button_pause = matplotlib.widgets.Button(pause_ax, label=u'$\u258B\u258B$') # self.button_play.on_clicked(self.on_play) # self.button_pause.on_clicked(self.on_pause) self.fig.canvas.mpl_connect('key_press_event', self.on_key_press) self.fig.canvas.mpl_connect('button_press_event', self.on_mouse_press) def init_func(self): r = 6 # mm, conveyor nose diameter self.ax.set_xlim(-self.d['num_pieces'] * self.d['piece_width'], self.d['travel_dist']) self.ax.set_ylim(-r, 2 * self.d['piece_width']) self.ax.set_aspect('equal') start, end = self.ax.get_xlim() self.ax.xaxis.set_ticks(np.arange(start, end, 5)) # Infeed conveyor self.ax.add_patch( pch.Rectangle( (-(self.d['num_pieces'] + 1) * self.d['piece_width'], -r), (self.d['num_pieces'] + 1) * d['piece_width'], r, fill=False, linewidth=0.5)) # Sep conveyor self.ax.add_patch( pch.Rectangle((0, -r), self.d['sep_conv_length'], r, fill=False, linewidth=0.5)) # Turn infeed conveyor self.ax.add_patch( pch.Rectangle((self.d['sep_conv_length'], -r), 1000, r, fill=False, linewidth=0.5)) # self.ax.set_axis_off() return [] def func(self, p): # draw the peices w = self.d['piece_width'] self.patches = [] for i in range(self.d['num_pieces']): self.patches.append( self.ax.add_patch( plt.Rectangle((-i * w - w + p[i], 0), w, w, animated=True, fill=False, linewidth=0.5))) return self.patches def update(self): for i in range(self.d['num_points']): # The input to 'func' yield self.d['p'][:, i] # while self.is_running: # self.step_num += self.is_forward - (not self.is_forward) # if self.step_min < self.step_num < self.step_max: # yield d['p'][:, self.step_num] # else: # self.stop() # yield d['p'][:, self.step_num] def run(self): self.anim = FuncAnimation(self.fig, self.func, frames=self.update, init_func=self.init_func, fargs=self.fargs, save_count=self.save_count, interval=self.interval, repeat=self.repeat, repeat_delay=self.repeat_delay, blit=self.blit) plt.show() def on_key_press(self, event): if event.key == '5': # print('pressed', event.key) if self.play: self.play ^= True # print('pause', self.play) self.anim.event_source.stop() else: self.play ^= True # print('play', self.play) self.anim.event_source.start() elif event.key == '6': # print('pressed', event.key) if not self.play: # is paused # print('step') self.anim._step() def on_mouse_press(self, event): # print('mouse pressed', event.button) if event.button == 1: # print('pressed', event.button) if self.play: self.play ^= True # print('pause', self.play) self.anim.event_source.stop() else: self.play ^= True # print('play', self.play) self.anim.event_source.start() elif event.button == 3: # print('pressed', event.button) if not self.play: # is paused # print('step') self.anim._step()
class Anim: def __init__(self, d, fargs=None, save_count=None, interval=200, repeat=None, repeat_delay=None, blit=None, figsize=(8, 6), figdpi=100): self.fargs = fargs self.save_count = save_count self.interval = interval self.repeat_delay = repeat_delay self.repeat = repeat self.blit = blit self.play = True self.fig, self.ax = plt.subplots() self.fig.set_size_inches(figsize) self.fig.set_dpi(figdpi) self.d = d self.patches = [] self.anim = None self.step_num = 0 self.step_min = 0 self.step_max = d['num_points'] self.is_running = True self.is_forward = True self.fig.canvas.mpl_connect('key_press_event', self.on_key_press) self.fig.canvas.mpl_connect('button_press_event', self.on_mouse_press) def init_func(self): pass def func(self, p): pass def update(self): for i in range(self.d['num_points']): # The input to 'func' yield self.d['p'][:, i] def run(self): self.anim = FuncAnimation(self.fig, self.func, frames=self.update, init_func=self.init_func, fargs=self.fargs, save_count=self.save_count, interval=self.interval, repeat=self.repeat, repeat_delay=self.repeat_delay, blit=self.blit) plt.show() def on_key_press(self, event): if event.key == '5': # print('pressed', event.key) if self.play: self.play ^= True # print('pause', self.play) self.anim.event_source.stop() else: self.play ^= True # print('play', self.play) self.anim.event_source.start() elif event.key == '6': # print('pressed', event.key) if not self.play: # is paused # print('step') self.anim._step() def on_mouse_press(self, event): # print('mouse pressed', event.button) if event.button == 1: # print('pressed', event.button) if self.play: self.play ^= True # print('pause', self.play) self.anim.event_source.stop() else: self.play ^= True # print('play', self.play) self.anim.event_source.start() elif event.button == 3: # print('pressed', event.button) if not self.play: # is paused # print('step') self.anim._step()