.. _program_listing_file_MRMLDM_vtkMRMLLayerDMLayerManager.h: Program Listing for File vtkMRMLLayerDMLayerManager.h ===================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``MRMLDM/vtkMRMLLayerDMLayerManager.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include "vtkSlicerLayerDMModuleMRMLDisplayableManagerExport.h" #include "vtkMRMLLayerDMPipelineI.h" // VTK includes #include #include #include // STL includes #include #include #include #include #include class vtkMRMLLayerDMPipelineI; class vtkRenderWindow; class vtkRenderer; class vtkCamera; class VTK_SLICER_LAYERDM_MODULE_MRMLDISPLAYABLEMANAGER_EXPORT vtkMRMLLayerDMLayerManager : public vtkObject { public: using LayerKey = std::tuple; static vtkMRMLLayerDMLayerManager* New(); vtkTypeMacro(vtkMRMLLayerDMLayerManager, vtkObject); void AddPipeline(vtkMRMLLayerDMPipelineI* pipeline); static LayerKey GetPipelineLayerKey(vtkMRMLLayerDMPipelineI* pipeline); int GetNumberOfDistinctLayers() const; int GetNumberOfManagedLayers() const; int GetNumberOfRenderers() const; void RemovePipeline(vtkMRMLLayerDMPipelineI* pipeline); void ResetCameraClippingRange() const; void SetRenderWindow(vtkRenderWindow* renderWindow); void SetDefaultCamera(const vtkSmartPointer& camera); protected: vtkMRMLLayerDMLayerManager(); ~vtkMRMLLayerDMLayerManager() override = default; private: vtkRenderer* GetRendererMatchingKey(const LayerKey& key); vtkRenderer* GetDefaultRenderer() const; void AddMissingLayers(); static std::array ComputeRenderersVisibleBounds(const std::set>& renderers); bool ContainsLayerKey(const LayerKey& key); static std::uintptr_t GetCameraId(vtkCamera* camera); vtkCamera* GetCameraForLayer(const LayerKey& key, const std::set>& pipelines) const; int GetKeyIndex(const LayerKey& key) const; void RemoveAllLayers(); void RemoveAllPipelineRenderers(); static void RemovePipelineRenderer(vtkMRMLLayerDMPipelineI* pipeline); void RemoveOutdatedLayers(); void RemoveOutdatedPipelines(); void RemoveRenderer(const vtkSmartPointer& renderer); static void ResetRenderersCameraClippingRange(const std::set>& renderers, const std::array& bounds); void SynchronizePipelineRenderers(); void UpdateRenderWindowNumberOfLayers() const; void UpdateLayers(); void UpdateRendererLayerOrdering() const; void UpdateRendererCamera(); // Map of pipeline layers ordered by ascending std::map>> m_pipelineLayers; // Placeholder empty pipeline with target layer = 0 and camera sync to layer 0 for default renderer vtkSmartPointer m_emptyPipeline; // Pointer to the current render window vtkWeakPointer m_renderWindow; // Pointer to the default camera vtkSmartPointer m_defaultCamera; // Renderers managed by the layer manager std::vector> m_renderers; // Camera to renderer map std::map, std::set>> m_cameraRendererMap; };