class PVSlicerTool(object): def __init__(self, widget=None): self.widget = widget self._slice_widget = None def _get_modes(self, axes): self._path = PathMode(axes, roi_callback=self._extract_callback) return [self._path] def _clear_path(self): self._path.clear() def _display_data_hook(self, data): if data is not None: self._path.enabled = data.ndim > 2 def _extract_callback(self, mode): """ Extract a PV-like slice, given a path traced on the widget """ vx, vy = mode.roi().to_polygon() self._build_from_vertices(vx, vy) def _build_from_vertices(self, vx, vy): pv_slice, x, y, wcs = _slice_from_path(vx, vy, self.widget.data, self.widget.attribute, self.widget.slice) if self._slice_widget is None: self._slice_widget = PVSliceWidget(image=pv_slice, wcs=wcs, image_client=self.widget.client, x=x, y=y, interpolation='nearest') self.widget._session.application.add_widget(self._slice_widget, label='Custom Slice') self._slice_widget.window_closed.connect(self._clear_path) else: self._slice_widget.set_image(image=pv_slice, wcs=wcs, x=x, y=y, interpolation='nearest') result = self._slice_widget result.axes.set_xlabel("Position Along Slice") result.axes.set_ylabel(_slice_label(self.widget.data, self.widget.slice)) result.show() def close(self): # close the tool widget if self._slice_widget: self._slice_widget.close()
def _get_modes(self, axes): self._path = PathMode(axes, roi_callback=self._extract_callback) return [self._path]