Program Listing for File vtkMRMLLayerDMScriptedPipeline.py

Return to documentation for file (MRMLDM/Python/vtkMRMLLayerDMScriptedPipeline.py)

from typing import Any

from slicer import (
    vtkMRMLAbstractViewNode,
    vtkMRMLAbstractWidget,
    vtkMRMLInteractionEventData,
    vtkMRMLLayerDMPipelineI,
    vtkMRMLLayerDMPipelineManager,
    vtkMRMLLayerDMScriptedPipelineBridge,
    vtkMRMLNode,
    vtkMRMLScene,
)
from vtk import vtkCamera, vtkRenderer, vtkObject


class vtkMRMLLayerDMScriptedPipeline(vtkMRMLLayerDMScriptedPipelineBridge):
    """
    Python base class for all Layer Displayable Manager pipelines.
    """

    def __init__(self):
        self.SetPythonObject(self)

    @property
    def viewNode(self) -> vtkMRMLAbstractViewNode:
        """
        Property returning the current view node on which the pipeline is attached.
        """
        return self.GetViewNode()

    @property
    def displayNode(self) -> vtkMRMLNode:
        """
        Property returning the current display node for which the pipeline was created.
        """
        return self.GetDisplayNode()

    def CanProcessInteractionEvent(self, eventData: vtkMRMLInteractionEventData) -> tuple[bool, float]:
        """
        Should return true + distance2 to interaction if the pipeline can process the input event data.
        :param eventData: The MRML event needing to be processed
        :return: (bool, distance2) default = False, float_max
        """
        import sys

        return False, sys.float_info.max

    def GetCustomCamera(self) -> vtkCamera | None:
        """
        Custom pipeline camera.
        If the returned value is not None, then the pipeline (or dedicated logic) is expected to handle its own camera.
        Otherwise, the pipeline will be moved in a renderer with a default camera synchronized on its view default camera.

        :return: None by default
        """
        return None

    def GetMouseCursor(self) -> int:
        """
        Custom mouse cursor from VTK mouse cursor enum.
        This value is only used if the pipeline actually processes an event and is ignore otherwise.
        :return: 0 by default.
        """
        return 0

    def GetRenderOrder(self) -> int:
        """
        Arbitrary render order number where the pipeline wants to be displayed.
        Return 0 to be at the default order (main 3D Slicer pipelines)
        Return larger values to be rendered on top of pipelines with lower render orders.

        See also: vtkMRMLLayerDMLayerManager
        :return: default = 0
        """
        return 0

    def GetWidgetState(self) -> int:
        """
        Current widget state of the pipeline.
        :return: default = WidgetStateIdle
        """
        return vtkMRMLAbstractWidget.WidgetStateIdle

    def LoseFocus(self, eventData: vtkMRMLInteractionEventData | None) -> None:
        """
        Triggered when the pipeline had focus (processed an interaction) and loses the focus (other pipeline
        handled the new interaction or window leave event).
        default behavior: does nothing.
        :param eventData: Optional event data which triggered the lose focus
        """
        pass

    def OnDefaultCameraModified(self, camera: vtkCamera) -> None:
        """
        Triggered when the default camera is modified.
        default behavior: does nothing.
        :param camera: Instance of the default camera
        """
        pass

    def OnReferenceToDisplayNodeAdded(self, fromNode: vtkMRMLNode | None, role:str) -> None:
        """
        Triggered when a reference to the display node is added
        default behavior: does nothing.

        See also: self.GetDisplayNode()
        :param fromNode: Node which added a reference to the display node
        :param role: Role of the added reference
        """
        pass

    def OnReferenceToDisplayNodeRemoved(self, fromNode: vtkMRMLNode | None, role:str) -> None:
        """
        Triggered when a reference to the display node is removed
        default behavior: does nothing.

        See also: self.GetDisplayNode()
        :param fromNode: Node which removed a reference to the display node
        :param role: Role of the removed reference
        """
        pass

    def OnRendererAdded(self, renderer: vtkRenderer | None) -> None:
        """
        Triggered when the pipeline is displayed on a new renderer.
        default behavior: does nothing.
        See also: self.GetRenderer()
        See also: self.ResetDisplay()
        See also: self.RequestRender()

        :param renderer: Optional instance or renderer on which the pipeline is added
        """
        pass

    def OnRendererRemoved(self, renderer: vtkRenderer) -> None:
        """
        Triggered when the pipeline is removed from its previous renderer.
        default behavior: does nothing.
        See also: self.GetRenderer()

        :param renderer: Optional instance or renderer from which the pipeline was removed
        :return:
        """
        pass

    def OnUpdate(self, obj: vtkObject, eventId: int, callData: Any | None) -> None:
        """
        Observer update callback.
        Triggered when any object & events observed using UpdateObserver is triggered.

        :param obj: vtkObject instance which triggered the callback
        :param eventId: Event id which triggered the callback
        :param callData: Optional observer call data. Use self.CastCallData(callData, vtkType) to convert to Python
        """
        pass

    def ProcessInteractionEvent(self, eventData: vtkMRMLInteractionEventData) -> bool:
        """
        Triggered when the pipeline can process the interaction and is at the top of the priority list.
        default behavior: does nothing and returns false.

        :param eventData: The MRML event needing to be processed
        :return: True if event was processed. False otherwise (default = false)
        """
        return False

    def SetDisplayNode(self, displayNode: vtkMRMLNode) -> None:
        """
        Set the display node for the pipeline has changed (initialization).
        default behavior: Stored and display node is observed for vtkCommand::ModifiedEvent.
        See also: self.UpdateObserver(prevObj, newObj, eventIds)
        See also: self.OnUpdate(obj, eventId, callData)

        :param displayNode: The new instance of display node for the pipeline
        """
        vtkMRMLLayerDMPipelineI.SetDisplayNode(self, displayNode)

    def SetPipelineManager(self, pipelineManager: vtkMRMLLayerDMPipelineManager) -> None:
        """
        Set the pipeline manager (initialization).
        default behavior: Stores the pipeline manager to delegate request render calls (no active observer).

        See also: self.GetPipelineManager()
        See also: self.GetNodePipeline(node)
        :param pipelineManager: The instance of pipeline manager managing the current pipeline
        """
        vtkMRMLLayerDMPipelineI.SetPipelineManager(self, pipelineManager)

    def SetScene(self, scene: vtkMRMLScene) -> None:
        """
        Set the pipeline scene (initialization).
        default behavior: Stores the scene for access (no active observer).
        """
        vtkMRMLLayerDMPipelineI.SetScene(self, scene)

    def SetViewNode(self, viewNode: vtkMRMLAbstractViewNode) -> None:
        """
        Set the pipeline view node  (initialization).
        default behavior: Stored and view node is observed for vtkCommand::ModifiedEvent.
        :param viewNode: The instance of viewNode the pipeline is attached to
        """
        vtkMRMLLayerDMPipelineI.SetViewNode(self, viewNode)

    def UpdatePipeline(self) -> None:
        """
        Triggered by self.ResetDisplay() calls
        Override to update the representation of the pipeline in the different views.

        See also: self.RequestRender()
        default behavior: does nothing.
        """
        pass