Ejemplo n.º 1
0
 def _draw_poly(xy, color, alpha, ax):
     poly = Polygon(xy, closed=True, fc=color, alpha=alpha)
     poly.set_fc(color)
     ax.add_patch(poly)
Ejemplo n.º 2
0
class PolyRegionEditor(uiutils.UI):

    def __init__(self, img, prj=None, max_ds=10, current_folder=None):
        self.max_ds = max_ds
        self.showverts = True
        self.current_folder = current_folder

        uiutils.UI.__init__(self, 750, 600, "PolyRegion Editor")

        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        canva_box = QtGui.QHBoxLayout()
        vbox.addLayout(canva_box)

        self.canvas = plotutils.BaseCustomCanvas()
        canva_box.addWidget(self.canvas)

        ctl = QtGui.QHBoxLayout()
        vbox.addLayout(ctl)

        ctl.addWidget(plotutils.NavigationToolbar(self.canvas, self))

        self.title_entry = uiutils.EntryDescription("Title")
        ctl.addWidget(self.title_entry)

        self.color_entry = uiutils.EntryDescription("Color")
        ctl.addWidget(self.color_entry)

        save_bn = QtGui.QPushButton("Save")
        save_bn.clicked.connect(self.on_save_clicked)
        ctl.addWidget(save_bn)

        load_bn = QtGui.QPushButton("Load")
        load_bn.clicked.connect(self.on_load_clicked)
        ctl.addWidget(load_bn)

        save_bn = QtGui.QPushButton("New")
        save_bn.clicked.connect(self.on_new_clicked)
        ctl.addWidget(save_bn)

        self.ax = self.canvas.figure.subplots()

        if prj is None:
            prj = img.get_projection()

        self.prj = prj
        self.img = img

        plotutils.imshow_image(self.ax, self.img, projection=self.prj, title=False)

        self.poly = Polygon([[0, 0]], animated=True,
                    fc='b', ec='none', alpha=0.4)

        self.ax.add_patch(self.poly)
        self.ax.set_clip_on(False)
        self.ax.set_title("Click and drag a point to move it; "
                     "'i' to insert; 'd' to delete.")

        x, y = zip(*self.poly.xy)
        self.line = plt.Line2D(x, y, color='none', marker='o', mfc='r',
                               alpha=0.8, animated=True, lw=2, markersize=self.max_ds)
        self._update_line()
        self.ax.add_line(self.line)

        self.poly.add_callback(self.poly_changed)
        self._ind = None # the active vert

        canvas = self.poly.figure.canvas
        canvas.mpl_connect('draw_event', self.draw_callback)
        canvas.mpl_connect('button_press_event', self.button_press_callback)
        canvas.mpl_connect('button_release_event', self.button_release_callback)
        canvas.mpl_connect('key_press_event', self.key_press_callback)
        canvas.mpl_connect('motion_notify_event', self.motion_notify_callback)
        self.canvas = canvas

        self.load_default()

        self.canvas.setFocus()

    def get_axes(self):
        return self.ax

    def load_poly_region(self, poly_region):
        self.title_entry.set_text(poly_region.title)
        self.color_entry.set_text(poly_region.color)
        self.poly.set_fc(poly_region.color)
        vertices = list(poly_region.vertices)
        vertices.append(vertices[0])
        self.poly.xy = vertices
        self._update_line()
        self.canvas.draw()

    def load_default(self):
        default_poly_region = imgutils.PolyRegion.default_from_ax(self.ax)
        self.load_poly_region(default_poly_region)

    def on_load_clicked(self, bn):
        filename = uiutils.open_file(parent=self, current_folder=self.current_folder)
        if filename is not None:
            try:
                poly_region = imgutils.PolyRegion.from_file(filename, self.img.get_coordinate_system())
                self.load_poly_region(poly_region)
            except Exception, e:
                msg = "Failed to load region %s\n%s" % (filename, e)
                print msg
                uiutils.error_msg(msg, self)
Ejemplo n.º 3
0
class PolyRegionEditor(uiutils.UI):

    def __init__(self, img, prj=None, max_ds=10, current_folder=None):
        self.max_ds = max_ds
        self.showverts = True
        self.current_folder = current_folder

        uiutils.UI.__init__(self, 750, 600, "PolyRegion Editor")

        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        canva_box = QtGui.QHBoxLayout()
        vbox.addLayout(canva_box)

        self.canvas = plotutils.BaseCustomCanvas()
        canva_box.addWidget(self.canvas)

        ctl = QtGui.QHBoxLayout()
        vbox.addLayout(ctl)

        ctl.addWidget(plotutils.NavigationToolbar(self.canvas, self))

        self.title_entry = uiutils.EntryDescription("Title")
        ctl.addWidget(self.title_entry)

        self.color_entry = uiutils.EntryDescription("Color")
        ctl.addWidget(self.color_entry)

        save_bn = QtGui.QPushButton("Save")
        save_bn.clicked.connect(self.on_save_clicked)
        ctl.addWidget(save_bn)

        load_bn = QtGui.QPushButton("Load")
        load_bn.clicked.connect(self.on_load_clicked)
        ctl.addWidget(load_bn)

        save_bn = QtGui.QPushButton("New")
        save_bn.clicked.connect(self.on_new_clicked)
        ctl.addWidget(save_bn)

        self.ax = self.canvas.figure.subplots()

        if prj is None:
            prj = img.get_projection()

        self.prj = prj
        self.img = img

        plotutils.imshow_image(self.ax, self.img, projection=self.prj, title=False)

        self.poly = Polygon([[0, 0]], animated=True,
                            fc='b', ec='none', alpha=0.4)

        self.ax.add_patch(self.poly)
        self.ax.set_clip_on(False)
        self.ax.set_title("Click and drag a point to move it; "
                          "'i' to insert; 'd' to delete.")

        x, y = zip(*self.poly.xy)
        self.line = plt.Line2D(x, y, color='none', marker='o', mfc='r',
                               alpha=0.8, animated=True, lw=2, markersize=self.max_ds)
        self._update_line()
        self.ax.add_line(self.line)

        self.poly.add_callback(self.poly_changed)
        self._ind = None  # the active vert

        canvas = self.poly.figure.canvas
        canvas.mpl_connect('draw_event', self.draw_callback)
        canvas.mpl_connect('button_press_event', self.button_press_callback)
        canvas.mpl_connect('button_release_event', self.button_release_callback)
        canvas.mpl_connect('key_press_event', self.key_press_callback)
        canvas.mpl_connect('motion_notify_event', self.motion_notify_callback)
        self.canvas = canvas

        self.load_default()

        self.canvas.setFocus()

    def get_axes(self):
        return self.ax

    def load_poly_region(self, poly_region):
        self.title_entry.set_text(poly_region.title)
        self.color_entry.set_text(poly_region.color)
        self.poly.set_fc(poly_region.color)
        vertices = list(poly_region.vertices)
        vertices.append(vertices[0])
        self.poly.xy = vertices
        self._update_line()
        self.canvas.draw()

    def load_default(self):
        default_poly_region = imgutils.PolyRegion.default_from_ax(self.ax)
        self.load_poly_region(default_poly_region)

    def on_load_clicked(self, bn):
        filename = uiutils.open_file(parent=self, current_folder=self.current_folder)
        if filename is not None:
            try:
                poly_region = imgutils.PolyRegion.from_file(filename, self.img.get_coordinate_system())
                self.load_poly_region(poly_region)
            except Exception, e:
                msg = "Failed to load region %s\n%s" % (filename, e)
                print msg
                uiutils.error_msg(msg, self)