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

Source Code for Module SlicerVMTKLevelSet.SlicerVMTKInitializationFastMarchingGUI

  1  from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton 
  2  from Slicer import slicer 
  3   
  4  vtkKWPushButton_InvokedEvent = 10000 
  5  vtkKWExtent_EndChangeEvent = 10002 
  6   
  7  ### 
  8  ### fast marching initialization page (derived from skeleton) 
  9  ### 
10 -class SlicerVMTKInitializationFastMarchingGUI(SlicerVMTKAdvancedPageSkeleton):
11
12 - def __init__(self,parentFrame,parentClass):
13 SlicerVMTKAdvancedPageSkeleton.__init__(self,parentFrame,parentClass) 14 15 self._sourceFiducialList = None 16 self._targetFiducialList = None 17 18 self._currentFiducialList = None 19 20 #top frame starts 21 self._firstRowFrame = slicer.vtkKWFrame() 22 23 # source frame starts 24 self._sourcePointsFrame = slicer.vtkKWFrameWithLabel() 25 26 self._addSourcePointButton = slicer.vtkKWPushButton() 27 self._delSourcePointButton = slicer.vtkKWPushButton() 28 self._sourcePointsList = slicer.vtkKWListBoxWithScrollbars() 29 30 31 # target frame starts 32 self._targetPointsFrame = slicer.vtkKWFrameWithLabel() 33 34 self._addTargetPointButton = slicer.vtkKWPushButton() 35 self._delTargetPointButton = slicer.vtkKWPushButton() 36 self._targetPointsList = slicer.vtkKWListBoxWithScrollbars() 37 38 #middle frame starts 39 self._secondRowFrame = slicer.vtkKWFrame() 40 41 #threshold frame starts 42 self._thresholdFrame = slicer.vtkKWFrameWithLabel() 43 self._thresholdSlider = slicer.vtkKWExtent() 44 45 self._startButton = slicer.vtkKWPushButton() 46 self._resetButton = slicer.vtkKWPushButton()
47 48
49 - def Destructor(self):
50 SlicerVMTKAdvancedPageSkeleton.Destructor(self) 51 52 self._sourceFiducialList = None 53 self._targetFiducialList = None 54 55 self._currentFiducialList = None 56 57 self._firstRowFrame.SetParent(None) 58 self._firstRowFrame = None 59 self._sourcePointsFrame.SetParent(None) 60 self._sourcePointsFrame = None 61 self._sourcePointsList.SetParent(None) 62 self._sourcePointsList = None 63 64 self._targetPointsFrame.SetParent(None) 65 self._targetPointsFrame = None 66 67 self._targetPointsList.SetParent(None) 68 self._targetPointsList = None 69 70 self._addSourcePointButton.SetParent(None) 71 self._addSourcePointButton = None 72 73 self._addTargetPointButton.SetParent(None) 74 self._addTargetPointButton = None 75 76 self._delSourcePointButton.SetParent(None) 77 self._delSourcePointButton = None 78 79 self._delTargetPointButton.SetParent(None) 80 self._delTargetPointButton = None 81 82 self._secondRowFrame.SetParent(None) 83 self._secondRowFrame = None 84 85 self._thresholdFrame.SetParent(None) 86 self._thresholdFrame = None 87 88 self._thresholdSlider.SetParent(None) 89 self._thresholdSlider = None 90 91 self._startButton.SetParent(None) 92 self._startButton = None 93 94 self._resetButton.SetParent(None) 95 self._resetButton = None
96 97
98 - def UpdateMRML(self):
99 SlicerVMTKAdvancedPageSkeleton.UpdateMRML(self) 100 101 node = self._parentClass.GetScriptedModuleNode() 102 103 if self._sourceFiducialList != None: 104 node.SetParameter('FM_sourceFiducialList',self._sourceFiducialList.GetID()) 105 else: 106 node.SetParameter('FM_sourceFiducialList',"None") 107 108 if self._targetFiducialList != None: 109 node.SetParameter('FM_targetFiducialList',self._targetFiducialList.GetID()) 110 else: 111 node.SetParameter('FM_targetFiducialList',"None") 112 113 extentValues = self._thresholdSlider.GetExtent() 114 node.SetParameter('FM_lowerThreshold', extentValues[0]) 115 node.SetParameter('FM_higherThreshold', extentValues[1])
116
117 - def UpdateGUI(self):
118 SlicerVMTKAdvancedPageSkeleton.UpdateGUI(self) 119 120 node = self._parentClass.GetScriptedModuleNode() 121 122 123 self._sourceFiducialList = None 124 self._targetFiducialList = None 125 126 self._currentFiducialList = None 127 128 if (node.GetParameter("FM_sourceFiducialList")!="None" and node.GetParameter("FM_sourceFiducialList")): 129 self._sourceFiducialList = self._parentClass.GetLogic().GetMRMLScene().GetNodeByID(node.GetParameter("FM_sourceFiducialList")) 130 131 if (node.GetParameter("FM_targetFiducialList")!="None" and node.GetParameter("FM_targetFiducialList")): 132 self._targetFiducialList = self._parentClass.GetLogic().GetMRMLScene().GetNodeByID(node.GetParameter("FM_targetFiducialList")) 133 134 self.UpdateGUIByState() 135 136 self._parentClass.SetUpdatingOn() 137 self._thresholdSlider.SetExtent(node.GetParameter("FM_lowerThreshold"),node.GetParameter("FM_higherThreshold"),0,100,0,100) 138 self._parentClass.SetUpdatingOff()
139
140 - def BuildGUI(self):
141 SlicerVMTKAdvancedPageSkeleton.BuildGUI(self) 142 143 self._firstRowFrame.SetParent(self._parentFrame) 144 self._firstRowFrame.Create() 145 146 self._sourcePointsFrame.SetParent(self._parentFrame) 147 self._sourcePointsFrame.Create() 148 149 self._addSourcePointButton.SetParent(self._sourcePointsFrame.GetFrame()) 150 self._addSourcePointButton.Create() 151 152 self._delSourcePointButton.SetParent(self._sourcePointsFrame.GetFrame()) 153 self._delSourcePointButton.Create() 154 155 self._sourcePointsList.SetParent(self._sourcePointsFrame.GetFrame()) 156 self._sourcePointsList.Create() 157 158 self._targetPointsFrame.SetParent(self._parentFrame) 159 self._targetPointsFrame.Create() 160 161 self._addTargetPointButton.SetParent(self._targetPointsFrame.GetFrame()) 162 self._addTargetPointButton.Create() 163 164 self._delTargetPointButton.SetParent(self._targetPointsFrame.GetFrame()) 165 self._delTargetPointButton.Create() 166 167 self._targetPointsList.SetParent(self._targetPointsFrame.GetFrame()) 168 self._targetPointsList.Create() 169 170 self._secondRowFrame.SetParent(self._parentFrame) 171 self._secondRowFrame.Create() 172 173 self._thresholdFrame.SetParent(self._parentFrame) 174 self._thresholdFrame.Create() 175 176 self._thresholdSlider.SetParent(self._thresholdFrame.GetFrame()) 177 self._thresholdSlider.Create() 178 179 self._startButton.SetParent(self._parentFrame) 180 self._startButton.Create() 181 182 self._resetButton.SetParent(self._parentFrame) 183 self._resetButton.Create() 184 185 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 2 -in %s" % (self._firstRowFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 186 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 2 -in %s" % (self._secondRowFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 187 188 slicer.TkCall("pack %s -side left -expand y -padx 2 -pady 2 -in %s" % (self._sourcePointsFrame.GetWidgetName(), self._firstRowFrame.GetWidgetName())) 189 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._addSourcePointButton.GetWidgetName())) 190 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._sourcePointsList.GetWidgetName())) 191 slicer.TkCall("pack %s -side left -expand n -padx 2 -pady 2" % (self._delSourcePointButton.GetWidgetName())) 192 slicer.TkCall("pack %s -side left -expand y -padx 2 -pady 2 -in %s" % (self._targetPointsFrame.GetWidgetName(), self._firstRowFrame.GetWidgetName())) 193 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._addTargetPointButton.GetWidgetName())) 194 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._targetPointsList.GetWidgetName())) 195 slicer.TkCall("pack %s -side left -expand n -padx 2 -pady 2" % (self._delTargetPointButton.GetWidgetName())) 196 slicer.TkCall("pack %s -side left -expand y -padx 2 -pady 2 -in %s" % (self._thresholdFrame.GetWidgetName(), self._secondRowFrame.GetWidgetName())) 197 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._thresholdSlider.GetWidgetName())) 198 slicer.TkCall("pack %s -side right -expand n -padx 2 -pady 2 -in %s" % (self._startButton.GetWidgetName(), self._parentFrame.GetWidgetName())) 199 slicer.TkCall("pack %s -side right -expand n -padx 2 -pady 2 -in %s" % (self._resetButton.GetWidgetName(), self._parentFrame.GetWidgetName()))
200 201 # belongs to UpdateGUI
202 - def UpdateGUIByState(self):
203 204 self._sourcePointsFrame.AllowFrameToCollapseOff() 205 self._sourcePointsFrame.SetLabelText("Source points") 206 self._sourcePointsFrame.SetReliefToSunken() 207 208 self._addSourcePointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 209 self._addSourcePointButton.SetReliefToRaised() 210 self._addSourcePointButton.SetBackgroundColor(0.9,0.9,0.9) 211 self._addSourcePointButton.SetForegroundColor(0.2,0.6,0.2) 212 self._addSourcePointButton.SetText("Add Source Point") 213 self._addSourcePointButton.SetWidth(15) 214 self._addSourcePointButton.SetBalloonHelpString("Click to add new source point") 215 216 self._delSourcePointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 217 self._delSourcePointButton.SetReliefToRaised() 218 self._delSourcePointButton.SetBackgroundColor(0.9,0.9,0.9) 219 self._delSourcePointButton.SetForegroundColor(0.9,0.2,0.2) 220 self._delSourcePointButton.SetText("X") 221 self._delSourcePointButton.SetWidth(3) 222 self._delSourcePointButton.SetBalloonHelpString("Click to delete selected source point") 223 224 self._sourcePointsList.GetWidget().SetHeight(3) 225 self._sourcePointsList.GetWidget().SetSelectionModeToSingle() 226 self._sourcePointsList.GetWidget().DeleteAll() 227 228 self._targetPointsFrame.AllowFrameToCollapseOff() 229 self._targetPointsFrame.SetLabelText("Target points") 230 self._targetPointsFrame.SetReliefToSunken() 231 232 self._addTargetPointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 233 self._addTargetPointButton.SetReliefToRaised() 234 self._addTargetPointButton.SetBackgroundColor(0.9,0.9,0.9) 235 self._addTargetPointButton.SetForegroundColor(0.2,0.2,0.6) 236 self._addTargetPointButton.SetText("Add Target Point") 237 self._addTargetPointButton.SetWidth(15) 238 self._addTargetPointButton.SetBalloonHelpString("Click to add new target point") 239 240 self._delTargetPointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 241 self._delTargetPointButton.SetReliefToRaised() 242 self._delTargetPointButton.SetBackgroundColor(0.9,0.9,0.9) 243 self._delTargetPointButton.SetForegroundColor(0.9,0.2,0.2) 244 self._delTargetPointButton.SetText("X") 245 self._delTargetPointButton.SetWidth(3) 246 self._delTargetPointButton.SetBalloonHelpString("Click to delete selected target point") 247 248 self._targetPointsList.GetWidget().SetHeight(3) 249 self._targetPointsList.GetWidget().SetSelectionModeToSingle() 250 self._targetPointsList.GetWidget().DeleteAll() 251 252 self._parentClass.SetUpdatingOn() 253 self._thresholdFrame.AllowFrameToCollapseOff() 254 self._thresholdFrame.SetLabelText("Threshold of Gray Values") 255 self._thresholdFrame.SetReliefToSunken() 256 257 inVolumeNode = self._parentClass._inVolumeSelector.GetSelected() 258 259 if inVolumeNode: 260 261 # update min and max 262 imageMaxValue = round(inVolumeNode.GetImageData().ToArray().max(),0) 263 imageMinValue = round(inVolumeNode.GetImageData().ToArray().min(),0) 264 self._parentClass.SetUpdatingOn() 265 self._thresholdSlider.SetExtentRange(imageMinValue, imageMaxValue, 0, 100, 0, 100) 266 self._thresholdSlider.SetExtent(imageMinValue, imageMaxValue, 0, 100, 0, 100) 267 self._parentClass.SetUpdatingOff() 268 269 else: 270 271 self._parentClass.SetUpdatingOn() 272 self._thresholdSlider.SetExtentRange(0, 100, 0, 100, 0, 100) 273 self._thresholdSlider.SetExtent(0, 100, 0, 100, 0, 100) 274 self._parentClass.SetUpdatingOff() 275 276 self._thresholdSlider.SetReliefToSunken() 277 self._thresholdSlider.ZExtentVisibilityOff() 278 self._thresholdSlider.YExtentVisibilityOff() 279 self._thresholdSlider.SetEnabled(1) 280 self._thresholdSlider.GetXRange().SetLabelText("Gray Values of Vessels") 281 #self._thresholdSlider.SetEndCommand(self._parentClass.vtkScriptedModuleGUI, "Invoke CF_ExtentUpdate") 282 self._parentClass.SetUpdatingOff() 283 284 self._startButton.SetEnabled(0) 285 self._startButton.SetActiveBackgroundColor(0.9,0.9,0.9) 286 self._startButton.SetReliefToRaised() 287 self._startButton.SetBackgroundColor(0.9,0.9,0.9) 288 self._startButton.SetText("Start!") 289 self._startButton.SetHeight(2) 290 self._startButton.SetWidth(8) 291 self._startButton.SetBalloonHelpString("Click to start") 292 293 self._resetButton.SetEnabled(1) 294 self._resetButton.SetActiveBackgroundColor(0.9,0.9,0.9) 295 self._resetButton.SetReliefToRaised() 296 self._resetButton.SetBackgroundColor(0.9,0.9,0.9) 297 self._resetButton.SetText("Cancel") 298 self._resetButton.SetHeight(2) 299 self._resetButton.SetWidth(8) 300 self._resetButton.SetBalloonHelpString("Click to reset") 301 302 enoughInformation = False 303 304 if self._sourceFiducialList != None: 305 306 numberOfFiducials = self._sourceFiducialList.GetNumberOfFiducials() 307 308 if numberOfFiducials==0: 309 310 self._sourcePointsList.GetWidget().AppendUnique("<no source points>") 311 312 else: 313 314 for i in range(0,numberOfFiducials): 315 316 curLabelText = self._sourceFiducialList.GetNthFiducialLabelText(i) 317 curCoords = self._sourceFiducialList.GetNthFiducialXYZ(i) 318 319 self._sourcePointsList.GetWidget().AppendUnique(curLabelText+" - R:" + str(round(curCoords[0],1)) + " A:" + str(round(curCoords[1],1)) + " S:" + str(round(curCoords[2],1))) 320 321 enoughInformation = True 322 323 else: 324 325 self._sourcePointsList.GetWidget().AppendUnique("<no source points>") 326 327 328 if self._targetFiducialList != None: 329 330 numberOfFiducials = self._targetFiducialList.GetNumberOfFiducials() 331 332 if numberOfFiducials==0: 333 334 self._targetPointsList.GetWidget().AppendUnique("<no target points>") 335 enoughInformation = False 336 337 else: 338 339 for i in range(0,numberOfFiducials): 340 341 curLabelText = self._targetFiducialList.GetNthFiducialLabelText(i) 342 curCoords = self._targetFiducialList.GetNthFiducialXYZ(i) 343 344 self._targetPointsList.GetWidget().AppendUnique(curLabelText+" - R:" + str(round(curCoords[0],1)) + " A:" + str(round(curCoords[1],1)) + " S:" + str(round(curCoords[2],1))) 345 346 enoughInformation = True 347 348 else: 349 350 self._targetPointsList.GetWidget().AppendUnique("<no target points>") 351 enoughInformation = False 352 353 if enoughInformation: # target and source points exist 354 self._startButton.SetEnabled(1)
355
356 - def AddGUIObservers(self):
357 SlicerVMTKAdvancedPageSkeleton.AddGUIObservers(self) 358 359 self._addSourcePointButtonTag = self._parentClass.AddObserverByNumber(self._addSourcePointButton,vtkKWPushButton_InvokedEvent) 360 self._delSourcePointButtonTag = self._parentClass.AddObserverByNumber(self._delSourcePointButton,vtkKWPushButton_InvokedEvent) 361 self._addTargetPointButtonTag = self._parentClass.AddObserverByNumber(self._addTargetPointButton,vtkKWPushButton_InvokedEvent) 362 self._delTargetPointButtonTag = self._parentClass.AddObserverByNumber(self._delTargetPointButton,vtkKWPushButton_InvokedEvent) 363 364 self._thresholdSliderTag = self._parentClass.AddObserverByNumber(self._thresholdSlider, vtkKWExtent_EndChangeEvent) 365 366 self._startButtonTag = self._parentClass.AddObserverByNumber(self._startButton,vtkKWPushButton_InvokedEvent) 367 368 self._resetButtonTag = self._parentClass.AddObserverByNumber(self._resetButton,vtkKWPushButton_InvokedEvent)
369
370 - def RemoveGUIObservers(self):
371 SlicerVMTKAdvancedPageSkeleton.RemoveGUIObservers(self) 372 373 self._parentClass.RemoveObserver(self._addSourcePointButtonTag) 374 self._parentClass.RemoveObserver(self._delSourcePointButtonTag) 375 self._parentClass.RemoveObserver(self._addTargetPointButtonTag) 376 self._parentClass.RemoveObserver(self._delTargetPointButtonTag) 377 378 self._parentClass.RemoveObserver(self._thresholdSliderTag) 379 380 self._parentClass.RemoveObserver(self._startButtonTag) 381 self._parentClass.RemoveObserver(self._resetButtonTag)
382 383
384 - def ProcessGUIEvents(self,caller,event):
385 SlicerVMTKAdvancedPageSkeleton.ProcessGUIEvents(self,caller,event) 386 387 if caller == self._addSourcePointButton and event == vtkKWPushButton_InvokedEvent: 388 if self._parentClass.GetHelper().GetIsInteractiveMode() == 0: 389 self.InitAddSourcePoint() 390 elif self._parentClass.GetHelper().GetIsInteractiveMode() == 1: 391 self.TeardownAddSourcePoint() 392 elif caller == self._delSourcePointButton and event == vtkKWPushButton_InvokedEvent: 393 self.RemoveSourcePoint() 394 self._parentClass.UpdateMRML() 395 self.UpdateGUIByState() 396 397 elif caller == self._addTargetPointButton and event == vtkKWPushButton_InvokedEvent: 398 if self._parentClass.GetHelper().GetIsInteractiveMode() == 0: 399 self.InitAddTargetPoint() 400 elif self._parentClass.GetHelper().GetIsInteractiveMode() == 1: 401 self.TeardownAddTargetPoint() 402 elif caller == self._delTargetPointButton and event == vtkKWPushButton_InvokedEvent: 403 self.RemoveTargetPoint() 404 self._parentClass.UpdateMRML() 405 self.UpdateGUIByState() 406 407 elif caller == self._startButton and event == vtkKWPushButton_InvokedEvent: 408 self.Execute() 409 self._parentClass.UpdateMRML() 410 elif caller == self._resetButton and event == vtkKWPushButton_InvokedEvent: 411 self.DeleteFiducialListsFromScene(0) 412 self.Reset() 413 self._parentClass.UpdateMRML() 414 elif caller == self._thresholdSlider and event == vtkKWExtent_EndChangeEvent: 415 self._parentClass.UpdateMRML()
416 417 418 # 419 # if which == 1, delete only source 420 # if which == 2, delete only target 421 # else delete both 422 #
423 - def DeleteFiducialListsFromScene(self,which):
424 SlicerVMTKAdvancedPageSkeleton.DeleteFiducialListsFromScene(self,which) 425 426 node = self._parentClass.GetScriptedModuleNode() 427 428 if node: 429 430 scene = self._parentClass.GetLogic().GetMRMLScene() 431 432 if (which!=2): 433 434 if self._sourceFiducialList!=None: 435 if scene.IsNodePresent(self._sourceFiducialList): 436 # node is in scene, now delete 437 scene.RemoveNode(self._sourceFiducialList) 438 self._sourceFiducialList = None 439 440 if (which!=1): 441 442 if self._targetFiducialList!=None: 443 if scene.IsNodePresent(self._targetFiducialList): 444 # node is in scene, now delete 445 scene.RemoveNode(self._targetFiducialList) 446 self._targetFiducialList = None
447 448 449 450 451
452 - def InitAddSourcePoint(self):
453 454 scene = self._parentClass.GetLogic().GetMRMLScene() 455 456 if self._sourceFiducialList == None: 457 458 # no list created yet 459 self._sourceFiducialList = slicer.vtkMRMLFiducialListNode() 460 self._sourceFiducialList.SetName("VMTK Fast Marching Source Points") 461 self._sourceFiducialList.SetScene(scene) 462 self._sourceFiducialList.SetColor(0.2,0.6,0.2) 463 self._sourceFiducialList.SetGlyphTypeFromString("Circle2D") 464 self._sourceFiducialList.SetLocked(1) 465 scene.AddNode(self._sourceFiducialList) 466 self._sourcePointsList.GetWidget().DeleteAll() 467 468 #disable all other buttons 469 self._parentClass.UnLockInitInterface(0) 470 471 #change the button appeareance 472 self._addSourcePointButton.SetActiveBackgroundColor(0.2,0.6,0.2) 473 self._addSourcePointButton.SetReliefToSunken() 474 self._addSourcePointButton.SetBackgroundColor(0.2,0.6,0.2) 475 self._addSourcePointButton.SetForegroundColor(0.2,0.2,0.2) 476 self._addSourcePointButton.SetText("Stop adding!") 477 self._addSourcePointButton.SetWidth(15) 478 self._addSourcePointButton.SetBalloonHelpString("Click to stop adding new source points") 479 480 self._currentFiducialList = self._sourceFiducialList 481 self._currentFiducialListLabel = "SP" 482 self._parentClass.GetHelper().SetIsInteractiveMode(1,self)
483 484
485 - def TeardownAddSourcePoint(self):
486 487 self._parentClass.GetHelper().SetIsInteractiveMode(0,None) 488 489 #re-change the button appeareance 490 self._addSourcePointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 491 self._addSourcePointButton.SetReliefToRaised() 492 self._addSourcePointButton.SetBackgroundColor(0.9,0.9,0.9) 493 self._addSourcePointButton.SetForegroundColor(0.2,0.6,0.2) 494 self._addSourcePointButton.SetText("Add Source Point") 495 self._addSourcePointButton.SetWidth(15) 496 self._addSourcePointButton.SetBalloonHelpString("Click to add new source point") 497 498 self.UpdateGUIByState() 499 self._parentClass.UpdateMRML()
500 501
502 - def InitAddTargetPoint(self):
503 504 scene = self._parentClass.GetLogic().GetMRMLScene() 505 506 if self._targetFiducialList == None: 507 508 # no list created yet 509 self._targetFiducialList = slicer.vtkMRMLFiducialListNode() 510 self._targetFiducialList.SetName("VMTK Fast Marching Target Points") 511 self._targetFiducialList.SetScene(scene) 512 self._targetFiducialList.SetColor(0.2,0.2,0.6) 513 self._targetFiducialList.SetGlyphTypeFromString("Circle2D") 514 self._targetFiducialList.SetLocked(1) 515 scene.AddNode(self._targetFiducialList) 516 self._targetPointsList.GetWidget().DeleteAll() 517 518 #disable all other buttons 519 self._parentClass.UnLockInitInterface(0) 520 521 #change the button appeareance 522 self._addTargetPointButton.SetActiveBackgroundColor(0.2,0.2,0.6) 523 self._addTargetPointButton.SetReliefToSunken() 524 self._addTargetPointButton.SetBackgroundColor(0.2,0.2,0.6) 525 self._addTargetPointButton.SetForegroundColor(0.7,0.7,0.7) 526 self._addTargetPointButton.SetActiveForegroundColor(0.7,0.7,0.7) 527 self._addTargetPointButton.SetText("Stop adding!") 528 self._addTargetPointButton.SetWidth(15) 529 self._addTargetPointButton.SetBalloonHelpString("Click to stop adding new target points") 530 531 self._currentFiducialList = self._targetFiducialList 532 self._currentFiducialListLabel = "TP" 533 self._parentClass.GetHelper().SetIsInteractiveMode(1,self)
534 535
536 - def TeardownAddTargetPoint(self):
537 538 self._parentClass.GetHelper().SetIsInteractiveMode(0,None) 539 540 #re-change the button appeareance 541 self._addTargetPointButton.SetActiveBackgroundColor(0.9,0.9,0.9) 542 self._addTargetPointButton.SetReliefToRaised() 543 self._addTargetPointButton.SetBackgroundColor(0.9,0.9,0.9) 544 self._addTargetPointButton.SetForegroundColor(0.2,0.2,0.6) 545 self._addTargetPointButton.SetActiveForegroundColor(0.1,0.1,0.1) 546 self._addTargetPointButton.SetText("Add Target Point") 547 self._addTargetPointButton.SetWidth(15) 548 self._addTargetPointButton.SetBalloonHelpString("Click to add new target point") 549 550 self.UpdateGUIByState() 551 self._parentClass.UpdateMRML()
552
553 - def RemoveSourcePoint(self):
554 555 curSelectionId = self._sourcePointsList.GetWidget().GetSelectionIndex() 556 557 if curSelectionId != -1: 558 559 #at least one item selected, but which 560 curSelection = self._sourcePointsList.GetWidget().GetSelection() 561 562 if curSelection != "<no source points>": 563 564 self._sourceFiducialList.RemoveFiducial(curSelectionId)
565 566
567 - def RemoveTargetPoint(self):
568 569 curSelectionId = self._targetPointsList.GetWidget().GetSelectionIndex() 570 571 if curSelectionId != -1: 572 573 #at least one item selected, but which 574 curSelection = self._targetPointsList.GetWidget().GetSelection() 575 576 if curSelection != "<no target points>": 577 578 self._targetFiducialList.RemoveFiducial(curSelectionId)
579 580 581 # 582 # x,y 583 # which is the Name of the SliceWindow (Red,Yellow,Green) 584 #
585 - def HandleClickInSliceWindowWithCoordinates(self, which, coordinates):
586 SlicerVMTKAdvancedPageSkeleton.HandleClickInSliceWindowWithCoordinates(self, which, coordinates) 587 588 coordinatesRAS = self._parentClass.GetHelper().ConvertCoordinates2RAS(which,coordinates) 589 fiducial = self._currentFiducialList.AddFiducialWithXYZ(coordinatesRAS[0], coordinatesRAS[1], coordinatesRAS[2],0) 590 591 numberOfFiducials = self._currentFiducialList.GetNumberOfFiducials() 592 593 lastFiducial = 1 594 595 # always use new Ids for the fiducial label 596 if numberOfFiducials != 1: 597 for i in range(0,numberOfFiducials-1): 598 currentFiducialLabel = self._currentFiducialList.GetNthFiducialLabelText(i) 599 currentFiducialLabel = currentFiducialLabel.split("P")[1] 600 if int(currentFiducialLabel) >= lastFiducial: 601 lastFiducial = int(currentFiducialLabel)+1 602 603 self._currentFiducialList.SetNthFiducialLabelText(fiducial, self._currentFiducialListLabel+str(lastFiducial)) 604 self._parentClass.GetHelper().debug("Fiducial Added! More to come!")
605 606 # 607 # Execute the algorithm 608 #
609 - def Execute(self):
610 611 self._parentClass.SetUpdatingOn() 612 613 extentValues = self._thresholdSlider.GetExtent() 614 inVolumeNode = self._parentClass._inVolumeSelector.GetSelected() 615 lowerThreshold = extentValues[0] 616 higherThreshold = extentValues[1] 617 sourceSeedsNode = self._sourceFiducialList 618 targetSeedsNode = self._targetFiducialList 619 620 myLogic = self._parentClass.GetMyLogic() 621 resultContainer = myLogic.ExecuteFastMarching(inVolumeNode,lowerThreshold,higherThreshold,sourceSeedsNode,targetSeedsNode) 622 resultContainer = self._parentClass.GetHelper().SetAndMergeInitVolume(resultContainer) 623 self._parentClass.GetHelper().GenerateInitializationModel(resultContainer) 624 625 self._parentClass.SetUpdatingOff() 626 self._parentClass._state = 1 627 self._parentClass.UpdateGUIByState() 628 self._parentClass.UpdateMRML() # save the results
629 630 # 631 # Resets the GUI, all fiducial lists and sets any values to default 632 #
633 - def Reset(self):
634 SlicerVMTKAdvancedPageSkeleton.Reset(self) 635 636 self._sourceFiducialList = None 637 self._targetFiducialList = None 638 self._currentFiducialList = None 639 640 self.UpdateGUIByState()
641