Exemple #1
0
 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)            
Exemple #2
0
 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)
Exemple #3
0
 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)            
Exemple #4
0
    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()
Exemple #5
0
 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()    
Exemple #6
0
    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()