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