def createUserInterface(self): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # Place Tracker Position # placeTrackerPositionButton = qt.QPushButton("Add tracker position") # placeTrackerPositionButton.toolTip = "Add a tracker position to the list" # self.__layout.addWidget(placeTrackerPositionButton) # placeTrackerPositionButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) # # # Load a tracker list # loadTrackerListButton = qt.QPushButton("Test spatial points lists creation") # loadTrackerListButton.toolTip = "Load spatial points to test registration" # self.__layout.addWidget(loadTrackerListButton) # loadTrackerListButton.connect('clicked(bool)', self.onLoadSpatialPointsListClicked) self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(True) self.fiducialsWidget.placeFiducialButton.setVisible(False) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) #connect signals and slots self.fiducialsWidget.placeSpatialButton.connect( 'clicked(bool)', self.onPlaceTrackerPositionButtonClicked) self.updateWidgetFromParameters(self.parameterNode()) self.updateGeometry() qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") self.fiducialsWidget.sizeHint print("Fiducials Widget size :") self.fiducialsWidget.size print("Spatial fiducials step size Hint:") print self.sizeHint print("Spatial fiducials step size") print self.size
def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # BUTTONS -------------------------------------------------------------------- # This is commented out and the buttons are in the UI from the designer # # #layout for the buttons # self.buttonsLayout = qt.QHBoxLayout() # self.__layout.addLayout(self.buttonsLayout, 1) # # # Place fiducial # placeFiducialButtom = qt.QPushButton("Place fiducial") # placeFiducialButtom.toolTip = "Add a fiducial to the list" # self.buttonsLayout.addWidget(placeFiducialButtom) # placeFiducialButtom.connect('clicked(bool)', self.onPlaceFiducialButtomClicked) # # # Spacer # self.buttonsLayout.addStretch() self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(False) self.fiducialsWidget.placeFiducialButton.setVisible(True) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") print self.fiducialsWidget.sizeHint print("Fiducials Widget size :") print self.fiducialsWidget.size print("Image fiducials step size Hint:") print self.sizeHint print("Image fiducials step size") print self.size
def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # BUTTONS -------------------------------------------------------------------- # This is commented out and the buttons are in the UI from the designer # # #layout for the buttons # self.buttonsLayout = qt.QHBoxLayout() # self.__layout.addLayout(self.buttonsLayout, 1) # # # Place fiducial # placeFiducialButtom = qt.QPushButton("Place fiducial") # placeFiducialButtom.toolTip = "Add a fiducial to the list" # self.buttonsLayout.addWidget(placeFiducialButtom) # placeFiducialButtom.connect('clicked(bool)', self.onPlaceFiducialButtomClicked) # # # Spacer # self.buttonsLayout.addStretch() self.fiducialsList = FiducialsList() self.fiducialsList.setPlaceImageFiducialStep(True) self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(False) self.fiducialsWidget.placeFiducialButton.setVisible(True) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(3, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") print self.fiducialsWidget.sizeHint print("Fiducials Widget size :") print self.fiducialsWidget.size print("Image fiducials step size Hint:") print self.sizeHint print("Image fiducials step size") print self.size
def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # Place Tracker Position # placeTrackerPositionButton = qt.QPushButton("Add tracker position") # placeTrackerPositionButton.toolTip = "Add a tracker position to the list" # self.__layout.addWidget(placeTrackerPositionButton) # placeTrackerPositionButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) # # # Load a tracker list # loadTrackerListButton = qt.QPushButton("Test spatial points lists creation") # loadTrackerListButton.toolTip = "Load spatial points to test registration" # self.__layout.addWidget(loadTrackerListButton) # loadTrackerListButton.connect('clicked(bool)', self.onLoadSpatialPointsListClicked) self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(True) self.fiducialsWidget.placeFiducialButton.setVisible(False) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) #connect signals and slots self.fiducialsWidget.placeSpatialButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) self.updateWidgetFromParameters(self.parameterNode()) self.updateGeometry() qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") self.fiducialsWidget.sizeHint print("Fiducials Widget size :") self.fiducialsWidget.size print("Spatial fiducials step size Hint:") print self.sizeHint print("Spatial fiducials step size") print self.size
class CaptureSpatialPositionsStep(USGuidedStep): def __init__(self, stepid): self.initialize(stepid) self.setName('2. Capture spatial positions step') #self.setDescription( 'Place fiducials using the tracker' ) self.__parent = super(CaptureSpatialPositionsStep, self) self.numberOfAcquiredSpatialPositions = 0 def createUserInterface(self): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # Place Tracker Position # placeTrackerPositionButton = qt.QPushButton("Add tracker position") # placeTrackerPositionButton.toolTip = "Add a tracker position to the list" # self.__layout.addWidget(placeTrackerPositionButton) # placeTrackerPositionButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) # # # Load a tracker list # loadTrackerListButton = qt.QPushButton("Test spatial points lists creation") # loadTrackerListButton.toolTip = "Load spatial points to test registration" # self.__layout.addWidget(loadTrackerListButton) # loadTrackerListButton.connect('clicked(bool)', self.onLoadSpatialPointsListClicked) self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(True) self.fiducialsWidget.placeFiducialButton.setVisible(False) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) #connect signals and slots self.fiducialsWidget.placeSpatialButton.connect( 'clicked(bool)', self.onPlaceTrackerPositionButtonClicked) self.updateWidgetFromParameters(self.parameterNode()) self.updateGeometry() qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") self.fiducialsWidget.sizeHint print("Fiducials Widget size :") self.fiducialsWidget.size print("Spatial fiducials step size Hint:") print self.sizeHint print("Spatial fiducials step size") print self.size def killButton(self): # hide useless button bl = slicer.util.findChildren(text='ReportROI') if len(bl): bl[0].hide() def validate(self, desiredBranchId): ''' ''' self.__parent.validationSucceeded(desiredBranchId) print( "We are in the validate function of CaptureSpatialPositionsStepStep" ) def onEntry(self, comingFrom, transitionType): super(CaptureSpatialPositionsStep, self).onEntry(comingFrom, transitionType) self.updateWidgetFromParameters(self.parameterNode()) pNode = self.parameterNode() pNode.SetParameter('currentStep', self.stepid) print( "We are in the onEntry function of CaptureSpatialPositionsStepStep coming from:" ) print comingFrom.name() qt.QTimer.singleShot(0, self.killButton) def onExit(self, goingTo, transitionType): self.doStepProcessing() super(CaptureSpatialPositionsStep, self).onExit(goingTo, transitionType) print( "We are in the onExit function of CaptureSpatialPositionsStepStep") def updateWidgetFromParameters(self, parameterNode): print("We are in the place fiducials step") self.fiducialsList.updateSpatialFiducialsList() #self.updateTrackerPointsList() def doStepProcessing(self): # calculate the transform to align the ROI in the next step with the # baseline volume pNode = self.parameterNode() # def onPlaceTrackerPositionButtonClicked(self): # self.logic.recordTrackerPosition() # def onLoadSpatialPointsListClicked(self): self.logic.addFiducialsToTrackerList() def onPlaceTrackerPositionButtonClicked(self): fiducialName = "F" + str(self.numberOfAcquiredSpatialPositions) positionRecorded = self.logic.captureSpatialsPositions(fiducialName) path = slicer.modules.stylusbasedusprobecalibration.path modulePath = os.path.dirname(path) if positionRecorded == True: #get the most recent node (the last) in the Tracker Points List #trackerNode = slicer.util.getNode(fiducialName+"-Tracker") # trackerNode = self.logic.getFiducialNode('Tracker Points List', -1) # # # # Associate the fiducial and the tracker position # # We remove the previous (if exist) tracker node # # and we put the new tracker node ID in the table and check the row # currentItem = self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 4) # if currentItem is None: # self.fiducialsList.addNewEmptyRow(self.numberOfAcquiredSpatialPositions) # # currentItem = self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 4) # # self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 3).setText(trackerNode.GetName()) # self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 4).setText(trackerNode.GetID()) # self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 0).setCheckState(2) self.fiducialsList.updateFiducialsList("Tracker Points List") soundFile = os.path.join(modulePath, "sounds/notify.wav") sound = qt.QSound(soundFile) sound.play() self.numberOfAcquiredSpatialPositions += 1 else: soundFile = os.path.join(modulePath, "sounds/critico.wav") #sound=qt.QSound("C:\Users\Usuario\devel\slicelets\USGuidedProcedure\sounds\critico.wav") sound = qt.QSound(soundFile) sound.play() def updateTrackerPointsList(self): #clear list #self.fiducialsWidget.fiducialsList.clear() #raise this flag to ignore change events in the table, the flag is lowered at the end of this method self.updatingList = True # get the nodes fiducialListNode = slicer.util.getNode("Fiducials List") trackerListNode = slicer.util.getNode("Tracker Points List") # clear the list of tracker points trackerListNode.RemoveChildrenNodes() # create as many tracker nodes as fiducials saml = slicer.modules.annotations.logic() saml.SetActiveHierarchyNodeID(trackerListNode.GetID()) for childrenIndex in xrange( fiducialListNode.GetNumberOfChildrenNodes()): fidHierarchyNode = fiducialListNode.GetNthChildNode(childrenIndex) fidNode = fidHierarchyNode.GetAssociatedNode() fidPos = [0, 0, 0] dummy = fidNode.GetFiducialCoordinates(fidPos) fidName = fidNode.GetName() fidID = fidNode.GetID() trackerNode = slicer.vtkMRMLAnnotationFiducialNode() trackerNode.SetFiducialWorldCoordinates(fidPos) trackerNode.SetName(fidName + '-Tracker') slicer.mrmlScene.AddNode(trackerNode) self.updatingList = False
class PlaceSpatialFiducialsStep( USGuidedStep ) : def __init__( self, stepid ): self.initialize( stepid ) self.setName( '3. Place spatial Fiducials' ) #self.setDescription( 'Place fiducials using the tracker' ) self.__parent = super( PlaceSpatialFiducialsStep, self ) def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # Place Tracker Position # placeTrackerPositionButton = qt.QPushButton("Add tracker position") # placeTrackerPositionButton.toolTip = "Add a tracker position to the list" # self.__layout.addWidget(placeTrackerPositionButton) # placeTrackerPositionButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) # # # Load a tracker list # loadTrackerListButton = qt.QPushButton("Test spatial points lists creation") # loadTrackerListButton.toolTip = "Load spatial points to test registration" # self.__layout.addWidget(loadTrackerListButton) # loadTrackerListButton.connect('clicked(bool)', self.onLoadSpatialPointsListClicked) self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(True) self.fiducialsWidget.placeFiducialButton.setVisible(False) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) #connect signals and slots self.fiducialsWidget.placeSpatialButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) self.updateWidgetFromParameters(self.parameterNode()) self.updateGeometry() qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") self.fiducialsWidget.sizeHint print("Fiducials Widget size :") self.fiducialsWidget.size print("Spatial fiducials step size Hint:") print self.sizeHint print("Spatial fiducials step size") print self.size def killButton(self): # hide useless button bl = slicer.util.findChildren(text='ReportROI') if len(bl): bl[0].hide() def validate( self, desiredBranchId ): ''' ''' self.__parent.validationSucceeded(desiredBranchId) print("We are in the validate function of PlaceSpatialFiducialsStep") def onEntry(self, comingFrom, transitionType): super(PlaceSpatialFiducialsStep, self).onEntry(comingFrom, transitionType) self.updateWidgetFromParameters(self.parameterNode()) pNode = self.parameterNode() pNode.SetParameter('currentStep', self.stepid) print("We are in the onEntry function of PlaceSpatialFiducialsStep coming from:" ) print comingFrom.name() qt.QTimer.singleShot(0, self.killButton) def onExit(self, goingTo, transitionType): self.doStepProcessing() super(PlaceSpatialFiducialsStep, self).onExit(goingTo, transitionType) print("We are in the onExit function of PlaceSpatialFiducialsStep") def updateWidgetFromParameters(self, parameterNode): print("We are in the place fiducials step") self.fiducialsList.updateSpatialFiducialsList() #self.updateTrackerPointsList() def doStepProcessing(self): # calculate the transform to align the ROI in the next step with the # baseline volume pNode = self.parameterNode() self.updateListNodesForRegistration() # def onPlaceTrackerPositionButtonClicked(self): # self.logic.recordTrackerPosition() # def onLoadSpatialPointsListClicked(self): self.logic.addFiducialsToTrackerList() def onPlaceTrackerPositionButtonClicked(self): if self.fiducialsWidget.fiducialsList.rowCount ==0: ret=qt.QMessageBox.warning(self.fiducialsWidget, 'Fiducials List', 'You must have image fiducials to match with tracker positions.', qt.QMessageBox.Ok , qt.QMessageBox.Ok ) return currentRow = self.fiducialsWidget.fiducialsList.currentRow() print("Current row is: " + str(currentRow)) if currentRow==-1: ret=qt.QMessageBox.warning(self.fiducialsWidget, 'Fiducials List', 'You must select an image fiducials to match with the tracker position.', qt.QMessageBox.Ok , qt.QMessageBox.Ok ) return fiducialListNode=slicer.util.getNode("Fiducials List") # TODO uncomment this line and comment all the following TOD fidHierarchyNode=fiducialListNode.GetNthChildNode(currentRow) fidNode=fidHierarchyNode.GetAssociatedNode() fidName = fidNode.GetName() positionRecorded= self.logic.recordTrackerPosition() path=slicer.modules.usguidedprocedure.path modulePath=os.path.dirname(path) if positionRecorded==True: #get the most recent node (the last) in the Tracker Points List trackerNode = self.logic.getFiducialNode('Tracker Points List', -1) trackerNode.SetName(fidName + '-Tracker') # Associate the fiducial and the tracker position # We remove the previous (if exist) tracker node # and we put the new tracker node ID in the table and check the row previousTrackerID = self.fiducialsWidget.fiducialsList.item(currentRow, 4).text() previousTrackerNode = slicer.mrmlScene.GetNodeByID(previousTrackerID) if previousTrackerNode: logic = slicer.modules.annotations.logic() logic.RemoveAnnotationNode(previousTrackerNode) self.fiducialsWidget.fiducialsList.item(currentRow, 3).setText(trackerNode.GetName()) self.fiducialsWidget.fiducialsList.item(currentRow, 4).setText(trackerNode.GetID()) self.fiducialsWidget.fiducialsList.item(currentRow, 0).setCheckState(2) soundFile=os.path.join(modulePath,"sounds/notify.wav") sound=qt.QSound(soundFile) sound.play() else: soundFile=os.path.join(modulePath,"sounds/critico.wav") #sound=qt.QSound("C:\Users\Usuario\devel\slicelets\USGuidedProcedure\sounds\critico.wav") sound=qt.QSound(soundFile) sound.play() def updateTrackerPointsList(self): #clear list #self.fiducialsWidget.fiducialsList.clear() #raise this flag to ignore change events in the table, the flag is lowered at the end of this method self.updatingList = True # get the nodes fiducialListNode=slicer.util.getNode("Fiducials List") trackerListNode=slicer.util.getNode("Tracker Points List") # clear the list of tracker points trackerListNode.RemoveChildrenNodes() # create as many tracker nodes as fiducials saml = slicer.modules.annotations.logic() saml.SetActiveHierarchyNodeID(trackerListNode.GetID()) for childrenIndex in xrange(fiducialListNode.GetNumberOfChildrenNodes()): fidHierarchyNode=fiducialListNode.GetNthChildNode(childrenIndex) fidNode=fidHierarchyNode.GetAssociatedNode() fidPos=[0,0,0] dummy=fidNode.GetFiducialCoordinates(fidPos) fidName = fidNode.GetName() fidID = fidNode.GetID() trackerNode=slicer.vtkMRMLAnnotationFiducialNode() trackerNode.SetFiducialWorldCoordinates(fidPos) trackerNode.SetName(fidName + '-Tracker') slicer.mrmlScene.AddNode(trackerNode) self.updatingList = False def updateListNodesForRegistration(self): #raise this flag to ignore change events in the table, the flag is lowered at the end of this method self.updatingList = True # get the nodes fiducialListNode=slicer.util.getNode("Fiducials List") trackerListNode=slicer.util.getNode("Tracker Points List") fiducialListNodeForRegistration=slicer.util.getNode("Fiducials List (for registration)") trackerListNodeForRegistration=slicer.util.getNode("Tracker Points List (for registration)") # clear the lists (for registration) fiducialListNodeForRegistration.RemoveChildrenNodes() trackerListNodeForRegistration.RemoveChildrenNodes() saml=slicer.modules.annotations.logic() for row in range(self.fiducialsWidget.fiducialsList.rowCount): fidID = self.fiducialsWidget.fiducialsList.item(row, 2).text() trackerID = self.fiducialsWidget.fiducialsList.item(row, 4).text() #print row #print fidID #print trackerID fidNode = slicer.mrmlScene.GetNodeByID(fidID) trackerNode = slicer.mrmlScene.GetNodeByID(trackerID) #print fidNode #print trackerNode #if the row is selected to be used in the registration if self.fiducialsWidget.fiducialsList.item(row, 0).checkState()==2: #print 'Checked row' fidPos=[0,0,0] dummy=fidNode.GetFiducialCoordinates(fidPos) fidName = fidNode.GetName() trackerPos=[0,0,0] dummy=trackerNode.GetFiducialCoordinates(trackerPos) trackerName = trackerNode.GetName() #create the new nodes copying the data fidNodeForRegistration=slicer.vtkMRMLAnnotationFiducialNode() fidNodeForRegistration.SetFiducialWorldCoordinates(fidPos) fidNodeForRegistration.SetName(fidName) trackerNodeForRegistration=slicer.vtkMRMLAnnotationFiducialNode() trackerNodeForRegistration.SetFiducialWorldCoordinates(trackerPos) trackerNodeForRegistration.SetName(trackerName) # add the nodes to the lists for registration saml.SetActiveHierarchyNodeID(fiducialListNodeForRegistration.GetID()) slicer.mrmlScene.AddNode(fidNodeForRegistration) saml.SetActiveHierarchyNodeID(trackerListNodeForRegistration.GetID()) slicer.mrmlScene.AddNode(trackerNodeForRegistration)
class PlaceImageFiducialsStep( USGuidedStep ) : def __init__( self, stepid ): self.initialize( stepid ) self.setName( '1. PlaceImageFiducials' ) #self.setDescription( 'Place fiducials in the image' ) self.__parent = super( PlaceImageFiducialsStep, self ) def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # BUTTONS -------------------------------------------------------------------- # This is commented out and the buttons are in the UI from the designer # # #layout for the buttons # self.buttonsLayout = qt.QHBoxLayout() # self.__layout.addLayout(self.buttonsLayout, 1) # # # Place fiducial # placeFiducialButtom = qt.QPushButton("Place fiducial") # placeFiducialButtom.toolTip = "Add a fiducial to the list" # self.buttonsLayout.addWidget(placeFiducialButtom) # placeFiducialButtom.connect('clicked(bool)', self.onPlaceFiducialButtomClicked) # # # Spacer # self.buttonsLayout.addStretch() self.fiducialsList = FiducialsList() self.fiducialsList.setPlaceImageFiducialStep(True) self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(False) self.fiducialsWidget.placeFiducialButton.setVisible(True) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(3, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") print self.fiducialsWidget.sizeHint print("Fiducials Widget size :") print self.fiducialsWidget.size print("Image fiducials step size Hint:") print self.sizeHint print("Image fiducials step size") print self.size def killButton(self): # hide useless button bl = slicer.util.findChildren(text='ReportROI') if len(bl): bl[0].hide() def validate( self, desiredBranchId ): ''' ''' self.__parent.validationSucceeded(desiredBranchId) print("We are in the validate function of PlaceImageFiducialsStep") def onEntry(self, comingFrom, transitionType): super(PlaceImageFiducialsStep, self).onEntry(comingFrom, transitionType) self.logic.createRegistrationLists() self.logic.createTargetList() self.logic.createPlusCommandsList() self.fiducialsList.listenToListModifications() #self.logic.crosshairEnable() self.updateWidgetFromParameters(self.parameterNode()) pNode = self.parameterNode() pNode.SetParameter('currentStep', self.stepid) print("We are in the onEntry function of PlaceImageFiducialsStep") """ # For debugging import sys sys.path.append('C:/Users/Usuario/devel/eclipse/plugins/org.python.pydev_2.7.1.2012100913/pysrc') import pydevd pydevd.settrace() """ qt.QTimer.singleShot(0, self.killButton) def onExit(self, goingTo, transitionType): self.doStepProcessing() super(PlaceImageFiducialsStep, self).onExit(goingTo, transitionType) #crosshairNode=slicer.util.getNode("Crosshair") #crosshairNode.SetCrosshairMode(1) #self.logic.crosshairDisable() self.fiducialsList.doNotListenToListModifications() print("We are in the onExit function of PlaceImageFiducialsStep") def updateWidgetFromParameters(self, parameterNode): self.fiducialsList.updateFiducialsList() print("We are in the place fiducials step") def doStepProcessing(self): # calculate the transform to align the ROI in the next step with the # baseline volume pNode = self.parameterNode()
class CaptureSpatialPositionsStep( USGuidedStep ) : def __init__( self, stepid ): self.initialize( stepid ) self.setName( '2. Capture spatial positions step' ) #self.setDescription( 'Place fiducials using the tracker' ) self.__parent = super( CaptureSpatialPositionsStep, self ) self.numberOfAcquiredSpatialPositions = 0 def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # Place Tracker Position # placeTrackerPositionButton = qt.QPushButton("Add tracker position") # placeTrackerPositionButton.toolTip = "Add a tracker position to the list" # self.__layout.addWidget(placeTrackerPositionButton) # placeTrackerPositionButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) # # # Load a tracker list # loadTrackerListButton = qt.QPushButton("Test spatial points lists creation") # loadTrackerListButton.toolTip = "Load spatial points to test registration" # self.__layout.addWidget(loadTrackerListButton) # loadTrackerListButton.connect('clicked(bool)', self.onLoadSpatialPointsListClicked) self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(True) self.fiducialsWidget.placeFiducialButton.setVisible(False) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) #connect signals and slots self.fiducialsWidget.placeSpatialButton.connect('clicked(bool)', self.onPlaceTrackerPositionButtonClicked) self.updateWidgetFromParameters(self.parameterNode()) self.updateGeometry() qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") self.fiducialsWidget.sizeHint print("Fiducials Widget size :") self.fiducialsWidget.size print("Spatial fiducials step size Hint:") print self.sizeHint print("Spatial fiducials step size") print self.size def killButton(self): # hide useless button bl = slicer.util.findChildren(text='ReportROI') if len(bl): bl[0].hide() def validate( self, desiredBranchId ): ''' ''' self.__parent.validationSucceeded(desiredBranchId) print("We are in the validate function of CaptureSpatialPositionsStepStep") def onEntry(self, comingFrom, transitionType): super(CaptureSpatialPositionsStep, self).onEntry(comingFrom, transitionType) self.updateWidgetFromParameters(self.parameterNode()) pNode = self.parameterNode() pNode.SetParameter('currentStep', self.stepid) print("We are in the onEntry function of CaptureSpatialPositionsStepStep coming from:" ) print comingFrom.name() qt.QTimer.singleShot(0, self.killButton) def onExit(self, goingTo, transitionType): self.doStepProcessing() super(CaptureSpatialPositionsStep, self).onExit(goingTo, transitionType) print("We are in the onExit function of CaptureSpatialPositionsStepStep") def updateWidgetFromParameters(self, parameterNode): print("We are in the place fiducials step") self.fiducialsList.updateSpatialFiducialsList() #self.updateTrackerPointsList() def doStepProcessing(self): # calculate the transform to align the ROI in the next step with the # baseline volume pNode = self.parameterNode() # def onPlaceTrackerPositionButtonClicked(self): # self.logic.recordTrackerPosition() # def onLoadSpatialPointsListClicked(self): self.logic.addFiducialsToTrackerList() def onPlaceTrackerPositionButtonClicked(self): fiducialName = "F" + str(self.numberOfAcquiredSpatialPositions) positionRecorded= self.logic.captureSpatialsPositions(fiducialName) path=slicer.modules.stylusbasedusprobecalibration.path modulePath=os.path.dirname(path) if positionRecorded==True: #get the most recent node (the last) in the Tracker Points List #trackerNode = slicer.util.getNode(fiducialName+"-Tracker") # trackerNode = self.logic.getFiducialNode('Tracker Points List', -1) # # # # Associate the fiducial and the tracker position # # We remove the previous (if exist) tracker node # # and we put the new tracker node ID in the table and check the row # currentItem = self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 4) # if currentItem is None: # self.fiducialsList.addNewEmptyRow(self.numberOfAcquiredSpatialPositions) # # currentItem = self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 4) # # self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 3).setText(trackerNode.GetName()) # self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 4).setText(trackerNode.GetID()) # self.fiducialsWidget.fiducialsList.item(self.numberOfAcquiredSpatialPositions , 0).setCheckState(2) self.fiducialsList.updateFiducialsList("Tracker Points List") soundFile=os.path.join(modulePath,"sounds/notify.wav") sound=qt.QSound(soundFile) sound.play() self.numberOfAcquiredSpatialPositions += 1 else: soundFile=os.path.join(modulePath,"sounds/critico.wav") #sound=qt.QSound("C:\Users\Usuario\devel\slicelets\USGuidedProcedure\sounds\critico.wav") sound=qt.QSound(soundFile) sound.play() def updateTrackerPointsList(self): #clear list #self.fiducialsWidget.fiducialsList.clear() #raise this flag to ignore change events in the table, the flag is lowered at the end of this method self.updatingList = True # get the nodes fiducialListNode=slicer.util.getNode("Fiducials List") trackerListNode=slicer.util.getNode("Tracker Points List") # clear the list of tracker points trackerListNode.RemoveChildrenNodes() # create as many tracker nodes as fiducials saml = slicer.modules.annotations.logic() saml.SetActiveHierarchyNodeID(trackerListNode.GetID()) for childrenIndex in xrange(fiducialListNode.GetNumberOfChildrenNodes()): fidHierarchyNode=fiducialListNode.GetNthChildNode(childrenIndex) fidNode=fidHierarchyNode.GetAssociatedNode() fidPos=[0,0,0] dummy=fidNode.GetFiducialCoordinates(fidPos) fidName = fidNode.GetName() fidID = fidNode.GetID() trackerNode=slicer.vtkMRMLAnnotationFiducialNode() trackerNode.SetFiducialWorldCoordinates(fidPos) trackerNode.SetName(fidName + '-Tracker') slicer.mrmlScene.AddNode(trackerNode) self.updatingList = False
class PlaceStylusTipInTheImageStep( USGuidedStep ) : def __init__( self, stepid ): self.initialize( stepid ) self.setName( '3. PlaceStylusTipInTheImage' ) #self.setDescription( 'Place fiducials in the image' ) self.__parent = super( PlaceStylusTipInTheImageStep, self ) def createUserInterface( self ): ''' ''' # TODO: might make sense to hide the button for the last step at this # point, but the widget does not have such option self.__layout = self.__parent.createUserInterface() # # BUTTONS -------------------------------------------------------------------- # This is commented out and the buttons are in the UI from the designer # # #layout for the buttons # self.buttonsLayout = qt.QHBoxLayout() # self.__layout.addLayout(self.buttonsLayout, 1) # # # Place fiducial # placeFiducialButtom = qt.QPushButton("Place fiducial") # placeFiducialButtom.toolTip = "Add a fiducial to the list" # self.buttonsLayout.addWidget(placeFiducialButtom) # placeFiducialButtom.connect('clicked(bool)', self.onPlaceFiducialButtomClicked) # # # Spacer # self.buttonsLayout.addStretch() self.fiducialsList = FiducialsList() self.fiducialsList.setModuleLogic(self.logic) self.__layout.addWidget(self.fiducialsList.getFiducialsWidget()) self.fiducialsWidget = self.fiducialsList.getFiducialsWidget() #customize the UI self.fiducialsWidget.placeSpatialButton.setVisible(False) self.fiducialsWidget.placeFiducialButton.setVisible(True) self.fiducialsWidget.fiducialsList.setColumnHidden(2, True) self.fiducialsWidget.fiducialsList.setColumnHidden(4, True) qt.QTimer.singleShot(0, self.killButton) print("Fiducials Widget size Hint:") print self.fiducialsWidget.sizeHint print("Fiducials Widget size :") print self.fiducialsWidget.size print("Image fiducials step size Hint:") print self.sizeHint print("Image fiducials step size") print self.size def killButton(self): # hide useless button bl = slicer.util.findChildren(text='ReportROI') if len(bl): bl[0].hide() def validate( self, desiredBranchId ): ''' ''' self.__parent.validationSucceeded(desiredBranchId) print("We are in the validate function of PlaceStylusTipInTheImageStep") def onEntry(self, comingFrom, transitionType): super(PlaceStylusTipInTheImageStep, self).onEntry(comingFrom, transitionType) self.fiducialsList.listenToListModifications() #self.logic.crosshairEnable() self.fiducialsList.setPlaceImageFiducialStep(True) self.updateWidgetFromParameters(self.parameterNode()) pNode = self.parameterNode() pNode.SetParameter('currentStep', self.stepid) if self.fiducialsWidget.fiducialsList.rowCount > 0: item = self.fiducialsWidget.fiducialsList.item(0, 0) self.fiducialsWidget.fiducialsList.itemClicked(item) print("We are in the onEntry function of PlaceStylusTipInTheImageStep") qt.QTimer.singleShot(0, self.killButton) def onExit(self, goingTo, transitionType): self.doStepProcessing() super(PlaceStylusTipInTheImageStep, self).onExit(goingTo, transitionType) #crosshairNode=slicer.util.getNode("Crosshair") #crosshairNode.SetCrosshairMode(1) #self.logic.crosshairDisable() self.fiducialsList.setPlaceImageFiducialStep(False) self.fiducialsList.doNotListenToListModifications() print("We are in the onExit function of PlaceStylusTipInTheImageStep") def updateWidgetFromParameters(self, parameterNode): self.fiducialsList.updateFiducialsList("Tracker Points List") print("We are in the place fiducials step") def doStepProcessing(self): # calculate the transform to align the ROI in the next step with the # baseline volume pNode = self.parameterNode() self.updateListNodesForRegistration() def updateListNodesForRegistration(self): #raise this flag to ignore change events in the table, the flag is lowered at the end of this method self.updatingList = True # get the nodes fiducialListNode=slicer.util.getNode("Fiducials List") trackerListNode=slicer.util.getNode("Tracker Points List") fiducialListNodeForRegistration=slicer.util.getNode("Fiducials List (for registration)") trackerListNodeForRegistration=slicer.util.getNode("Tracker Points List (for registration)") # clear the lists (for registration) fiducialListNodeForRegistration.RemoveChildrenNodes() trackerListNodeForRegistration.RemoveChildrenNodes() saml=slicer.modules.annotations.logic() for row in range(self.fiducialsWidget.fiducialsList.rowCount): fidID = self.fiducialsWidget.fiducialsList.item(row, 2).text() trackerID = self.fiducialsWidget.fiducialsList.item(row, 4).text() #print row #print fidID #print trackerID fidNode = slicer.mrmlScene.GetNodeByID(fidID) trackerNode = slicer.mrmlScene.GetNodeByID(trackerID) #print fidNode #print trackerNode #if the row is selected to be used in the registration if self.fiducialsWidget.fiducialsList.item(row, 0).checkState()==2: #print 'Checked row' fidPos=[0,0,0] dummy=fidNode.GetFiducialCoordinates(fidPos) fidName = fidNode.GetName() trackerPos=[0,0,0] dummy=trackerNode.GetFiducialCoordinates(trackerPos) trackerName = trackerNode.GetName() #create the new nodes copying the data fidNodeForRegistration=slicer.vtkMRMLAnnotationFiducialNode() fidNodeForRegistration.SetFiducialWorldCoordinates(fidPos) fidNodeForRegistration.SetName(fidName) trackerNodeForRegistration=slicer.vtkMRMLAnnotationFiducialNode() trackerNodeForRegistration.SetFiducialWorldCoordinates(trackerPos) trackerNodeForRegistration.SetName(trackerName) # add the nodes to the lists for registration saml.SetActiveHierarchyNodeID(fiducialListNodeForRegistration.GetID()) slicer.mrmlScene.AddNode(fidNodeForRegistration) saml.SetActiveHierarchyNodeID(trackerListNodeForRegistration.GetID()) slicer.mrmlScene.AddNode(trackerNodeForRegistration) self.logic.hideAllTheFiducialsNode("Fiducials List (for registration)") self.logic.hideAllTheFiducialsNode("Tracker Points List (for registration)")