16 #include <vtkObjectFactory.h> 17 #include <vtkRenderWindow.h> 18 #include <vtkRenderer.h> 19 #include <vtkRendererCollection.h> 21 mitk::VtkLayerController::vtkLayerControllerMapType mitk::VtkLayerController::s_LayerControllerMap;
25 for (
auto mapit = s_LayerControllerMap.begin(); mapit != s_LayerControllerMap.end(); ++mapit)
27 if ((*mapit).first == renWin)
28 return (*mapit).second;
34 vtkSmartPointer<vtkRenderer> mitkSceneRenderer)
43 s_LayerControllerMap.insert(vtkLayerControllerMapType::value_type(renWin, ControllerInstance));
48 auto mapit = s_LayerControllerMap.find(renWin);
49 if (mapit != s_LayerControllerMap.end())
52 s_LayerControllerMap.erase(mapit);
60 m_BackgroundRenderers.clear();
61 m_ForegroundRenderers.clear();
62 m_SceneRenderers.clear();
79 bool forceAbsoluteBackground)
81 if (renderer ==
nullptr)
87 if (forceAbsoluteBackground)
89 auto it = m_BackgroundRenderers.begin();
90 m_BackgroundRenderers.insert(it, renderer);
93 m_BackgroundRenderers.push_back(renderer);
102 bool forceAbsoluteForeground)
104 if (renderer ==
nullptr)
110 if (forceAbsoluteForeground)
112 auto it = m_ForegroundRenderers.begin();
113 m_ForegroundRenderers.insert(it, renderer);
116 m_ForegroundRenderers.push_back(renderer);
118 renderer->PreserveDepthBufferOn();
126 if (m_SceneRenderers.size() > 0)
128 auto it = m_SceneRenderers.begin();
140 if (renderer ==
nullptr)
146 m_SceneRenderers.push_back(renderer);
155 RendererVectorType::iterator it;
157 if (m_BackgroundRenderers.size() > 0)
159 it = std::find(m_BackgroundRenderers.begin(), m_BackgroundRenderers.end(), renderer);
160 if (it != m_BackgroundRenderers.end())
162 m_BackgroundRenderers.erase(it);
168 if (m_SceneRenderers.size() > 0)
170 it = std::find(m_SceneRenderers.begin(), m_SceneRenderers.end(), renderer);
171 if (it != m_SceneRenderers.end())
173 m_SceneRenderers.erase(it);
179 if (m_ForegroundRenderers.size() > 0)
181 it = std::find(m_ForegroundRenderers.begin(), m_ForegroundRenderers.end(), renderer);
182 if (it != m_ForegroundRenderers.end())
184 m_ForegroundRenderers.erase(it);
195 if (renwin !=
nullptr)
197 RendererVectorType::iterator it;
199 for (it = m_BackgroundRenderers.begin(); it != m_BackgroundRenderers.end(); ++it)
201 (*it)->SetRenderWindow(renwin);
203 for (it = m_SceneRenderers.begin(); it != m_SceneRenderers.end(); ++it)
205 (*it)->SetRenderWindow(renwin);
207 for (it = m_ForegroundRenderers.begin(); it != m_ForegroundRenderers.end(); ++it)
209 (*it)->SetRenderWindow(renwin);
223 RendererVectorType::iterator it;
225 if (m_BackgroundRenderers.size() > 0)
227 it = std::find(m_BackgroundRenderers.begin(), m_BackgroundRenderers.end(), renderer);
228 if (it != m_BackgroundRenderers.end())
234 if (m_SceneRenderers.size() > 0)
236 it = std::find(m_SceneRenderers.begin(), m_SceneRenderers.end(), renderer);
237 if (it != m_SceneRenderers.end())
243 if (m_ForegroundRenderers.size() > 0)
245 it = std::find(m_ForegroundRenderers.begin(), m_ForegroundRenderers.end(), renderer);
246 if (it != m_ForegroundRenderers.end())
258 void mitk::VtkLayerController::UpdateLayers()
261 vtkSmartPointer<vtkRendererCollection> v =
m_RenderWindow->GetRenderers();
264 auto numberOfLayers =
265 static_cast<unsigned int>(m_BackgroundRenderers.size() + m_SceneRenderers.size() + m_ForegroundRenderers.size());
266 int currentLayerNumber;
267 bool traverseUpwards;
269 currentLayerNumber = 0;
270 traverseUpwards =
true;
273 RendererVectorType::iterator it;
275 for (it = m_BackgroundRenderers.begin(); it != m_BackgroundRenderers.end(); ++it)
278 (*it)->SetLayer(currentLayerNumber);
282 currentLayerNumber++;
284 currentLayerNumber--;
287 for (it = m_SceneRenderers.begin(); it != m_SceneRenderers.end(); ++it)
290 (*it)->SetLayer(currentLayerNumber);
294 currentLayerNumber++;
296 currentLayerNumber--;
299 for (it = m_ForegroundRenderers.begin(); it != m_ForegroundRenderers.end(); ++it)
302 (*it)->SetLayer(currentLayerNumber);
306 currentLayerNumber++;
308 currentLayerNumber--;
316 return static_cast<unsigned int>(m_BackgroundRenderers.size() + m_SceneRenderers.size() +
317 m_ForegroundRenderers.size());
324 RendererVectorType::iterator it;
325 for (it = m_BackgroundRenderers.begin(); it != m_BackgroundRenderers.end(); ++it)
328 for (it = m_SceneRenderers.begin(); it != m_SceneRenderers.end(); ++it)
331 for (it = m_ForegroundRenderers.begin(); it != m_ForegroundRenderers.end(); ++it)
void SetEraseForAllRenderers(int i)
vtkSmartPointer< vtkRenderWindow > m_RenderWindow
void InsertSceneRenderer(vtkSmartPointer< vtkRenderer > renderer)
void InsertForegroundRenderer(vtkSmartPointer< vtkRenderer > renderer, bool forceAbsoluteForeground)
static void AddInstance(vtkSmartPointer< vtkRenderWindow > renWin, vtkSmartPointer< vtkRenderer > mitkSceneRenderer)
static VtkLayerController * GetInstance(vtkSmartPointer< vtkRenderWindow > renWin)
void SetRenderWindow(vtkSmartPointer< vtkRenderWindow > renwin)
virtual ~VtkLayerController()
VtkLayerController(vtkSmartPointer< vtkRenderWindow > renderWindow)
vtkSmartPointer< vtkRenderer > GetSceneRenderer()
void RemoveRenderer(vtkSmartPointer< vtkRenderer > renderer)
bool IsRendererInserted(vtkSmartPointer< vtkRenderer > renderer)
unsigned int GetNumberOfRenderers()
void InsertBackgroundRenderer(vtkSmartPointer< vtkRenderer > renderer, bool forceAbsoluteBackground)
static void RemoveInstance(vtkSmartPointer< vtkRenderWindow > renWin)