Public Member Functions | Static Public Member Functions | Protected Attributes

mitk::VtkLayerController Class Reference

#include <mitkVtkLayerController.h>

List of all members.

Public Member Functions

 VtkLayerController (vtkRenderWindow *renderWindow)
virtual ~VtkLayerController ()
vtkRenderer * GetSceneRenderer ()
void InsertBackgroundRenderer (vtkRenderer *renderer, bool forceAbsoluteBackground)
void InsertForegroundRenderer (vtkRenderer *renderer, bool forceAbsoluteForeground)
void InsertSceneRenderer (vtkRenderer *renderer)
void SetRenderWindow (vtkRenderWindow *renwin)
void RemoveRenderer (vtkRenderer *renderer)
bool IsRendererInserted (vtkRenderer *renderer)
unsigned int GetNumberOfRenderers ()
void SetEraseForAllRenderers (int i)

Static Public Member Functions

static VtkLayerControllerGetInstance (vtkRenderWindow *renWin)
static void AddInstance (vtkRenderWindow *renWin, vtkRenderer *mitkSceneRenderer)
static void RemoveInstance (vtkRenderWindow *renWin)

Protected Attributes

vtkRenderWindow * m_RenderWindow

Detailed Description

Manages the VTK layer hierarchy of a vtkRenderWindow. For simple access the layers are divided into three main groups: background, scene and foreground layers. Renderers can be registered via the insert... functions and removed via the RemoveRenderer function.

Definition at line 40 of file mitkVtkLayerController.h.


Constructor & Destructor Documentation

mitk::VtkLayerController::VtkLayerController ( vtkRenderWindow *  renderWindow )

Definition at line 62 of file mitkVtkLayerController.cpp.

{
  m_RenderWindow = renderWindow;
  m_RenderWindow->Register( NULL );
  m_BackgroundRenderers.clear();
  m_ForegroundRenderers.clear();
  m_SceneRenderers.clear();

}
mitk::VtkLayerController::~VtkLayerController (  ) [virtual]

Definition at line 72 of file mitkVtkLayerController.cpp.

{
  if ( m_RenderWindow != NULL )
  {
    m_RenderWindow->UnRegister( NULL );
  }
}

Member Function Documentation

void mitk::VtkLayerController::AddInstance ( vtkRenderWindow *  renWin,
vtkRenderer *  mitkSceneRenderer 
) [static]

Definition at line 40 of file mitkVtkLayerController.cpp.

References InsertSceneRenderer(), and RemoveInstance().

{
  // ensure that no vtkRenderWindow is managed twice
  mitk::VtkLayerController::RemoveInstance(renWin);

  // instanciate controller, add it to the map
  mitk::VtkLayerController* ControllerInstance = new mitk::VtkLayerController(renWin);
  ControllerInstance->InsertSceneRenderer(mitkSceneRenderer);

  s_LayerControllerMap.insert(vtkLayerControllerMapType::value_type(renWin,ControllerInstance));
}     
mitk::VtkLayerController * mitk::VtkLayerController::GetInstance ( vtkRenderWindow *  renWin ) [static]
unsigned int mitk::VtkLayerController::GetNumberOfRenderers (  )

Returns the number of renderers in the renderwindow.

Definition at line 328 of file mitkVtkLayerController.cpp.

{
  return static_cast<unsigned int>(m_BackgroundRenderers.size() + m_SceneRenderers.size() + m_ForegroundRenderers.size());
}
vtkRenderer * mitk::VtkLayerController::GetSceneRenderer (  )

Returns the current vtkRenderer of the Scene

Returns the Scene Renderer

Definition at line 130 of file mitkVtkLayerController.cpp.

{
  if(m_SceneRenderers.size() > 0)
  {
    RendererVectorType::iterator it = m_SceneRenderers.begin();
    return (*it);
  }
  else
    return NULL;
}
void mitk::VtkLayerController::InsertBackgroundRenderer ( vtkRenderer *  renderer,
bool  forceAbsoluteBackground 
)

Connects a VTK renderer with a vtk renderwindow. The renderer will be rendered in the background. With forceAbsoluteBackground set true a renderer can be placed at the absolute background of the scene. Multiple calls with forceAbsoluteBackground set true will set the latest registered renderer as background.

Definition at line 85 of file mitkVtkLayerController.cpp.

Referenced by mitk::ImageBackground2D::Enable(), and mitk::GradientBackground::Enable().

{
  
  if(renderer == NULL)
    return;
  
  // Remove renderer if it already exists 
  RemoveRenderer(renderer);

  if(forceAbsoluteBackground)
  {
    RendererVectorType::iterator it = m_BackgroundRenderers.begin();
    m_BackgroundRenderers.insert(it,renderer);
  }
  else
    m_BackgroundRenderers.push_back(renderer);
  UpdateLayers();
}
void mitk::VtkLayerController::InsertForegroundRenderer ( vtkRenderer *  renderer,
bool  forceAbsoluteForeground 
)

Connects a VTK renderer with a vtk renderwindow. The renderer will be rendered in the foreground. With forceAbsoluteBackground set true a renderer can be placed at the absolute foreground of the scene. Multiple calls with forceAbsoluteForeground set true will set the latest registered renderer as foreground.

Definition at line 108 of file mitkVtkLayerController.cpp.

Referenced by mitk::VtkWidgetRendering::Enable(), mitk::RenderWindowFrame::Enable(), and mitk::ManufacturerLogo::Enable().

{
  
  if(renderer == NULL)
    return;
  
  // Remove renderer if it already exists 
  RemoveRenderer(renderer);

  if(forceAbsoluteForeground)
  {
    RendererVectorType::iterator it = m_ForegroundRenderers.begin();
    m_ForegroundRenderers.insert(it,renderer);
  }
  else
    m_ForegroundRenderers.push_back(renderer);

  UpdateLayers();
}
void mitk::VtkLayerController::InsertSceneRenderer ( vtkRenderer *  renderer )

