Exemplo n.º 1
0
 def __init__(self, pos, size, **args):
     ROI.__init__(self, pos, size, **args)
     self.aspectLocked = True
     self.hasData = False
     self.index = None
     self.currentPen = pg.mkPen(color=(255,0,255),width=2.5)
     self.setPen(self.currentPen)
Exemplo n.º 2
0
 def __init__(self, pos, size, **args):
     ROI.__init__(self, pos, size, **args)
     self.aspectLocked = True
     self.hasData = False
     self.index = None
     self.currentPen = pg.mkPen(color=(255, 0, 255), width=2.5)
     self.setPen(self.currentPen)
Exemplo n.º 3
0
 def constructROI(self, start, end):
     if self._roi:
         self._viewBox.removeItem(self._roi)
     dims = end - start
     self._roi = ROI(start, dims, pen={'color': '#00FF00'})
     self._roi.addScaleHandle([0, 0], [1, 1])
     self._roi.addScaleHandle([1, 1], [0, 0])
     self._roi.setZValue(10)
     self._viewBox.addItem(self._roi)
Exemplo n.º 4
0
 def __init__(self, scalable=False):
     #QtGui.QGraphicsRectItem.__init__(self, 0, 0, size[0], size[1])
     ROI.__init__(self, [0,0], [1,1])
     center = [0.5, 0.5]
         
     if scalable:
         self.addScaleHandle([1, 1], center, lockAspect=True)
         self.addScaleHandle([0, 0], center, lockAspect=True)
     self.addRotateHandle([0, 1], center)
     self.addRotateHandle([1, 0], center)
Exemplo n.º 5
0
    def __init__(self, scalable=False):
        #QtGui.QGraphicsRectItem.__init__(self, 0, 0, size[0], size[1])
        ROI.__init__(self, [0, 0], [1, 1])
        center = [0.5, 0.5]

        if scalable:
            self.addScaleHandle([1, 1], center, lockAspect=True)
            self.addScaleHandle([0, 0], center, lockAspect=True)
        self.addRotateHandle([0, 1], center)
        self.addRotateHandle([1, 0], center)
Exemplo n.º 6
0
 def __init__(self, pos, size, **args):
     ROI.__init__(self, pos, size, **args)
     self.addTranslateHandle([0.5, 0.5])
     self.addScaleHandle([1, 1], [0, 0])
     self.addScaleHandle([0, 0], [1, 1])
     self.addScaleHandle([1, 0.5], [0, 0.5])
     self.addScaleHandle([0.5, 1], [0.5, 0])
     self.addScaleHandle([0, 0.5], [1, 0.5])
     self.addScaleHandle([0.5, 0], [0.5, 1])
     self.addScaleHandle([1, 0], [0, 1])
     self.addScaleHandle([0, 1], [1, 0])
Exemplo n.º 7
0
class ImageView(View):
    '''
    classdocs
    '''

    _sigROISet = pyqtSignal(object)

    def __init__(self, *args, **kwargs):
        '''
        Constructor
        '''
        View.__init__(self, *args, **kwargs)
        widget = GraphicsLayoutWidget()
        self._viewBox = widget.addViewBox(lockAspect=True, invertY=True)
        self._imgItem = CustomImageItem()
        self._viewBox.addItem(self._imgItem)
        self.addWidget(widget)
        self.setTitle("Lensed Image")
        self._imgItem.sigPressed.connect(self.pressed_slot)
        self._imgItem.sigDragged.connect(self.dragged_slot)
        self._imgItem.sigReleased.connect(self.released_slot)
        self.roiStart = None
        self.roiEnd = None
        self.dragStarted = False
        self._roi = None
        self.addSignals(ROI_set=self._sigROISet)

    def setImage(self, img):
        assert isinstance(
            img, np.ndarray
        ), "ImageView can only display numpy arrays of RGB values"
        self._imgItem.setImage(img)

    def pressed_slot(self, pos):
        self.roiStart = np.array([pos.x(), pos.y()])

    def dragged_slot(self, pos):
        self.roiEnd = np.array([pos.x(), pos.y()])
        self.constructROI(self.roiStart, self.roiEnd)

    def released_slot(self, pos):
        self.roiEnd = np.array([pos.x(), pos.y()])
        self.constructROI(self.roiStart, self.roiEnd)

    def constructROI(self, start, end):
        if self._roi:
            self._viewBox.removeItem(self._roi)
        dims = end - start
        self._roi = ROI(start, dims, pen={'color': '#00FF00'})
        self._roi.addScaleHandle([0, 0], [1, 1])
        self._roi.addScaleHandle([1, 1], [0, 0])
        self._roi.setZValue(10)
        self._viewBox.addItem(self._roi)
Exemplo n.º 8
0
    def getArrayRegion(self, data, img, axes=(0, 1), **kwds):
        """
        This is the custom getArrayRegion to remove the exception from line 2015 of actual getArrayRegion from ROI of pyqtgraph
        """
        br = self.boundingRect()
        sliced = ROI.getArrayRegion(self,
                                    data,
                                    img,
                                    axes=axes,
                                    fromBoundingRect=True,
                                    **kwds)

        if img.axisOrder == 'col-major':
            mask = self.renderShapeMask(sliced.shape[axes[0]],
                                        sliced.shape[axes[1]])
        else:
            mask = self.renderShapeMask(sliced.shape[axes[1]],
                                        sliced.shape[axes[0]])
            mask = mask.T

        # reshape mask to ensure it is applied to the correct data axes
        shape = [1] * data.ndim
        shape[axes[0]] = sliced.shape[axes[0]]
        shape[axes[1]] = sliced.shape[axes[1]]
        mask = mask.reshape(shape)

        return sliced * mask
Exemplo n.º 9
0
    def __init__(self, pos1, pos2, **args):
        """ constructor

        :param pos1: start position
        :type pos1: [float, float]
        :param pos2: end position
        :type pos2: [float, float]
        :param args: dictionary with ROI parameters
        :type args: :obj:`dict`<:obj:`str`, :obj:`any`>
        """

        pos1 = _pg.Point(pos1)
        pos2 = _pg.Point(pos2)
        d = pos2 - pos1
        l = d.length()
        ang = _pg.Point(1, 0).angle(d)

        ROI.__init__(self, pos1, size=_pg.Point(l, 1), angle=ang, **args)
        self.addScaleRotateHandle([0, 0.5], [1, 0.5])
        self.addScaleRotateHandle([1, 0.5], [0, 0.5])
Exemplo n.º 10
0
    def __addROI(self, coords=None):
        """ adds ROIs

        :param coords: roi coordinates
        :type coords: :obj:`list`
                 < [:obj:`float`, :obj:`float`, :obj:`float`, :obj:`float`] >
        """
        if not coords or not isinstance(coords, list) or len(coords) != 4:
            pnt = 10 * len(self.__roi)
            sz = 50
            coords = [pnt, pnt, pnt + sz, pnt + sz]
            spnt = _pg.Point(sz, sz)
        else:
            pnt = _pg.Point(coords[0], coords[1])
            spnt = _pg.Point(coords[2] - coords[0], coords[3] - coords[1])
        self.__roi.append(ROI(pnt, spnt))
        self.__roi[-1].addScaleHandle([1, 1], [0, 0])
        self.__roi[-1].addScaleHandle([0, 0], [1, 1])
        self.__viewbox.addItem(self.__roi[-1])

        self.__rois.coords.append(coords)
Exemplo n.º 11
0
    def __init__(self, parent=None):
        """ constructor

        :param parent: parent object
        :type parent: :class:`PyQt4.QtCore.QObject`
        """
        _pg.GraphicsLayoutWidget.__init__(self, parent)
        #: (:class:`PyQt4.QtGui.QLayout`) the main layout
        self.__layout = self.ci

        #: (:class:`lavuelib.displayParameters.AxesParameters`)
        #:            axes parameters
        self.__lines = displayParameters.CrossLinesParameters()
        #: (:class:`lavuelib.displayParameters.AxesParameters`)
        #:            axes parameters
        self.__axes = displayParameters.AxesParameters()
        #: (:class:`lavuelib.displayParameters.ROIsParameters`)
        #:                rois parameters
        self.__rois = displayParameters.ROIsParameters()
        #: (:class:`lavuelib.displayParameters.CutsParameters`)
        #:                 cuts parameters
        self.__cuts = displayParameters.CutsParameters()
        #: (:class:`lavuelib.displayParameters.IntensityParameters`)
        #:                  intensity parameters
        self.__intensity = displayParameters.IntensityParameters()

        #: (:class:`numpy.ndarray`) data to displayed in 2d widget
        self.__data = None
        #: (:class:`numpy.ndarray`) raw data to cut plots
        self.__rawdata = None

        #: (:class:`pyqtgraph.ImageItem`) image item
        self.__image = _pg.ImageItem()

        #: (:class:`pyqtgraph.ViewBox`) viewbox item
        self.__viewbox = self.__layout.addViewBox(row=0, col=1)
        #: (:obj:`bool`) crooshair locked flag
        self.__crosshairlocked = False
        self.__viewbox.addItem(self.__image)
        #: (:obj:`float`) current x-position
        self.__xdata = 0
        #: (:obj:`float`) current y-position
        self.__ydata = 0
        #: (:obj:`bool`) auto display level flag
        self.__autodisplaylevels = True
        #: (:obj:`bool`) auto down sample
        self.__autodownsample = True
        #: ([:obj:`float`, :obj:`float`]) minimum and maximum intensity levels
        self.__displaylevels = [None, None]

        #: (:class:`PyQt4.QtCore.QSignalMapper`) current roi mapper
        self.__currentroimapper = QtCore.QSignalMapper(self)
        #: (:class:`PyQt4.QtCore.QSignalMapper`) roi region mapper
        self.__roiregionmapper = QtCore.QSignalMapper(self)
        #: (:class:`PyQt4.QtCore.QSignalMapper`) current cut mapper
        self.__currentcutmapper = QtCore.QSignalMapper(self)
        #: (:class:`PyQt4.QtCore.QSignalMapper`) cut region mapper
        self.__cutregionmapper = QtCore.QSignalMapper(self)

        #: (:class:`PyQt4.QtGui.QAction`) set aspect ration locked action
        self.__setaspectlocked = QtGui.QAction(
            "Set Aspect Locked", self.__viewbox.menu)
        self.__setaspectlocked.setCheckable(True)
        if _VMAJOR == '0' and int(_VMINOR) < 10 and int(_VPATCH) < 9:
            self.__viewbox.menu.axes.insert(0, self.__setaspectlocked)
        self.__viewbox.menu.addAction(self.__setaspectlocked)

        #: (:class:`PyQt4.QtGui.QAction`) view one to one pixel action
        self.__viewonetoone = QtGui.QAction(
            "View 1:1 pixels", self.__viewbox.menu)
        self.__viewonetoone.triggered.connect(self._oneToOneRange)
        if _VMAJOR == '0' and int(_VMINOR) < 10 and int(_VPATCH) < 9:
            self.__viewbox.menu.axes.insert(0, self.__viewonetoone)
        self.__viewbox.menu.addAction(self.__viewonetoone)

        #: (:class:`pyqtgraph.AxisItem`) left axis
        self.__leftaxis = _pg.AxisItem('left')
        self.__leftaxis.linkToView(self.__viewbox)
        self.__layout.addItem(self.__leftaxis, row=0, col=0)

        #: (:class:`pyqtgraph.AxisItem`) bottom axis
        self.__bottomAxis = _pg.AxisItem('bottom')
        self.__bottomAxis.linkToView(self.__viewbox)
        self.__layout.addItem(self.__bottomAxis, row=1, col=1)

        self.__layout.scene().sigMouseMoved.connect(self.mouse_position)
        self.__layout.scene().sigMouseClicked.connect(self.mouse_click)

        #: (:class:`pyqtgraph.InfiniteLine`)
        #:                 vertical line of the mouse position
        self.__vLine = _pg.InfiniteLine(
            angle=90, movable=False, pen=(255, 0, 0))
        #: (:class:`pyqtgraph.InfiniteLine`)
        #:                   horizontal line of the mouse position
        self.__hLine = _pg.InfiniteLine(
            angle=0, movable=False, pen=(255, 0, 0))
        self.__viewbox.addItem(self.__vLine, ignoreBounds=True)
        self.__viewbox.addItem(self.__hLine, ignoreBounds=True)

        #: (:obj:`list` <:class:`pyqtgraph.graphicsItems.ROI`>)
        #:            list of roi widgets
        self.__roi = []
        self.__roi.append(ROI(0, _pg.Point(50, 50)))
        self.__roi[0].addScaleHandle([1, 1], [0, 0])
        self.__roi[0].addScaleHandle([0, 0], [1, 1])
        self.__viewbox.addItem(self.__roi[0])
        self.__roi[0].hide()

        #: (:obj:`list` <:class:`pyqtgraph.graphicsItems.ROI`>)
        #:        list of cut widgets
        self.__cut = []
        self.__cut.append(SimpleLineROI([10, 10], [60, 10], pen='r'))
        self.__viewbox.addItem(self.__cut[0])
        self.__cut[0].hide()

        self.__setaspectlocked.triggered.connect(self.emitAspectLockedToggled)

        self.__roiregionmapper.mapped.connect(self.changeROIRegion)
        self.__currentroimapper.mapped.connect(self._emitROICoordsChanged)
        self._getROI().sigHoverEvent.connect(
            self.__currentroimapper.map)
        self._getROI().sigRegionChanged.connect(
            self.__roiregionmapper.map)
        self.__currentroimapper.setMapping(self._getROI(), 0)
        self.__roiregionmapper.setMapping(self._getROI(), 0)

        self.__cutregionmapper.mapped.connect(self.changeCutRegion)
        self.__currentcutmapper.mapped.connect(self._emitCutCoordsChanged)
        self._getCut().sigHoverEvent.connect(
            self.__currentcutmapper.map)
        self._getCut().sigRegionChanged.connect(
            self.__cutregionmapper.map)
        self.__currentcutmapper.setMapping(self._getCut(), 0)
        self.__cutregionmapper.setMapping(self._getCut(), 0)