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

Source Code for Module SlicerVMTKLevelSet.SlicerVMTKInitializationThresholdGUI

  1  from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton 
  2  from Slicer import slicer 
  3   
  4  vtkKWPushButton_InvokedEvent = 10000 
  5  vtkKWExtent_EndChangeEvent = 10002 
  6  ### 
  7  ### threshold initialization page (derived from skeleton) 
  8  ### 
9 -class SlicerVMTKInitializationThresholdGUI(SlicerVMTKAdvancedPageSkeleton):
10
11 - def __init__(self,parentFrame,parentClass):
12 SlicerVMTKAdvancedPageSkeleton.__init__(self,parentFrame,parentClass) 13 14 #top frame starts 15 self._firstRowFrame = slicer.vtkKWFrame() 16 17 #middle frame starts 18 self._secondRowFrame = slicer.vtkKWFrame() 19 20 #threshold frame starts 21 self._thresholdFrame = slicer.vtkKWFrameWithLabel() 22 self._thresholdSlider = slicer.vtkKWExtent() 23 24 self._startButton = slicer.vtkKWPushButton() 25 self._resetButton = slicer.vtkKWPushButton()
26 27
28 - def Destructor(self):
29 SlicerVMTKAdvancedPageSkeleton.Destructor(self) 30 31 self._firstRowFrame.SetParent(None) 32 self._firstRowFrame = None 33 self._secondRowFrame.SetParent(None) 34 self._secondRowFrame = None 35 self._thresholdFrame.SetParent(None) 36 self._thresholdFrame = None 37 self._thresholdSlider.SetParent(None) 38 self._thresholdSlider = None 39 40 self._startButton.SetParent(None) 41 self._startButton = None 42 self._resetButton.SetParent(None) 43 self._resetButton = None
44 45 46
47 - def BuildGUI(self):
48 SlicerVMTKAdvancedPageSkeleton.BuildGUI(self) 49 50 self._firstRowFrame.SetParent(self._parentFrame) 51 self._firstRowFrame.Create() 52 53 self._secondRowFrame.SetParent(self._parentFrame) 54 self._secondRowFrame.Create() 55 56 self._thresholdFrame.SetParent(self._parentFrame) 57 self._thresholdFrame.Create() 58 59 60 self._thresholdSlider.SetParent(self._thresholdFrame.GetFrame()) 61 self._thresholdSlider.Create() 62 63 64 self._startButton.SetParent(self._parentFrame) 65 self._startButton.Create() 66 67 68 self._resetButton.SetParent(self._parentFrame) 69 self._resetButton.Create() 70 71 self.UpdateGUIByState() 72 73 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 2 -in %s" % (self._firstRowFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 74 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 2 -in %s" % (self._secondRowFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 75 76 slicer.TkCall("pack %s -side right -expand n -padx 2 -pady 2 -in %s" % (self._startButton.GetWidgetName(), self._parentFrame.GetWidgetName())) 77 slicer.TkCall("pack %s -side right -expand n -padx 2 -pady 2 -in %s" % (self._resetButton.GetWidgetName(), self._parentFrame.GetWidgetName())) 78 79 slicer.TkCall("pack %s -side left -expand y -padx 2 -pady 2 -in %s" % (self._thresholdFrame.GetWidgetName(), self._secondRowFrame.GetWidgetName())) 80 slicer.TkCall("pack %s -side top -expand n -padx 2 -pady 2" % (self._thresholdSlider.GetWidgetName()))
81 82 83
84 - def UpdateMRML(self):
85 SlicerVMTKAdvancedPageSkeleton.UpdateMRML(self) 86 87 node = self._parentClass.GetScriptedModuleNode() 88 89 extentValues = self._thresholdSlider.GetExtent() 90 node.SetParameter('TH_lowerThreshold', extentValues[0]) 91 node.SetParameter('TH_higherThreshold', extentValues[1])
92
93 - def UpdateGUI(self):
94 SlicerVMTKAdvancedPageSkeleton.UpdateGUI(self) 95 96 node = self._parentClass.GetScriptedModuleNode() 97 self.UpdateGUIByState() 98 99 self._parentClass.SetUpdatingOn() 100 self._thresholdSlider.SetExtent(node.GetParameter("TH_lowerThreshold"),node.GetParameter("TH_higherThreshold"),0,100,0,100) 101 self._parentClass.SetUpdatingOff()
102 103 # belongs to UpdateGUI
104 - def UpdateGUIByState(self):
105 106 self._thresholdFrame.AllowFrameToCollapseOff() 107 self._thresholdFrame.SetLabelText("Threshold of Gray Values") 108 self._thresholdFrame.SetReliefToSunken() 109 110 111 inVolumeNode = self._parentClass._inVolumeSelector.GetSelected() 112 113 if inVolumeNode: 114 115 # update min and max 116 imageMaxValue = round(inVolumeNode.GetImageData().ToArray().max(),0) 117 imageMinValue = round(inVolumeNode.GetImageData().ToArray().min(),0) 118 self._parentClass.SetUpdatingOn() 119 self._thresholdSlider.SetExtentRange(imageMinValue, imageMaxValue, 0, 100, 0, 100) 120 self._thresholdSlider.SetExtent(imageMinValue, imageMaxValue, 0, 100, 0, 100) 121 self._parentClass.SetUpdatingOff() 122 123 else: 124 125 self._parentClass.SetUpdatingOn() 126 self._thresholdSlider.SetExtentRange(0, 100, 0, 100, 0, 100) 127 self._thresholdSlider.SetExtent(0, 100, 0, 100, 0, 100) 128 self._parentClass.SetUpdatingOff() 129 130 131 self._thresholdSlider.SetReliefToSunken() 132 self._thresholdSlider.ZExtentVisibilityOff() 133 self._thresholdSlider.YExtentVisibilityOff() 134 self._thresholdSlider.GetXRange().SetLabelText("Gray Values of Vessels") 135 136 self._startButton.SetEnabled(1) 137 self._startButton.SetActiveBackgroundColor(0.9,0.9,0.9) 138 self._startButton.SetReliefToRaised() 139 self._startButton.SetBackgroundColor(0.9,0.9,0.9) 140 self._startButton.SetText("Start!") 141 self._startButton.SetWidth(8) 142 self._startButton.SetHeight(2) 143 self._startButton.SetBalloonHelpString("Click to start") 144 145 self._resetButton.SetEnabled(1) 146 self._resetButton.SetActiveBackgroundColor(0.9,0.9,0.9) 147 self._resetButton.SetReliefToRaised() 148 self._resetButton.SetBackgroundColor(0.9,0.9,0.9) 149 self._resetButton.SetText("Cancel") 150 self._resetButton.SetWidth(8) 151 self._resetButton.SetHeight(2) 152 self._resetButton.SetBalloonHelpString("Click to reset")
153
154 - def AddGUIObservers(self):
155 SlicerVMTKAdvancedPageSkeleton.AddGUIObservers(self) 156 157 self._thresholdSliderTag = self._parentClass.AddObserverByNumber(self._thresholdSlider, vtkKWExtent_EndChangeEvent) 158 159 self._startButtonTag = self._parentClass.AddObserverByNumber(self._startButton,vtkKWPushButton_InvokedEvent) 160 161 self._resetButtonTag = self._parentClass.AddObserverByNumber(self._resetButton,vtkKWPushButton_InvokedEvent)
162 163 164
165 - def RemoveGUIObservers(self):
166 SlicerVMTKAdvancedPageSkeleton.RemoveGUIObservers(self) 167 168 169 self._parentClass.RemoveObserver(self._thresholdSliderTag) 170 171 172 self._parentClass.RemoveObserver(self._startButtonTag) 173 self._parentClass.RemoveObserver(self._resetButtonTag)
174 175 176 177
178 - def ProcessGUIEvents(self,caller,event):
179 SlicerVMTKAdvancedPageSkeleton.ProcessGUIEvents(self,caller,event) 180 181 182 if caller == self._startButton and event == vtkKWPushButton_InvokedEvent: 183 184 self.Execute() 185 self._parentClass.UpdateMRML() 186 elif caller == self._resetButton and event == vtkKWPushButton_InvokedEvent: 187 188 self.Reset() 189 self._parentClass.UpdateMRML() 190 elif caller == self._thresholdSlider and event == vtkKWExtent_EndChangeEvent: 191 self._parentClass.UpdateMRML()
192 193
194 - def Execute(self):
195 196 197 self._parentClass.SetUpdatingOn() 198 199 extentValues = self._thresholdSlider.GetExtent() 200 inVolumeNode = self._parentClass._inVolumeSelector.GetSelected() 201 lowerThreshold = extentValues[0] 202 higherThreshold = extentValues[1] 203 204 myLogic = self._parentClass.GetMyLogic() 205 resultContainer = myLogic.ExecuteThreshold(inVolumeNode,lowerThreshold,higherThreshold) 206 resultContainer = self._parentClass.GetHelper().SetAndMergeInitVolume(resultContainer) 207 self._parentClass.GetHelper().GenerateInitializationModel(resultContainer) 208 209 self._parentClass.SetUpdatingOff() 210 self._parentClass._state = 1 211 self._parentClass.UpdateGUIByState() 212 self._parentClass.UpdateMRML() # save the results
213 214 215
216 - def Reset(self):
220