I’ve created a listener when SegmentationNodes are added to my scene, something like this:
@vtk.calldata_type(vtk.VTK_OBJECT) def onNodeAdded(caller, event, node): if node.IsA( "vtkMRMLSegmentationNode" ): # call `myFunction()` in current thread myFunction( node ) slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, onNodeAdded)
Actually, I’m performing some editor effects automatically whenever I add a SegmentationNode.
If I don’t use the callback (i.e.
slicer.mrmlScene.AddObserver() not called) and do the steps manually: call
myFunction() in the interpreter after the node was added, things works as expected. However, if I add the callback as an observer (above code block), something wrong happens so
myFunction() fails. I guess this is because the SegmentationNode has to be fully added in order for
myFunction() to work.
How can I call
myFunction() after the SegmentationNode and its dependencies was completely added? A timed callback to
myFunction() can be a solution (practically but not completely safe in theory).