예제 #1
0
파일: pv_slicer.py 프로젝트: bmorris3/glue
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()
예제 #2
0
파일: pv_slicer.py 프로젝트: bmorris3/glue
 def _get_modes(self, axes):
     self._path = PathMode(axes, roi_callback=self._extract_callback)
     return [self._path]