示例#1
0
    def __init__(self,
                 viewer,
                 on_move=None,
                 on_release=None,
                 on_enter=None,
                 maxdist=10,
                 rect_props=None):
        CanvasToolBase.__init__(self,
                                viewer,
                                on_move=on_move,
                                on_enter=on_enter,
                                on_release=on_release)

        props = dict(edgecolor=None, facecolor='r', alpha=0.15)
        props.update(rect_props if rect_props is not None else {})
        if props['edgecolor'] is None:
            props['edgecolor'] = props['facecolor']
        RectangleSelector.__init__(self,
                                   self.ax,
                                   lambda *args: None,
                                   rectprops=props)
        self.disconnect_events()  # events are handled by the viewer
        # Alias rectangle attribute, which is initialized in RectangleSelector.
        self._rect = self.to_draw
        self._rect.set_animated(True)

        self.maxdist = maxdist
        self.active_handle = None
        self._extents_on_press = None

        if on_enter is None:

            def on_enter(extents):
                print("(xmin=%.3g, xmax=%.3g, ymin=%.3g, ymax=%.3g)" % extents)

        self.callback_on_enter = on_enter

        props = dict(mec=props['edgecolor'])
        self._corner_order = ['NW', 'NE', 'SE', 'SW']
        xc, yc = self.corners
        self._corner_handles = ToolHandles(self.ax, xc, yc, marker_props=props)

        self._edge_order = ['W', 'N', 'E', 'S']
        xe, ye = self.edge_centers
        self._edge_handles = ToolHandles(self.ax,
                                         xe,
                                         ye,
                                         marker='s',
                                         marker_props=props)

        self.artists = [
            self._rect, self._corner_handles.artist, self._edge_handles.artist
        ]
        viewer.add_tool(self)
示例#2
0
    def __init__(self,
                 viewer,
                 on_move=None,
                 on_release=None,
                 on_enter=None,
                 maxdist=10,
                 line_props=None,
                 handle_props=None,
                 **kwargs):
        super(LineTool, self).__init__(viewer,
                                       on_move=on_move,
                                       on_enter=on_enter,
                                       on_release=on_release,
                                       **kwargs)

        props = dict(color='r', linewidth=1, alpha=0.4, solid_capstyle='butt')
        props.update(line_props if line_props is not None else {})
        self.linewidth = props['linewidth']
        self.maxdist = maxdist
        self._active_pt = None

        x = (0, 0)
        y = (0, 0)
        self._end_pts = np.transpose([x, y])

        self._line = lines.Line2D(x, y, visible=False, animated=True, **props)
        self.ax.add_line(self._line)

        self._handles = ToolHandles(self.ax, x, y, marker_props=handle_props)
        self._handles.set_visible(False)
        self.artists = [self._line, self._handles.artist]

        if on_enter is None:

            def on_enter(pts):
                x, y = np.transpose(pts)
                print("length = %0.2f" %
                      np.sqrt(np.diff(x)**2 + np.diff(y)**2))

        self.callback_on_enter = on_enter
        viewer.add_tool(self)