def onPointCollectionButtonClicked(self):
    """Connected to 'create path' button. It allows to:
      - compute the path
      - create the associated model"""
    listExitence = False
    hierarchyNodes = slicer.util.getNodes('vtkMRMLAnnotationHierarchyNode*')
    for hierarchyNode in hierarchyNodes.keys():
      if hierarchyNode=='Template Fiducials':
        listExitence = True
    if listExitence == False:
      templateFiducialAnnotationList = slicer.vtkMRMLAnnotationHierarchyNode()
      templateFiducialAnnotationList.SetName('Template Fiducials')
      templateFiducialAnnotationList.SetHideFromEditors(0)
      templateFiducialAnnotationList.SetScene(self.scene)
      self.scene.AddNode(templateFiducialAnnotationList)
      self.templateFiducialAnnotationList = templateFiducialAnnotationList

    self.logic.SetActiveHierarchyNodeID(self.templateFiducialAnnotationList.GetID())

    if self.iterationNo < self.numberOfFiducialPoints:
      self.templateFiducialList[self.iterationNo] = self.collect()
      if self.iterationNo == self.numberOfFiducialPoints-1:
        print "Point collection Finished Succesfullly, the Fiducial Coordinates are:"
        print self.templateFiducialList
        self.registrationCollapsibleButton.enabled = True
        self.pointCollectionButton.enabled = False 
        self.pointResetButton.enabled = True
    self.iterationNo += 1
Exemplo n.º 2
0
 def __init__(self, slicerVersion):
     self.volume = slicer.vtkMRMLScalarVolumeNode()
     self.display = slicer.vtkMRMLScalarVolumeDisplayNode()
     if slicerVersion == 4:
         self.fiducialList = slicer.vtkMRMLAnnotationHierarchyNode()
         self.newFiducial = slicer.vtkMRMLAnnotationFiducialNode()
     else:
         self.fiducialList = slicer.vtkMRMLFiducialListNode()
         self.newFiducial = slicer.vtkMRMLFiducial()
Exemplo n.º 3
0
 def _setFiducialLists(self, sceneFixedList=None, sceneMovingList=None):
     self.fixed = sceneFixedList
     self.moving = sceneMovingList
     if self.fixed.GetClassName() == 'vtkMRMLAnnotationHierarchyNode':
         # slicer4 style
         self.fiducialStyle = 4
         self.fixedCount = self.fixed.GetNumberOfChildren()
         self.movingCount = self.moving.GetNumberOfChildren()
         self.newFixed = slicer.vtkMRMLAnnotationHierarchyNode()
         self.newMoving = slicer.vtkMRMLAnnotationHierarchyNode()
     else:
         # slicer3 style
         self.fiducialStyle = 3
         self.fixedCount = self.fixed.GetNumberOfFiducials()
         self.movingCount = self.moving.GetNumberOfFiducials()
         self.newFixed = slicer.vtkMRMLFiducialListNode()
         self.newMoving = slicer.vtkMRMLFiducialListNode()
     return self.run()
Exemplo n.º 4
0
 def _setFiducialLists(self, sceneFixedList=None, sceneMovingList=None):
     self.fixed = sceneFixedList
     self.moving = sceneMovingList
     if self.fixed.GetClassName() == 'vtkMRMLAnnotationHierarchyNode':
         # slicer4 style
         self.fiducialStyle = 4
         self.fixedCount = self.fixed.GetNumberOfChildren()
         self.movingCount = self.moving.GetNumberOfChildren()
         self.newFixed = slicer.vtkMRMLAnnotationHierarchyNode()
         self.newMoving = slicer.vtkMRMLAnnotationHierarchyNode()
     else:
         # slicer3 style
         self.fiducialStyle = 3
         self.fixedCount = self.fixed.GetNumberOfFiducials()
         self.movingCount = self.moving.GetNumberOfFiducials()
         self.newFixed = slicer.vtkMRMLFiducialListNode()
         self.newMoving = slicer.vtkMRMLFiducialListNode()
     return self.run()
Exemplo n.º 5
0
 def __init__(self, slicerVersion):
     self.volume = slicer.vtkMRMLScalarVolumeNode()
     self.display = slicer.vtkMRMLScalarVolumeDisplayNode()
     if slicerVersion == 4:
         self.fiducialList = slicer.vtkMRMLAnnotationHierarchyNode()
         self.newFiducial = slicer.vtkMRMLAnnotationFiducialNode()
     else:
         self.fiducialList = slicer.vtkMRMLFiducialListNode()
         self.newFiducial = slicer.vtkMRMLFiducial()
