Package SlicerVMTKLevelSet :: Module SlicerVMTKInitializationSeedsGUI
[hide private]
[frames] | no frames]

Source Code for Module SlicerVMTKLevelSet.SlicerVMTKInitializationSeedsGUI

  1  from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton 
  2   
  3  from Slicer import slicer 
  4   
  5  vtkKWPushButton_InvokedEvent = 10000 
  6   
  7  ### 
  8  ### seeds initialization page (derived from skeleton) 
  9  ### 
10 -class SlicerVMTKInitializationSeedsGUI(SlicerVMTKAdvancedPageSkeleton):
11
12 - def __init__(self,parentFrame,parentClass):
13 SlicerVMTKAdvancedPageSkeleton.__init__(self,parentFrame,parentClass) 14 15 self._seedFiducialList = None 16 17 self._firstRowFrame = slicer.vtkKWFrame() 18 self._seedPointsFrame = slicer.vtkKWFrameWithLabel() 19 self._addSeedPointButton = slicer.vtkKWPushButton() 20 self._delSeedPointButton = slicer.vtkKWPushButton() 21 self._seedPointsList = slicer.vtkKWListBoxWithScrollbars() 22 self._startButton = slicer.vtkKWPushButton() 23 self._resetButton = slicer.vtkKWPushButton()
24 25
26 - def Destructor(self):
27 SlicerVMTKAdvancedPageSkeleton.Destructor(self) 28 29 self._seedFiducialList = None 30 31 self._firstRowFrame.SetParent(None) 32 self._firstRowFrame = None 33 self._seedPointsFrame.SetParent(None) 34 self._seedPointsFrame = None 35 self._seedPointsList.SetParent(None) 36 self._seedPointsList = None 37 self._addSeedPointButton.SetParent(None) 38 self._addSeedPointButton = None 39 self._delSeedPointButton.SetParent(None) 40 self._delSeedPointButton = None 41 42 self._startButton.SetParent(None) 43 self._startButton = None 44 self._resetButton.SetParent(None) 45 self._resetButton = None
46 47
48 - def UpdateMRML(self):
49 SlicerVMTKAdvancedPageSkeleton.UpdateMRML(self) 50 51 node = self._parentClass.GetScriptedModuleNode() 52 53 if self._seedFiducialList != None: 54 node.SetParameter('SE_seedFiducialList',self._seedFiducialList.GetID()) 55 else: 56 node.SetParameter('SE_seedFiducialList',"None")
57
58 - def UpdateGUI(self):
59 SlicerVMTKAdvancedPageSkeleton.UpdateGUI(self) 60 61 node = self._parentClass.GetScriptedModuleNode() 62 63 self._seedFiducialList = None 64 65 if (node.GetParameter("SE_seedFiducialList")!="None" and node.GetParameter("SE_seedFiducialList")): 66 self._seedFiducialList = self._parentClass.GetLogic().GetMRMLScene().GetNodeByID(node.GetParameter("SE_seedFiducialList")) 67 68 self.UpdateGUIByState()
69 70 71 # belongs to UpdateGUI
72 - def UpdateGUIByState(self):
73 74 self._seedPointsFrame.AllowFrameToCollapseOff() 75 self._seedPointsFrame.SetLabelText("Seeds") 76 self._seedPointsFrame.SetReliefToSunken() 77 78 self._addSeedPointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 79 self._addSeedPointButton.SetReliefToRaised() 80 self._addSeedPointButton.SetBackgroundColor(0.9,0.9,0.9) 81 self._addSeedPointButton.SetForegroundColor(0.2,0.6,0.2) 82 self._addSeedPointButton.SetText("Add Seed Point") 83 self._addSeedPointButton.SetWidth(15) 84 self._addSeedPointButton.SetBalloonHelpString("Click to add new seed point") 85 86 self._delSeedPointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 87 self._delSeedPointButton.SetReliefToRaised() 88 self._delSeedPointButton.SetBackgroundColor(0.9,0.9,0.9) 89 self._delSeedPointButton.SetForegroundColor(0.9,0.2,0.2) 90 self._delSeedPointButton.SetText("X") 91 self._delSeedPointButton.SetWidth(3) 92 self._delSeedPointButton.SetBalloonHelpString("Click to delete selected seed point") 93 94 self._seedPointsList.GetWidget().SetHeight(3) 95 self._seedPointsList.GetWidget().SetSelectionModeToSingle() 96 self._seedPointsList.GetWidget().DeleteAll() 97 98 self._startButton.SetEnabled(0) 99 self._startButton.SetActiveBackgroundColor(0.9,0.9,0.9) 100 self._startButton.SetReliefToRaised() 101 self._startButton.SetBackgroundColor(0.9,0.9,0.9) 102 self._startButton.SetText("Start!") 103 self._startButton.SetHeight(2) 104 self._startButton.SetWidth(8) 105 self._startButton.SetBalloonHelpString("Click to start") 106 107 self._resetButton.SetEnabled(1) 108 self._resetButton.SetActiveBackgroundColor(0.9,0.9,0.9) 109 self._resetButton.SetReliefToRaised() 110 self._resetButton.SetBackgroundColor(0.9,0.9,0.9) 111 self._resetButton.SetText("Cancel") 112 self._resetButton.SetHeight(2) 113 self._resetButton.SetWidth(8) 114 self._resetButton.SetBalloonHelpString("Click to reset") 115 116 if self._seedFiducialList != None: 117 118 numberOfFiducials = self._seedFiducialList.GetNumberOfFiducials() 119 120 if numberOfFiducials==0: 121 122 self._seedPointsList.GetWidget().AppendUnique("<no seed points>") 123 124 else: 125 126 for i in range(0,numberOfFiducials): 127 128 curLabelText = self._seedFiducialList.GetNthFiducialLabelText(i) 129 curCoords = self._seedFiducialList.GetNthFiducialXYZ(i) 130 131 self._seedPointsList.GetWidget().AppendUnique(curLabelText+" - R:" + str(round(curCoords[0],1)) + " A:" + str(round(curCoords[1],1)) + " S:" + str(round(curCoords[2],1))) 132 133 # at least one fiducial exists 134 self._startButton.SetEnabled(1) 135 136 else: 137 138 self._seedPointsList.GetWidget().AppendUnique("<no seed points>")
139
140 - def BuildGUI(self):
141 SlicerVMTKAdvancedPageSkeleton.BuildGUI(self) 142 143 self._firstRowFrame.SetParent(self._parentFrame) 144 self._firstRowFrame.Create() 145 146 self._seedPointsFrame.SetParent(self._parentFrame) 147 self._seedPointsFrame.Create() 148 149 self._addSeedPointButton.SetParent(self._seedPointsFrame.GetFrame()) 150 self._addSeedPointButton.Create() 151 152 self._delSeedPointButton.SetParent(self._seedPointsFrame.GetFrame()) 153 self._delSeedPointButton.Create() 154 155 self._seedPointsList.SetParent(self._seedPointsFrame.GetFrame()) 156 self._seedPointsList.Create() 157 158 self._startButton.SetParent(self._parentFrame) 159 self._startButton.Create() 160 161 self._resetButton.SetParent(self._parentFrame) 162 self._resetButton.Create() 163 164 self.UpdateGUIByState() 165 166 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 2 -in %s" % (self._firstRowFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 167 168 slicer.TkCall("pack %s -side left -expand y -padx 2 -pady 2 -in %s" % (self._seedPointsFrame.GetWidgetName(), self._firstRowFrame.GetWidgetName())) 169 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._addSeedPointButton.GetWidgetName())) 170 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._seedPointsList.GetWidgetName())) 171 slicer.TkCall("pack %s -side left -expand n -padx 2 -pady 2" % (self._delSeedPointButton.GetWidgetName())) 172 173 slicer.TkCall("pack %s -side right -expand n -padx 2 -pady 2 -in %s" % (self._startButton.GetWidgetName(), self._parentFrame.GetWidgetName())) 174 slicer.TkCall("pack %s -side right -expand n -padx 2 -pady 2 -in %s" % (self._resetButton.GetWidgetName(), self._parentFrame.GetWidgetName()))
175
176 - def AddGUIObservers(self):
177 SlicerVMTKAdvancedPageSkeleton.AddGUIObservers(self) 178 179 self._addSeedPointButtonTag = self._parentClass.AddObserverByNumber(self._addSeedPointButton,vtkKWPushButton_InvokedEvent) 180 self._delSeedPointButtonTag = self._parentClass.AddObserverByNumber(self._delSeedPointButton,vtkKWPushButton_InvokedEvent) 181 182 self._startButtonTag = self._parentClass.AddObserverByNumber(self._startButton,vtkKWPushButton_InvokedEvent) 183 184 self._resetButtonTag = self._parentClass.AddObserverByNumber(self._resetButton,vtkKWPushButton_InvokedEvent)
185 186
187 - def RemoveGUIObservers(self):
188 SlicerVMTKAdvancedPageSkeleton.RemoveGUIObservers(self) 189 190 191 self._parentClass.RemoveObserver(self._addSeedPointButtonTag) 192 self._parentClass.RemoveObserver(self._delSeedPointButtonTag) 193 self._parentClass.RemoveObserver(self._startButtonTag) 194 self._parentClass.RemoveObserver(self._resetButtonTag)
195 196
197 - def ProcessGUIEvents(self,caller,event):
198 SlicerVMTKAdvancedPageSkeleton.ProcessGUIEvents(self,caller,event) 199 200 201 if caller == self._addSeedPointButton and event == vtkKWPushButton_InvokedEvent: 202 203 if self._parentClass.GetHelper().GetIsInteractiveMode() == 0: 204 205 self.InitAddSeedPoint() 206 207 elif self._parentClass.GetHelper().GetIsInteractiveMode() == 1: 208 209 self.TeardownAddSeedPoint() 210 211 212 213 elif caller == self._delSeedPointButton and event == vtkKWPushButton_InvokedEvent: 214 215 self.RemoveSeedPoint() 216 self._parentClass.UpdateMRML() 217 self.UpdateGUIByState() 218 219 elif caller == self._startButton and event == vtkKWPushButton_InvokedEvent: 220 221 self.Execute() 222 self._parentClass.UpdateMRML() 223 elif caller == self._resetButton and event == vtkKWPushButton_InvokedEvent: 224 self.DeleteFiducialListsFromScene(3) 225 self.Reset() 226 self._parentClass.UpdateMRML()
227 228 229
230 - def DeleteFiducialListsFromScene(self,which):
231 SlicerVMTKAdvancedPageSkeleton.DeleteFiducialListsFromScene(self,which) 232 233 234 node = self._parentClass.GetScriptedModuleNode() 235 236 if node: 237 238 scene = self._parentClass.GetLogic().GetMRMLScene() 239 240 if self._seedFiducialList!=None: 241 if scene.IsNodePresent(self._seedFiducialList): 242 # node is in scene, now delete 243 scene.RemoveNode(self._seedFiducialList) 244 self._seedFiducialList = None
245 246 247
248 - def InitAddSeedPoint(self):
249 250 scene = self._parentClass.GetLogic().GetMRMLScene() 251 252 if self._seedFiducialList == None: 253 254 # no list created yet 255 self._seedFiducialList = slicer.vtkMRMLFiducialListNode() 256 self._seedFiducialList.SetName("VMTK Seed Points") 257 self._seedFiducialList.SetScene(scene) 258 self._seedFiducialList.SetColor(0.2,0.6,0.2) 259 self._seedFiducialList.SetGlyphTypeFromString("Circle2D") 260 self._seedFiducialList.SetLocked(1) 261 scene.AddNode(self._seedFiducialList) 262 self._seedPointsList.GetWidget().DeleteAll() 263 264 #disable all other buttons 265 self._parentClass.UnLockInitInterface(0) 266 self._startButton.SetEnabled(0) 267 268 #change the button appeareance 269 self._addSeedPointButton.SetActiveBackgroundColor(0.2,0.6,0.2) 270 self._addSeedPointButton.SetReliefToSunken() 271 self._addSeedPointButton.SetBackgroundColor(0.2,0.6,0.2) 272 self._addSeedPointButton.SetForegroundColor(0.2,0.2,0.2) 273 self._addSeedPointButton.SetText("Stop adding!") 274 self._addSeedPointButton.SetWidth(15) 275 self._addSeedPointButton.SetBalloonHelpString("Click to stop adding new seed points") 276 277 278 self._parentClass.GetHelper().SetIsInteractiveMode(1,self)
279 280
281 - def TeardownAddSeedPoint(self):
282 283 self._parentClass.GetHelper().SetIsInteractiveMode(0,None) 284 285 #re-change the button appeareance 286 self._addSeedPointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 287 self._addSeedPointButton.SetReliefToRaised() 288 self._addSeedPointButton.SetBackgroundColor(0.9,0.9,0.9) 289 self._addSeedPointButton.SetForegroundColor(0.2,0.6,0.2) 290 self._addSeedPointButton.SetText("Add Seed Point") 291 self._addSeedPointButton.SetWidth(15) 292 self._addSeedPointButton.SetBalloonHelpString("Click to add new seed point") 293 294 self.UpdateGUIByState() 295 self._parentClass.UpdateMRML()
296
297 - def RemoveSeedPoint(self):
298 299 curSelectionId = self._seedPointsList.GetWidget().GetSelectionIndex() 300 301 if curSelectionId != -1: 302 303 #at least one item selected, but which 304 curSelection = self._seedPointsList.GetWidget().GetSelection() 305 306 if curSelection != "<no source points>": 307 308 self._seedFiducialList.RemoveFiducial(curSelectionId)
309 310 311 # 312 # x,y 313 # which is the Name of the SliceWindow (Red,Yellow,Green) 314 #
315 - def HandleClickInSliceWindowWithCoordinates(self, which, coordinates):
316 SlicerVMTKAdvancedPageSkeleton.HandleClickInSliceWindowWithCoordinates(self, which, coordinates) 317 318 coordinatesRAS = self._parentClass.GetHelper().ConvertCoordinates2RAS(which,coordinates) 319 fiducial = self._seedFiducialList.AddFiducialWithXYZ(coordinatesRAS[0], coordinatesRAS[1], coordinatesRAS[2],0) 320 321 numberOfFiducials = self._seedFiducialList.GetNumberOfFiducials() 322 323 lastFiducial = 1 324 325 # always use new Ids for the fiducial label 326 if numberOfFiducials != 1: 327 for i in range(0,numberOfFiducials-1): 328 currentFiducialLabel = self._seedFiducialList.GetNthFiducialLabelText(i) 329 currentFiducialLabel = currentFiducialLabel.split("P")[1] 330 if int(currentFiducialLabel) >= lastFiducial: 331 lastFiducial = int(currentFiducialLabel)+1 332 333 self._seedFiducialList.SetNthFiducialLabelText(fiducial, "SP"+str(lastFiducial)) 334 self._parentClass.GetHelper().debug("Fiducial Added! More to come!")
335 336 337 338 339 340 341 # 342 # Execute the algorithm 343 #
344 - def Execute(self):
345 346 self._parentClass.SetUpdatingOn() 347 348 inVolumeNode = self._parentClass._inVolumeSelector.GetSelected() 349 sourceSeedsNode = self._seedFiducialList 350 351 myLogic = self._parentClass.GetMyLogic() 352 resultContainer = myLogic.ExecuteSeeds(inVolumeNode,sourceSeedsNode) 353 resultContainer = self._parentClass.GetHelper().SetAndMergeInitVolume(resultContainer) 354 self._parentClass.GetHelper().GenerateInitializationModel(resultContainer) 355 356 self._parentClass.SetUpdatingOff() 357 self._parentClass._state = 1 358 self._parentClass.UpdateGUIByState() 359 self._parentClass.UpdateMRML() # save the results
360 361 362 # 363 # Resets the GUI, all fiducial lists and sets any values to default 364 #
365 - def Reset(self):
366 SlicerVMTKAdvancedPageSkeleton.Reset(self) 367 368 self._seedFiducialList = None 369 370 self.UpdateGUIByState()
371