def toggle_selection(self): """Activate selection mode""" if self.canvas is None: return self.disconnect() key = next((key for key, a in self._actions.items() if a.isChecked()), None) if key is None or key == self._action_clicked: self._action_clicked = None if key is not None: self._actions[key].setChecked(False) else: if self.wand_action.isChecked() and self.wand_type == 'color': self.selector = PointOrRectangleSelector( self.ax, self.on_rect_select, rectprops=dict(fc='none'), lineprops=dict(c='none'), useblit=True) elif self.select_action.isChecked() and self.select_type == 'poly': self.selector = mwid.LassoSelector( self.ax, self.on_poly_select) else: self.selector = PointOrRectangleSelector( self.ax, self.on_rect_select, useblit=True) self.set_cursor_id = self.canvas.mpl_connect( 'axes_enter_event', self._on_axes_enter) self.reset_cursor_id = self.canvas.mpl_connect( 'axes_leave_event', self._on_axes_leave) self._action_clicked = next(key for key, a in self._actions.items() if a.isChecked()) self.toolbar.set_message(self.toolbar.mode)
def selectLassoROI(cube: pwsdt.ICBase, displayIndex: t_.Optional[int] = None, clim: t_.Sequence = None) -> np.ndarray: """ Allow the user to draw a `freehand` ROI on an image of the acquisition. Args: displayIndex: Display a particular z-slice of the array for mask drawing. If `None` then the mean along Z is displayed. Returns: An array of vertices of the polygon drawn. """ Verts = [None] if displayIndex is None: displayIndex = cube.data.shape[2]//2 fig, ax = plt.subplots() data = cube.data[:, :, displayIndex] ax.imshow(data, clim=[np.percentile(data, 1), np.percentile(data, 99)]) fig.suptitle("Close to accept ROI") def onSelect(verts): Verts[0] = verts l = widgets.LassoSelector(ax, onSelect, lineprops={'color': 'r'}) fig.show() while plt.fignum_exists(fig.number): fig.canvas.flush_events() return np.array(Verts[0])
def check_lasso_selector(**kwargs): ax = get_ax() def onselect(verts): ax._got_onselect = True assert verts == [(100, 100), (125, 125), (150, 150)] tool = widgets.LassoSelector(ax, onselect, **kwargs) do_event(tool, 'press', xdata=100, ydata=100, button=1) do_event(tool, 'onmove', xdata=125, ydata=125, button=1) do_event(tool, 'release', xdata=150, ydata=150, button=1) assert ax._got_onselect
def check_lasso_selector(**kwargs): fig, ax = plt.subplots(1, 1) ax = plt.gca() ax.plot([0, 200], [0, 200]) ax.figure.canvas.draw() def onselect(verts): ax._got_onselect = True assert verts == [(100, 100), (125, 125), (150, 150)] tool = widgets.LassoSelector(ax, onselect, **kwargs) event = get_event(ax, xdata=100, ydata=100, button=1) tool.press(event) event = get_event(ax, xdata=125, ydata=125, button=1) tool.onmove(event) event = get_event(ax, xdata=150, ydata=150, button=1) tool.release(event) assert ax._got_onselect