Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkScriptedExampleDisplayableManager.py
Go to the documentation of this file.
2# ScriptedExampleDisplayableManager
3#
4
5#
6# Since it's not possible to derive a VTK class in python, all scripted DisplayableManager
7# should expose the following methods:
8# - Create
9# - GetMRMLSceneEventsToObserve
10# - ProcessMRMLSceneEvents
11# - ProcessMRMLNodesEvents
12# - RemoveMRMLObservers
13# - UpdateFromMRML
14# - OnInteractorStyleEvent
15# - OnMRMLDisplayableNodeModifiedEvent
16#
17# The constructor has one parameter named 'parent' corresponding to the associated instance of
18# vtkScriptedDisplayableManager in the C++ world.
19#
20# The python methods listed above corresponds to the implementation of the virtual method
21# available in vtkScriptedDisplayableManager.
22#
23# The only exception is the virtual method SetMRMLSceneInternal, the python class only needs to
24# implement the method GetMRMLSceneEventsToObserve. This later one just return a list of integer
25# representing the eventid to observe.
26#
27# It's also possible to access the API of the associated C++ instance using the self.Parent
28# For example:
29# self.Parent.RemoveInteractorStyleObservableEvent(26) # vtkCommand::MouseWheelForwardEvent
30#
31# Make also sure NOT to call the corresponding C++ method from it's python equivalent, it will
32# result in an infinite loop.
33# The following statement will likely lead to an unstable state:
34# def Create(self): self.Parent.Create()
35#
36# If a a method isn't implemented, the following syntax should be used:
37# def Create(self): pass
38#
39# NOTE
40# Ideally, a DisplayableManager should deal only with MRMLNodes. Incriminated code should
41# be moved either in the DisplayableManager itself, in the associated MRML Node or
42# in a MRMLNode helper class.
43#
44# TODO
45# While porting existing code, to overcome this problem, the following need to be done:
46# - DisplayableManager abstract base class should have a reference to the current MRMLApplicationLogic
47# - The MRMLApplicationLogic should contain a map of logics
48# - The list of logic internally used by the qSlicerLayoutManager should be removed and
49# the list from the MRMLApplicationLogic used instead.
50
51
53 def __init__(self, parent):
54 self.Parent = parent
55 print("vtkScriptedExampleDisplayableManager - __init__")
56
57 def Create(self):
58 print("vtkScriptedExampleDisplayableManager - Create")
59 pass
60
62 print("vtkScriptedExampleDisplayableManager - GetMRMLSceneEventsToObserve")
63 sceneEvents = vtkIntArray()
64 sceneEvents.InsertNextValue(slicer.vtkMRMLScene.NodeAddedEvent)
65 sceneEvents.InsertNextValue(slicer.vtkMRMLScene.NodeRemovedEvent)
66 return sceneEvents
67
68 def ProcessMRMLSceneEvents(self, scene, eventid, node):
69 print("vtkScriptedExampleDisplayableManager - ProcessMRMLSceneEvents(eventid,", eventid, ")")
70 pass
71
72 def ProcessMRMLNodesEvents(self, scene, eventid, callData):
73 print("vtkScriptedExampleDisplayableManager - ProcessMRMLNodesEvents(eventid,", eventid, ")")
74 pass
75
77 print("vtkScriptedExampleDisplayableManager - RemoveMRMLObservers")
78 pass
79
80 def UpdateFromMRML(self):
81 print("vtkScriptedExampleDisplayableManager - UpdateFromMRML")
82 pass
83
84 def OnInteractorStyleEvent(self, eventid):
85 print("vtkScriptedExampleDisplayableManager - OnInteractorStyleEvent(eventid,", eventid, ")")
86
88 print("vtkScriptedExampleDisplayableManager - onMRMLDisplayableNodeModifiedEvent")