Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()