Package VMTKVesselEnhancement :: Module SlicerVMTKVesselEnhancementGUI
[hide private]
[frames] | no frames]

Source Code for Module VMTKVesselEnhancement.SlicerVMTKVesselEnhancementGUI

  1  from SlicerScriptedModule import ScriptedModuleGUI 
  2  from Slicer import slicer 
  3   
  4   
  5  from time import strftime 
  6   
  7  from SlicerVMTKVesselEnhancementFrangiGUI import SlicerVMTKVesselEnhancementFrangiGUI 
  8  from SlicerVMTKVesselEnhancementSatoGUI import SlicerVMTKVesselEnhancementSatoGUI 
  9  from SlicerVMTKVesselEnhancementVEDGUI import SlicerVMTKVesselEnhancementVEDGUI 
 10  from SlicerVMTKVesselEnhancementLogic import SlicerVMTKVesselEnhancementLogic 
 11   
 12   
 13  vtkKWPushButton_InvokedEvent = 10000 
 14   
 15  vtkSlicerNodeSelectorWidget_NodeSelectedEvent = 11000 
 16   
17 -class VMTKVesselEnhancement(ScriptedModuleGUI):
18
19 - def debug(self,msg):
20 21 '''debug prints to stdout (better than print because of flush)''' 22 23 # declaration of new variable without type specification 24 debugMode = 1 25 26 if debugMode: # debugMode is a bool 27 28 # the print statement needs strings as input, so every value to output has to be 29 # casted 30 print "[slicerVMTKVesselEnhancement " + strftime("%H:%M:%S") + "] " + str(msg) 31 import sys 32 sys.stdout.flush()
33
34 - def __init__(self):
35 36 ScriptedModuleGUI.__init__(self) 37 38 self.SetCategory("Vascular Modeling Toolkit") 39 self.SetModuleName("Vessel Enhancement using VMTK") 40 self.SetGUIName("Vessel Enhancement using VMTK") 41 42 self._moduleNodeSelector = slicer.vtkSlicerNodeSelectorWidget() 43 self._inVolumeSelector = slicer.vtkSlicerNodeSelectorWidget() 44 self._outVolumeSelector = slicer.vtkSlicerNodeSelectorWidget() 45 46 self._topFrame = slicer.vtkSlicerModuleCollapsibleFrame() 47 self._advancedFrame = slicer.vtkSlicerModuleCollapsibleFrame() 48 self._advancedTabs = slicer.vtkKWNotebook() 49 50 self._logic = SlicerVMTKVesselEnhancementLogic(self) 51 52 self._updating = 0 53 54 self._pages = []
55
56 - def Destructor(self):
57 58 for page in self._pages: 59 page.Destructor() 60 61 self._moduleNodeSelector.SetParent(None) 62 self._moduleNodeSelector = None 63 self._inVolumeSelector.SetParent(None) 64 self._inVolumeSelector = None 65 self._outVolumeSelector.SetParent(None) 66 self._outVolumeSelector = None 67 68 self._advancedFrame.SetParent(None) 69 self._advancedFrame = None 70 self._advancedTabs.SetParent(None) 71 self._advancedTabs = None 72 73 self._logic = None
74
75 - def RemoveMRMLNodeObservers(self):
76 pass
77
78 - def RemoveLogicObservers(self):
79 pass
80
81 - def AddGUIObservers(self):
82 self.moduleNodeSelectorSelectedTag = self.AddObserverByNumber(self._moduleNodeSelector,vtkSlicerNodeSelectorWidget_NodeSelectedEvent) 83 self._inVolumeSelectorSelectedTag = self.AddObserverByNumber(self._inVolumeSelector,vtkSlicerNodeSelectorWidget_NodeSelectedEvent) 84 85 for page in self._pages: 86 page.AddGUIObservers()
87
88 - def RemoveGUIObservers(self):
89 for page in self._pages: 90 page.RemoveGUIObservers()
91
92 - def ProcessGUIEvents(self,caller,event):
93 if not self._updating: 94 95 if caller == self._inVolumeSelector and event == vtkSlicerNodeSelectorWidget_NodeSelectedEvent and self._inVolumeSelector.GetSelected(): 96 self.UpdateMRML() # update reference to volume 97 self.UpdateGUI() 98 elif caller == self._outVolumeSelector and event == vtkSlicerNodeSelectorWidget_NodeSelectedEvent and self._outVolumeSelector.GetSelected(): 99 self.UpdateMRML() # update reference to volume 100 self.UpdateGUI() 101 elif caller == self._moduleNodeSelector and event == vtkSlicerNodeSelectorWidget_NodeSelectedEvent and self._moduleNodeSelector.GetSelected(): 102 node = self._moduleNodeSelector.GetSelected() 103 self.GetLogic().SetAndObserveScriptedModuleNode(node) 104 self.SetAndObserveScriptedModuleNode(node) 105 106 self.UpdateGUI() 107 108 for page in self._pages: 109 page.ProcessGUIEvents(caller,event)
110 111
112 - def UpdateMRML(self):
113 114 if not self._updating: 115 116 self._updating = 1 117 118 node = self.GetScriptedModuleNode() 119 120 if not node or not self._moduleNodeSelector.GetSelected(): 121 self.debug("no node associated to this scriptedmodule, creating new..") 122 self._moduleNodeSelector.SetSelectedNew("vtkMRMLScriptedModuleNode") 123 self._moduleNodeSelector.ProcessNewNodeCommand("vtkMRMLScriptedModuleNode", "VMTKEnhParameters") 124 node = self._moduleNodeSelector.GetSelected() 125 self.GetLogic().SetAndObserveScriptedModuleNode(node) 126 self.SetScriptedModuleNode(node) 127 self.debug("new node created!") 128 129 130 131 for page in self._pages: 132 page.UpdateMRML() 133 134 node.SetParameter('isValidVMTKnode',"1") 135 136 node.RequestParameterList() 137 self.debug("parameterlist which was just set in main UpdateMRML " + node.GetParameterList()) 138 139 self._updating = 0
140
141 - def UpdateGUI(self):
142 143 if not self._updating: 144 145 self._updating = 1 146 147 148 node = self.GetScriptedModuleNode() 149 150 self.debug("calling UpdateGUI") 151 152 if node: 153 154 if str(node.GetParameter('isValidVMTKnode'))=="1": 155 156 self.debug("found valid VMTK node") 157 158 for page in self._pages: 159 page.UpdateGUI() 160 161 node.RequestParameterList() 162 self.debug("parameterlist which was just read in main UpdateGUI " + str(node.GetParameterList())) 163 164 self.CreateOutVolumeNode() 165 166 else: 167 168 for page in self._pages: 169 page.Reset() 170 171 self._updating = 0
172
173 - def CreateOutVolumeNode(self):
174 175 if not self._outVolumeSelector.GetSelected(): 176 177 self._outVolumeSelector.SetSelectedNew("vtkMRMLScalarVolumeNode") 178 self._outVolumeSelector.ProcessNewNodeCommand("vtkMRMLScalarVolumeNode", "EnhancedVesselnessOut")
179 180
181 - def ProcessMRMLEvents(self,caller,event):
182 pass
183
184 - def BuildGUI(self):
185 186 self.GetUIPanel().AddPage("VesselEnhancement","VesselEnhancement","") 187 self._vmtkVesEnhPage = self.GetUIPanel().GetPageWidget("VesselEnhancement") 188 helpText = "**Vessel highlighting using VMTK Vessel Enhancement Filters**, developed by Daniel Haehn. \n\n\nFor further information to FrangiVesselness see <a>http://www.tecn.upf.es/~afrangi/articles/miccai1998.pdf</a>.\n\n\nDetails on SatoVesselness can be found here <a>http://www.spl.harvard.edu/archive/spl-pre2007/pages/papers/yoshi/cr.html</a>.\n\n\nInformation to Vessel Enhancement Diffusion is available at <a>http://www.springerlink.com/content/d11hxca163edccwk/fulltext.pdf</a>." 189 aboutText = "This work is supported by NA-MIC, NAC, BIRN, NCIGT, and the Slicer Community. See http://www.slicer.org for details." 190 self._helpAboutFrame = self.BuildHelpAndAboutFrame(self._vmtkVesEnhPage,helpText,aboutText) 191 192 self.debug("Creating VesselEnhancement GUI") 193 194 # initialization tabs start here 195 self._topFrame.SetParent(self._vmtkVesEnhPage) 196 self._topFrame.Create() 197 self._topFrame.SetLabelText("Input/Output") 198 self._topFrame.ExpandFrame() 199 slicer.TkCall("pack %s -side top -anchor nw -fill x -padx 2 -pady 2 -in %s" % (self._topFrame.GetWidgetName(),self._vmtkVesEnhPage.GetWidgetName())) 200 201 202 self._moduleNodeSelector.SetNodeClass("vtkMRMLScriptedModuleNode", "ScriptedModuleName", self.GetLogic().GetModuleName(), "VMTKParameters") 203 self._moduleNodeSelector.NewNodeEnabledOn() 204 self._moduleNodeSelector.NoneEnabledOn() 205 self._moduleNodeSelector.ShowHiddenOn() 206 self._moduleNodeSelector.SetParent(self._topFrame.GetFrame()) 207 self._moduleNodeSelector.Create() 208 self._moduleNodeSelector.SetMRMLScene(self.GetLogic().GetMRMLScene()) 209 self._moduleNodeSelector.UpdateMenu() 210 self._moduleNodeSelector.SetBorderWidth(2) 211 self._moduleNodeSelector.SetLabelText("Module Parameters:") 212 self._moduleNodeSelector.SetBalloonHelpString("select a VMTK node from the current mrml scene.") 213 slicer.TkCall("pack %s -side top -anchor e -padx 20 -pady 4" % self._moduleNodeSelector.GetWidgetName()) 214 215 self._inVolumeSelector.SetNodeClass("vtkMRMLScalarVolumeNode","","","") 216 self._inVolumeSelector.SetParent(self._topFrame.GetFrame()) 217 self._inVolumeSelector.Create() 218 self._inVolumeSelector.SetMRMLScene(self.GetLogic().GetMRMLScene()) 219 self._inVolumeSelector.UpdateMenu() 220 self._inVolumeSelector.SetBorderWidth(2) 221 self._inVolumeSelector.SetLabelText("Input Volume: ") 222 self._inVolumeSelector.SetBalloonHelpString("select an input volume from the current mrml scene.") 223 slicer.TkCall("pack %s -side top -anchor e -padx 20 -pady 4" % self._inVolumeSelector.GetWidgetName()) 224 225 226 self._outVolumeSelector.SetNodeClass("vtkMRMLScalarVolumeNode","","","EnhancedVesselnessOut") 227 self._outVolumeSelector.SetNewNodeEnabled(1) 228 self._outVolumeSelector.SetParent(self._topFrame.GetFrame()) 229 self._outVolumeSelector.Create() 230 self._outVolumeSelector.SetMRMLScene(self.GetLogic().GetMRMLScene()) 231 self._outVolumeSelector.UpdateMenu() 232 self._outVolumeSelector.SetBorderWidth(2) 233 self._outVolumeSelector.SetLabelText("Output Volume: ") 234 self._outVolumeSelector.SetBalloonHelpString("select an output volume from the current mrml scene.") 235 slicer.TkCall("pack %s -side top -anchor e -padx 20 -pady 4" % self._outVolumeSelector.GetWidgetName()) 236 237 # initialization tabs start here 238 self._advancedFrame.SetParent(self._vmtkVesEnhPage) 239 self._advancedFrame.Create() 240 self._advancedFrame.SetLabelText("Vessel Enhancement") 241 self._advancedFrame.ExpandFrame() 242 slicer.TkCall("pack %s -side top -anchor nw -fill x -padx 2 -pady 2 -in %s" % (self._advancedFrame.GetWidgetName(),self._vmtkVesEnhPage.GetWidgetName())) 243 244 245 self._advancedTabs.SetParent(self._advancedFrame.GetFrame()) 246 self._advancedTabs.Create() 247 #self._advancedTabs.AddObserver(2088,self.ProcessClickOnInitTabs) 248 249 self._advancedTabs.AddPage("FrangiVesselness","FrangiVesselness","") 250 slicer.TkCall("pack %s -side top -anchor nw -fill x -padx 2 -pady 2" % self._advancedTabs.GetWidgetName()) 251 id = self._advancedTabs.GetFrame("FrangiVesselness") 252 self._advancedFrangiPanel = SlicerVMTKVesselEnhancementFrangiGUI(id,self) 253 self._advancedFrangiPanel.BuildGUI() 254 self._pages.append(self._advancedFrangiPanel) 255 256 self._advancedTabs.AddPage("SatoVesselness","SatoVesselness","") 257 slicer.TkCall("pack %s -side top -anchor nw -fill x -padx 2 -pady 2" % self._advancedTabs.GetWidgetName()) 258 id = self._advancedTabs.GetFrame("SatoVesselness") 259 self._advancedSatoPanel = SlicerVMTKVesselEnhancementSatoGUI(id,self) 260 self._advancedSatoPanel.BuildGUI() 261 self._pages.append(self._advancedSatoPanel) 262 263 self._advancedTabs.AddPage("VED","VesselEnhancingDiffusion (interface under construction)","") 264 slicer.TkCall("pack %s -side top -anchor nw -fill x -padx 2 -pady 2" % self._advancedTabs.GetWidgetName()) 265 id = self._advancedTabs.GetFrame("VED") 266 self._advancedVEDPanel = SlicerVMTKVesselEnhancementVEDGUI(id,self) 267 self._advancedVEDPanel.BuildGUI() 268 self._pages.append(self._advancedVEDPanel) 269 270 self.debug("Creating VesselEnhancement subclasses GUI")
271 272
273 - def TearDownGUI(self):
274 if self.GetUIPanel().GetUserInterfaceManager(): 275 self.GetUIPanel().RemovePage("VesselEnhancement")
276