1 from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton
2
3 from Slicer import slicer
4
5 vtkKWPushButton_InvokedEvent = 10000
6
7
8
9
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
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
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
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
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
134 self._startButton.SetEnabled(1)
135
136 else:
137
138 self._seedPointsList.GetWidget().AppendUnique("<no seed points>")
139
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
185
186
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
227
228
229
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
243 scene.RemoveNode(self._seedFiducialList)
244 self._seedFiducialList = None
245
246
247
249
250 scene = self._parentClass.GetLogic().GetMRMLScene()
251
252 if self._seedFiducialList == None:
253
254
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
265 self._parentClass.UnLockInitInterface(0)
266 self._startButton.SetEnabled(0)
267
268
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
282
283 self._parentClass.GetHelper().SetIsInteractiveMode(0,None)
284
285
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
298
299 curSelectionId = self._seedPointsList.GetWidget().GetSelectionIndex()
300
301 if curSelectionId != -1:
302
303
304 curSelection = self._seedPointsList.GetWidget().GetSelection()
305
306 if curSelection != "<no source points>":
307
308 self._seedFiducialList.RemoveFiducial(curSelectionId)
309
310
311
312
313
314
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
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
343
360
361
362
363
364
371