1 from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton
2 from Slicer import slicer
3
4 vtkKWPushButton_InvokedEvent = 10000
5 vtkKWExtent_EndChangeEvent = 10002
6
7
8
9
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
21 self._firstRowFrame = slicer.vtkKWFrame()
22
23
24 self._sourcePointsFrame = slicer.vtkKWFrameWithLabel()
25
26 self._addSourcePointButton = slicer.vtkKWPushButton()
27 self._delSourcePointButton = slicer.vtkKWPushButton()
28 self._sourcePointsList = slicer.vtkKWListBoxWithScrollbars()
29
30
31
32 self._targetPointsFrame = slicer.vtkKWFrameWithLabel()
33
34 self._addTargetPointButton = slicer.vtkKWPushButton()
35 self._delTargetPointButton = slicer.vtkKWPushButton()
36 self._targetPointsList = slicer.vtkKWListBoxWithScrollbars()
37
38
39 self._secondRowFrame = slicer.vtkKWFrame()
40
41
42 self._thresholdFrame = slicer.vtkKWFrameWithLabel()
43 self._thresholdSlider = slicer.vtkKWExtent()
44
45 self._startButton = slicer.vtkKWPushButton()
46 self._resetButton = slicer.vtkKWPushButton()
47
48
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
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
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
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
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
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
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:
354 self._startButton.SetEnabled(1)
355
369
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
416
417
418
419
420
421
422
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
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
445 scene.RemoveNode(self._targetFiducialList)
446 self._targetFiducialList = None
447
448
449
450
451
453
454 scene = self._parentClass.GetLogic().GetMRMLScene()
455
456 if self._sourceFiducialList == None:
457
458
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
469 self._parentClass.UnLockInitInterface(0)
470
471
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
486
487 self._parentClass.GetHelper().SetIsInteractiveMode(0,None)
488
489
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
503
504 scene = self._parentClass.GetLogic().GetMRMLScene()
505
506 if self._targetFiducialList == None:
507
508
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
519 self._parentClass.UnLockInitInterface(0)
520
521
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
537
538 self._parentClass.GetHelper().SetIsInteractiveMode(0,None)
539
540
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
554
555 curSelectionId = self._sourcePointsList.GetWidget().GetSelectionIndex()
556
557 if curSelectionId != -1:
558
559
560 curSelection = self._sourcePointsList.GetWidget().GetSelection()
561
562 if curSelection != "<no source points>":
563
564 self._sourceFiducialList.RemoveFiducial(curSelectionId)
565
566
568
569 curSelectionId = self._targetPointsList.GetWidget().GetSelectionIndex()
570
571 if curSelectionId != -1:
572
573
574 curSelection = self._targetPointsList.GetWidget().GetSelection()
575
576 if curSelection != "<no target points>":
577
578 self._targetFiducialList.RemoveFiducial(curSelectionId)
579
580
581
582
583
584
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
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
608
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()
629
630
631
632
641