Program Listing for File vtkMRMLLayerDMPipelineManager.h
↰ Return to documentation for file (MRMLDM/vtkMRMLLayerDMPipelineManager.h)
#pragma once
#include "vtkSlicerLayerDMModuleMRMLDisplayableManagerExport.h"
// VTK includes
#include <vtkCommand.h>
#include <vtkObject.h>
#include <vtkSmartPointer.h>
#include <vtkWeakPointer.h>
// STL includes
#include <functional>
#include <map>
class vtkCamera;
class vtkMRMLAbstractViewNode;
class vtkMRMLInteractionEventData;
class vtkMRMLLayerDMCameraSynchronizer;
class vtkMRMLLayerDMInteractionLogic;
class vtkMRMLLayerDMLayerManager;
class vtkMRMLLayerDMNodeReferenceObserver;
class vtkMRMLLayerDMObjectEventObserver;
class vtkMRMLLayerDMPipelineCreatorI;
class vtkMRMLLayerDMPipelineFactory;
class vtkMRMLLayerDMPipelineI;
class vtkMRMLNode;
class vtkMRMLScene;
class vtkRenderWindow;
class vtkRenderer;
class VTK_SLICER_LAYERDM_MODULE_MRMLDISPLAYABLEMANAGER_EXPORT vtkMRMLLayerDMPipelineManager : public vtkObject
{
public:
static vtkMRMLLayerDMPipelineManager* New();
vtkTypeMacro(vtkMRMLLayerDMPipelineManager, vtkObject);
bool AddNode(vtkMRMLNode* node);
bool CanProcessInteractionEvent(vtkMRMLInteractionEventData* eventData, double& distance2) const;
bool CreatePipelineForNode(vtkMRMLNode* displayNode);
vtkCamera* GetDefaultCamera() const;
void ClearDisplayableNodes();
int GetMouseCursor() const;
vtkSmartPointer<vtkMRMLLayerDMPipelineI> GetNodePipeline(vtkMRMLNode* node) const;
int GetNumberOfPipelines() const;
vtkMRMLLayerDMPipelineI* GetNthPipeline(int iPipeline) const;
void LoseFocus() const;
void LoseFocus(vtkMRMLInteractionEventData* eventData) const;
bool ProcessInteractionEvent(vtkMRMLInteractionEventData* eventData) const;
bool RemoveNode(vtkMRMLNode* node);
bool RemovePipeline(vtkMRMLNode* displayNode);
void RequestRender();
void ResetCameraClippingRange() const;
void SetFactory(const vtkSmartPointer<vtkMRMLLayerDMPipelineFactory>& factory);
void SetRenderWindow(vtkRenderWindow* renderWindow);
void SetRenderer(vtkRenderer* renderer) const;
void SetRequestRender(const std::function<void()>& requestRender);
void SetScene(vtkMRMLScene* scene);
void SetViewNode(vtkMRMLAbstractViewNode* viewNode);
void UpdateAllPipelines();
void UpdateFromScene();
bool BlockRequestRender(bool isBlocked);
protected:
vtkMRMLLayerDMPipelineManager();
~vtkMRMLLayerDMPipelineManager() override = default;
private:
void OnDefaultCameraModified();
void UpdatePipeline(const vtkSmartPointer<vtkMRMLLayerDMPipelineI>& pipeline) const;
void RemoveOutdatedPipelines();
void AddMissingPipelines();
vtkSmartPointer<vtkMRMLLayerDMPipelineFactory> m_factory;
vtkSmartPointer<vtkMRMLLayerDMLayerManager> m_layerManager;
vtkSmartPointer<vtkMRMLLayerDMCameraSynchronizer> m_cameraSync;
vtkSmartPointer<vtkMRMLLayerDMInteractionLogic> m_interactionLogic;
vtkSmartPointer<vtkMRMLLayerDMObjectEventObserver> m_eventObs;
vtkSmartPointer<vtkCamera> m_defaultCamera;
vtkSmartPointer<vtkMRMLLayerDMNodeReferenceObserver> m_nodeRefObs;
vtkWeakPointer<vtkMRMLAbstractViewNode> m_viewNode;
vtkWeakPointer<vtkMRMLScene> m_scene;
vtkWeakPointer<vtkRenderWindow> m_renderWindow;
std::map<vtkWeakPointer<vtkMRMLNode>, vtkSmartPointer<vtkMRMLLayerDMPipelineI>> m_pipelineMap;
std::function<void()> m_requestRender;
bool m_isRequestRenderBlocked{ false };
};