Connects a VTK renderer with a vtk renderwindow. The renderer will be rendered between background renderers and foreground renderers.

Definition at line 144 of file mitkVtkLayerController.cpp.

Referenced by AddInstance().

{
  
  if(renderer == NULL)
    return;
  
  // Remove renderer if it already exists
  RemoveRenderer(renderer);

  m_SceneRenderers.push_back(renderer);
  UpdateLayers();
}
bool mitk::VtkLayerController::IsRendererInserted ( vtkRenderer *  renderer )

Returns true if a renderer has been inserted

Definition at line 228 of file mitkVtkLayerController.cpp.

{
  RendererVectorType::iterator it;
  // background layers
  if(m_BackgroundRenderers.size() > 0)
  {
    it = std::find(m_BackgroundRenderers.begin(),m_BackgroundRenderers.end(),renderer);
    if ( it != m_BackgroundRenderers.end() )
    {
      return true;
    }
  }
  // scene layers
  if(m_SceneRenderers.size() > 0)
  {
    it = std::find(m_SceneRenderers.begin(),m_SceneRenderers.end(),renderer);
    if ( it != m_SceneRenderers.end() )
    {
      return true;
    }
  }
  // foreground layers
  if(m_ForegroundRenderers.size() > 0 )
  {
    it = std::find(m_ForegroundRenderers.begin(),m_ForegroundRenderers.end(),renderer);
    if ( it != m_ForegroundRenderers.end() )
    {
      return true;
    }
  }
  return false;
  
}
void mitk::VtkLayerController::RemoveInstance ( vtkRenderWindow *  renWin ) [static]

Definition at line 52 of file mitkVtkLayerController.cpp.

Referenced by AddInstance(), and mitk::BaseRenderer::~BaseRenderer().

{
  vtkLayerControllerMapType::iterator mapit = s_LayerControllerMap.find(renWin);
  if(mapit != s_LayerControllerMap.end())
  {
    delete mapit->second;
    s_LayerControllerMap.erase( mapit );
  }
}
void mitk::VtkLayerController::RemoveRenderer ( vtkRenderer *  renderer )

A renderer which has been inserted via a insert... function can be removed from the vtkRenderWindow with RemoveRenderer.

Definition at line 160 of file mitkVtkLayerController.cpp.

Referenced by mitk::VtkWidgetRendering::Disable(), mitk::RenderWindowFrame::Disable(), mitk::ManufacturerLogo::Disable(), mitk::ImageBackground2D::Disable(), and mitk::GradientBackground::Disable().

{
  RendererVectorType::iterator it;
  // background layers
  if(m_BackgroundRenderers.size() > 0)
  {
    it = std::find(m_BackgroundRenderers.begin(),m_BackgroundRenderers.end(),renderer);
    if(it != m_BackgroundRenderers.end())
    {
      m_BackgroundRenderers.erase(it);
      UpdateLayers();
      return;
    }
  }
  // scene layers
  if(m_SceneRenderers.size() > 0)
  {
    it = std::find(m_SceneRenderers.begin(),m_SceneRenderers.end(),renderer);
    if(it != m_SceneRenderers.end())
    {
      m_SceneRenderers.erase(it);
      UpdateLayers();
      return;
    }
  }
  // foreground layers
  if(m_ForegroundRenderers.size() > 0 )
  {
    it = std::find(m_ForegroundRenderers.begin(),m_ForegroundRenderers.end(),renderer);
    if(it != m_ForegroundRenderers.end())
    {
      m_ForegroundRenderers.erase(it);
      UpdateLayers();
      return;
    }
  }
}
void mitk::VtkLayerController::SetEraseForAllRenderers ( int  i )

Definition at line 333 of file mitkVtkLayerController.cpp.

{
  #if ( VTK_MAJOR_VERSION >= 5 )
  
  this->m_RenderWindow->SetErase(i);

  RendererVectorType::iterator it;
  for(it = m_BackgroundRenderers.begin(); it != m_BackgroundRenderers.end(); it++)
    (*it)->SetErase(i);
  
  for(it = m_SceneRenderers.begin(); it != m_SceneRenderers.end(); it++)
   (*it)->SetErase(i);

  for(it = m_ForegroundRenderers.begin(); it != m_ForegroundRenderers.end(); it++)
   (*it)->SetErase(i);
  
  #endif
}
void mitk::VtkLayerController::SetRenderWindow ( vtkRenderWindow *  renwin )

Connects a VtkRenderWindow with the layer controller.

Definition at line 200 of file mitkVtkLayerController.cpp.

{
  if(renwin != NULL)
  {
    RendererVectorType::iterator it;
    // Tell all renderers that there is a new renderwindow
    for(it = m_BackgroundRenderers.begin(); it != m_BackgroundRenderers.end(); it++)
    {
      (*it)->SetRenderWindow(renwin);
    }
    for(it = m_SceneRenderers.begin(); it != m_SceneRenderers.end(); it++)
    {
      (*it)->SetRenderWindow(renwin);
    }
    for(it = m_ForegroundRenderers.begin(); it != m_ForegroundRenderers.end(); it++)
    {
      (*it)->SetRenderWindow(renwin);
    }
    // Set the new RenderWindow
    m_RenderWindow = renwin;
  }
  // Now sort renderers and add them to the renderwindow
  UpdateLayers();
}

Member Data Documentation

vtkRenderWindow* mitk::VtkLayerController::m_RenderWindow [protected]

Definition at line 98 of file mitkVtkLayerController.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines