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)
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)
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)
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)
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)
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])
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)
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
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])
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)
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)