60 using LayerKey = std::tuple<unsigned int, std::uintptr_t>;
64 void PrintSelf(ostream& os, vtkIndent indent)
override;
96 vtkRenderer* GetRendererMatchingKey(
const LayerKey& key);
97 vtkRenderer* GetDefaultRenderer()
const;
99 void AddMissingLayers();
100 static std::array<double, 6> ComputeRenderersVisibleBounds(
const std::vector<vtkWeakPointer<vtkRenderer>>& renderers);
101 bool ContainsLayerKey(
const LayerKey& key);
102 static std::uintptr_t GetCameraId(vtkCamera* camera);
103 vtkCamera* GetCameraForLayer(
const LayerKey& key,
const std::set<vtkMRMLLayerDMPipeline*>& pipelines)
const;
104 int GetKeyIndex(
const LayerKey& key)
const;
105 void RemoveAllLayers();
106 void RemoveAllPipelineRenderers();
108 void RemoveOutdatedLayers();
109 void RemoveOutdatedPipelines();
110 void RemoveRenderer(
const vtkSmartPointer<vtkRenderer>& renderer);
111 static void ResetRenderersCameraClippingRange(
const std::vector<vtkWeakPointer<vtkRenderer>>& renderers,
const std::array<double, 6>& bounds);
112 void SynchronizePipelineRenderers();
113 void UpdateRenderWindowNumberOfLayers()
const;
115 void UpdateRendererLayerOrdering()
const;
116 void UpdateRendererCamera();
122 std::map<LayerKey, std::set<vtkMRMLLayerDMPipeline*>> PipelineLayers;
126 vtkSmartPointer<vtkMRMLLayerDMObjectEventObserver> Observer;
129 vtkSmartPointer<vtkMRMLLayerDMPipeline> EmptyPipeline;
132 vtkWeakPointer<vtkRenderWindow> RenderWindow;
135 vtkSmartPointer<vtkCamera> DefaultCamera;
138 std::vector<vtkSmartPointer<vtkRenderer>> Renderers;
141 std::map<std::uintptr_t, std::vector<vtkWeakPointer<vtkRenderer>>> CameraRendererMap;