def addPolyLineROI(self,handlePositions): ''' Add Polygon ROI - Used for copy and load operations ''' roi = PolyLineROIcustom(handlePositions=handlePositions,removable=True) roi.setName('ROI-%i'% self.getROIid()) self.addItem(roi) # Add roi to viewbox self.rois.append(roi) # Add to list of rois self.selectROI(roi) self.sortROIs() self.setCurrentROIindex(roi) roi.translatable = True for seg in roi.segments: seg.setSelectable(True) for h in roi.handles: h['item'].setSelectable(True) # Setup signals roi.sigRemoveRequested.connect(self.removeROI) roi.sigCopyRequested.connect(self.copyROI) roi.sigSaveRequested.connect(self.saveROI)
def addPolyLineROI(self,handlePositions): roi = PolyLineROIcustom(handlePositions=handlePositions,removable=True) roi.setName('ROI-%i'% self.getROIid()) self.addItem(roi) # Add roi to viewbox self.rois.append(roi) # Add to list of rois self.selectROI(roi) self.sortROIs() self.setCurrentROIindex(roi) roi.translatable = True #roi.setAcceptedMouseButtons(QtCore.Qt.LeftButton or QtCore.Qt.RightButton) roi.setActive(True) for seg in roi.segments: seg.setSelectable(True) for h in roi.handles: h['item'].setSelectable(True) # Setup signals roi.sigClicked.connect(self.selectROI) roi.sigRegionChanged.connect(self.roiChanged) roi.sigRemoveRequested.connect(self.removeROI) roi.sigCopyRequested.connect(self.copyROI) roi.sigSaveRequested.connect(self.saveROI)
def addPolyLineROI(self, handlePositions): roi = PolyLineROIcustom(handlePositions=handlePositions, removable=True) roi.setName('ROI-%i' % self.getROIid()) self.addItem(roi) # Add roi to viewbox self.rois.append(roi) # Add to list of rois self.selectROI(roi) self.sortROIs() self.setCurrentROIindex(roi) roi.translatable = True #roi.setAcceptedMouseButtons(QtCore.Qt.LeftButton or QtCore.Qt.RightButton) roi.setActive(True) for seg in roi.segments: seg.setSelectable(True) for h in roi.handles: h['item'].setSelectable(True) # Setup signals roi.sigClicked.connect(self.selectROI) roi.sigRegionChanged.connect(self.roiChanged) roi.sigRemoveRequested.connect(self.removeROI) roi.sigCopyRequested.connect(self.copyROI) roi.sigSaveRequested.connect(self.saveROI)
def drawPolygonRoi(self, ev): "Function to draw a polygon ROI" roi = self.drawingROI pos = self.mapSceneToView(ev.scenePos()) if ev.button() == QtCore.Qt.LeftButton: if roi is None: roi = PolyLineROIcustom(removable=False) roi.setName( 'ROI-%i' % self.getROIid()) # Do this before self.selectROIs(roi) self.drawingROI = roi self.addItem(roi) # Add roi to viewbox self.rois.append(roi) # Add to list of rois self.selectROI(roi) self.sortROIs() self.setCurrentROIindex(roi) roi.translatable = False roi.addFreeHandle(pos) roi.addFreeHandle(pos) h = roi.handles[-1]['item'] h.scene().sigMouseMoved.connect(h.movePoint) else: h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.addFreeHandle(pos) h = roi.handles[-1]['item'] h.scene().sigMouseMoved.connect(h.movePoint) # Add a segment between the handles roi.addSegment(roi.handles[-2]['item'], roi.handles[-1]['item']) # Set segment and handles to non-selectable seg = roi.segments[-1] seg.setSelectable(False) for h in seg.handles: h['item'].setSelectable(False) elif (ev.button() == QtCore.Qt.MiddleButton) or \ (ev.button() == QtCore.Qt.RightButton and (roi==None or len(roi.segments)<3)): if roi != None: # Remove handle and disconnect from scene h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.removeHandle(h) # Removed roi from viewbox self.removeItem(roi) self.rois.pop(self.currentROIindex) self.setCurrentROIindex(None) # Exit ROI drawing mode self.endPolyRoiRequest() elif ev.button() == QtCore.Qt.RightButton: # Remove last handle h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.removeHandle(h) # Add segment to close ROI roi.addSegment(roi.handles[-1]['item'], roi.handles[0]['item']) # Setup signals roi.sigClicked.connect(self.selectROI) roi.sigRegionChanged.connect(self.roiChanged) roi.sigRemoveRequested.connect(self.removeROI) roi.sigCopyRequested.connect(self.copyROI) roi.sigSaveRequested.connect(self.saveROI) # Re-activate mouse clicks for all roi, segments and handles roi.removable = True roi.translatable = True for seg in roi.segments: seg.setSelectable(True) for h in roi.handles: h['item'].setSelectable(True) # Exit ROI drawing mode self.endPolyRoiRequest()
def drawPolygonRoi(self,ev): ''' Function to draw a Polygon ROI - Called directly by MouseClickEvent ''' roi = self.drawingROI pos = self.mapSceneToView(ev.scenePos()) # TO DRAW ROI if ev.button() == QtCore.Qt.LeftButton: if roi is None: # To start drawing a new roi roi = PolyLineROIcustom(removable = False) # Create new roi roi.setName('ROI-%i'% self.getROIid()) # Set name. Do this before self.selectROIs(roi) self.drawingROI = roi self.addItem(roi) # Add roi to viewbox self.rois.append(roi) # Add to list of rois self.selectROI(roi) # Make selected self.sortROIs() # Sort list of rois self.setCurrentROIindex(roi) # Make current roi.translatable = False # Deactivate translation during drawing roi.addFreeHandle(pos) # Add two handles on first click (1 fixed, 1 draggable) roi.addFreeHandle(pos) h = roi.handles[-1]['item'] # Get draggable handle h.scene().sigMouseMoved.connect(h.movePoint) # Connect signal to move handle with mouse else: # To continue drawing an existing roi h = roi.handles[-1]['item'] # Get last handle h.scene().sigMouseMoved.disconnect() # Make last handle non-draggable roi.addFreeHandle(pos) # Add new handle h = roi.handles[-1]['item'] # Get new handle h.scene().sigMouseMoved.connect(h.movePoint) # Make new handle draggable # Add a segment between the handles roi.addSegment(roi.handles[-2]['item'],roi.handles[-1]['item']) # Set segment and handles to non-selectable seg = roi.segments[-1] seg.setSelectable(False) for h in seg.handles: h['item'].setSelectable(False) # TO STOP DRAWING ROI elif (ev.button() == QtCore.Qt.MiddleButton) or \ (ev.button() == QtCore.Qt.RightButton and (roi==None or len(roi.segments)<3)): if roi!=None: # Remove handle and disconnect from scene h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.removeHandle(h) # Removed roi from viewbox self.removeItem(roi) self.rois.pop(self.currentROIindex) self.setCurrentROIindex(None) # Exit ROI drawing mode self.endPolyRoiRequest() # TO COMPLETE ROI elif ev.button() == QtCore.Qt.RightButton: # Remove last handle h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.removeHandle(h) # Add segment to close ROI roi.addSegment(roi.handles[-1]['item'],roi.handles[0]['item']) # Setup signals on completed roi roi.sigRemoveRequested.connect(self.removeROI) roi.sigCopyRequested.connect(self.copyROI) roi.sigSaveRequested.connect(self.saveROI) # Re-activate mouse clicks for all roi, segments and handles roi.removable = True roi.translatable = True for seg in roi.segments: seg.setSelectable(True) for h in roi.handles: h['item'].setSelectable(True) # Exit ROI drawing mode self.endPolyRoiRequest()
def drawPolygonRoi(self,ev): "Function to draw a polygon ROI" roi = self.drawingROI pos = self.mapSceneToView(ev.scenePos()) if ev.button() == QtCore.Qt.LeftButton: if roi is None: roi = PolyLineROIcustom(removable = False) roi.setName('ROI-%i'% self.getROIid()) # Do this before self.selectROIs(roi) self.drawingROI = roi self.addItem(roi) # Add roi to viewbox self.rois.append(roi) # Add to list of rois self.selectROI(roi) self.sortROIs() self.setCurrentROIindex(roi) roi.translatable = False roi.addFreeHandle(pos) roi.addFreeHandle(pos) h = roi.handles[-1]['item'] h.scene().sigMouseMoved.connect(h.movePoint) else: h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.addFreeHandle(pos) h = roi.handles[-1]['item'] h.scene().sigMouseMoved.connect(h.movePoint) # Add a segment between the handles roi.addSegment(roi.handles[-2]['item'],roi.handles[-1]['item']) # Set segment and handles to non-selectable seg = roi.segments[-1] seg.setSelectable(False) for h in seg.handles: h['item'].setSelectable(False) elif (ev.button() == QtCore.Qt.MiddleButton) or \ (ev.button() == QtCore.Qt.RightButton and (roi==None or len(roi.segments)<3)): if roi!=None: # Remove handle and disconnect from scene h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.removeHandle(h) # Removed roi from viewbox self.removeItem(roi) self.rois.pop(self.currentROIindex) self.setCurrentROIindex(None) # Exit ROI drawing mode self.endPolyRoiRequest() elif ev.button() == QtCore.Qt.RightButton: # Remove last handle h = roi.handles[-1]['item'] h.scene().sigMouseMoved.disconnect() roi.removeHandle(h) # Add segment to close ROI roi.addSegment(roi.handles[-1]['item'],roi.handles[0]['item']) # Setup signals roi.sigClicked.connect(self.selectROI) roi.sigRegionChanged.connect(self.roiChanged) roi.sigRemoveRequested.connect(self.removeROI) roi.sigCopyRequested.connect(self.copyROI) roi.sigSaveRequested.connect(self.saveROI) # Re-activate mouse clicks for all roi, segments and handles roi.removable = True roi.translatable = True for seg in roi.segments: seg.setSelectable(True) for h in roi.handles: h['item'].setSelectable(True) # Exit ROI drawing mode self.endPolyRoiRequest()