Exemplo n.º 6
0
def create_fiducials_list(seedList):
    saml = slicer.modules.annotations.logic()
    saml.SetActiveHierarchyNodeID(saml.GetTopLevelHierarchyNodeID())
    saml.AddHierarchy()
    currentList = saml.GetActiveHierarchyNode()
    for seed in seedList:
        seedFN = slicer.vtkMRMLAnnotationFiducialNode()
        seedFN.SetFiducialWorldCoordinates(seed)
        seedFN.Initialize(slicer.mrmlScene)
        seedHN = slicer.vtkMRMLAnnotationHierarchyNode()
        seedHN.SetParentNodeID(currentList.GetID())
        seedHN.SetAssociatedNodeID(seedFN.GetID())
    return currentList
Exemplo n.º 7
0
  def addFiducial(self,name,position=(0,0,0),associatedNode=None):
    """Add an instance of a fiducial to the scene for a given
    volume node"""

    annoLogic = slicer.modules.annotations.logic()
    originalActiveHierarchy = annoLogic.GetActiveHierarchyNodeID()
    slicer.mrmlScene.StartState(slicer.mrmlScene.BatchProcessState)

    # make the fiducial list if required
    listName = associatedNode.GetName() + "-landmarks"
    fidListHierarchyNode = slicer.util.getNode(listName)
    if not fidListHierarchyNode:
      fidListHierarchyNode = slicer.vtkMRMLAnnotationHierarchyNode()
      fidListHierarchyNode.HideFromEditorsOff()
      fidListHierarchyNode.SetName(listName)
      slicer.mrmlScene.AddNode(fidListHierarchyNode)
      # make it a child of the top level node
      fidListHierarchyNode.SetParentNodeID(annoLogic.GetTopLevelHierarchyNodeID())
    # make this active so that the fids will be added to it
    annoLogic.SetActiveHierarchyNodeID(fidListHierarchyNode.GetID())

    fiducialNode = slicer.vtkMRMLAnnotationFiducialNode()
    if associatedNode:
      fiducialNode.SetAttribute("AssociatedNodeID", associatedNode.GetID())
    fiducialNode.SetName(name)
    fiducialNode.AddControlPoint(position, True, True)
    fiducialNode.SetSelected(False)
    fiducialNode.SetLocked(False)
    slicer.mrmlScene.AddNode(fiducialNode)

    fiducialNode.CreateAnnotationTextDisplayNode()
    fiducialNode.CreateAnnotationPointDisplayNode()
    # TODO: pick appropriate defaults
    # 135,135,84
    fiducialNode.SetTextScale(3.)
    fiducialNode.GetAnnotationPointDisplayNode().SetGlyphScale(3.)
    fiducialNode.GetAnnotationPointDisplayNode().SetGlyphTypeFromString('StarBurst2D')
    fiducialNode.GetAnnotationPointDisplayNode().SetColor((1,1,0))
    fiducialNode.GetAnnotationTextDisplayNode().SetColor((1,1,0))
    fiducialNode.SetDisplayVisibility(True)

    annoLogic.SetActiveHierarchyNodeID(originalActiveHierarchy)
    slicer.mrmlScene.EndState(slicer.mrmlScene.BatchProcessState)
  def onRegistrationButtonClicked(self):
    print "Hello Registration :) "
    self.referenceAttachmentCollapsibleButton.enabled = True
    
    linearTransformExistence = False
    linearTransformNodes = slicer.util.getNodes('vtkMRMLlinearTransformNode*')
    for linearTransformNode in linearTransformNodes.keys():
      if linearTransformNode=='ModelToTemplateTransform':
        linearTransformExistence = True
    if linearTransformExistence == False:
      followupTransform = slicer.vtkMRMLLinearTransformNode()
      followupTransform.SetName('ModelToTemplateTransform')
      followupTransform.SetScene(slicer.mrmlScene)
      slicer.mrmlScene.AddNode(followupTransform)
      self.followupTransform = followupTransform

    self.fiducialListNode = slicer.util.getNode('Template Fiducials')
    movingLandmarksListID = self.fiducialListNode.GetID()
    
    

    modelFiducials = self.modelFiducialSelector.currentNode()
    
    
    
    # extracting the effects of transform parameters
    transformNode1 = self.templateSelector.currentNode().GetParentTransformNode()
    #print transformNode1
    shiftTransform1 = [0 , 0, 0]
    rotationTransform1 = [[1, 0,0],[0,1,0],[0,0,1]]
    #shiftTransform2 = [0, 0, 0]
    #rotationTransform2 = [1, 0,0],[0,1,0],[0,0,1]]
    if transformNode1 != None:
      m = vtk.vtkMatrix4x4()
      transformNode1.GetMatrixTransformToWorld(m)
      shiftTransform1 = [ m.GetElement(0,3), m.GetElement(1,3), m.GetElement(2,3) ]
      rotationTransform1 = [[m.GetElement(0,0), m.GetElement(0,1),m.GetElement(0,2)],[m.GetElement(1,0), m.GetElement(1,1),m.GetElement(1,2)],[m.GetElement(2,0), m.GetElement(2,1),m.GetElement(2,2)]]
      #transformNode2 = transformNode1.GetParentTransformNode()
      #if transformNode2 != None:
        #transformNode2.GetMatrixTransformToWorld(m)
        #shiftTransform2 = [ m.GetElement(0,3), m.GetElement(1,3), m.GetElement(2,3) ]
        #rotationTransform2 = [[m.GetElement(0,0), m.GetElement(0,1),m.GetElement(0,2)],[m.GetElement(1,0), m.GetElement(1,1),m.GetElement(1,2)],[m.GetElement(2,0), m.GetElement(2,1),m.GetElement(2,2)]
    #shiftTransform = numpy.add(shiftTransform1,shiftTransform2)

    
    
    # Changing the fiducial coordinates according to the transform
    
    if modelFiducials.GetClassName() == "vtkMRMLAnnotationHierarchyNode":
    # slicer4 style hierarchy nodes
      collection = vtk.vtkCollection()
      modelFiducials.GetChildrenDisplayableNodes(collection)
      n = collection.GetNumberOfItems()
    
    
    if n != 6: 
        return
      # output an error and ask user to select a fiducial with 6 points
    listExitence = False
    hierarchyNodes = slicer.util.getNodes('vtkMRMLAnnotationHierarchyNode*')
    for hierarchyNode in hierarchyNodes.keys():
      if hierarchyNode=='New Model Fiducials':
        listExitence = True
        self.newModelFiducialAnnotationList.RemoveAllChildrenNodes()
    if listExitence == False:
      newModelFiducialAnnotationList = slicer.vtkMRMLAnnotationHierarchyNode()
      newModelFiducialAnnotationList.SetName('New Model Fiducials')
      # hide the fiducial list from the scene
      newModelFiducialAnnotationList.SetHideFromEditors(1)
      newModelFiducialAnnotationList.SetScene(self.scene)
      self.scene.AddNode(newModelFiducialAnnotationList)
      self.newModelFiducialAnnotationList = newModelFiducialAnnotationList

    self.logic.SetActiveHierarchyNodeID(self.newModelFiducialAnnotationList.GetID())



    #self.logic.AddHierarchy
    #a=self.logic.GetActiveHierarchyNode()
    #a.SetName('New Model Fiducials')
    
    p = numpy.zeros((n,3))
    for i in xrange(n):
      f = collection.GetItemAsObject(i)
      coords = [0,0,0]
      # Need to change to consider the transform that is applied to the points
      f.GetFiducialCoordinates(coords)
      newCoords = numpy.add(numpy.dot(rotationTransform1,coords),shiftTransform1)
      newfid = slicer.vtkMRMLAnnotationFiducialNode()
      newfid.SetFiducialCoordinates(newCoords)
      newfid.SetHideFromEditors(0)
      newfid.SetName(str(i))
      self.scene.AddNode(newfid)

    fixedLandmarksListID = self.newModelFiducialAnnotationList.GetID() 

    self.OutputMessage = ""
    parameters = {}
    parameters["fixedLandmarks"] = fixedLandmarksListID 
    parameters["movingLandmarks"] = movingLandmarksListID
   
    parameters["saveTransform"] = self.followupTransform
    parameters["transformType"] = "Rigid"
    parameters["rms"] = self.RMS
    parameters["outputMessage"] = self.OutputMessage
    
    fidreg = slicer.modules.fiducialregistration
    self.__cliNode = None
    self.__cliNode = slicer.cli.run(fidreg, self.__cliNode, parameters)
    print "RMS is", self.RMS
    #self.__cliObserverTag = self.__cliNode.AddObserver('ModifiedEvent', self.processRegistrationCompletion)
    #self.__registrationStatus.setText('Wait ...')
    #self.firstRegButton.setEnabled(0)

    stylusNode = self.stylusTrackerSelector.currentNode() 
    stylusNode.SetAndObserveTransformNodeID(self.followupTransform.GetID())