diff --git a/Core/Code/Rendering/mitkVtkMapper.cpp b/Core/Code/Rendering/mitkVtkMapper.cpp new file mode 100644 index 0000000000..229bb12217 --- /dev/null +++ b/Core/Code/Rendering/mitkVtkMapper.cpp @@ -0,0 +1,109 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "mitkVtkMapper.h" + +mitk::VtkMapper::VtkMapper() +{ +} + +mitk::VtkMapper::~VtkMapper() +{ +} + +void mitk::VtkMapper::MitkRenderOverlay(BaseRenderer* renderer) +{ + if ( this->IsVisible(renderer)==false ) + return; + if ( this->GetVtkProp(renderer)->GetVisibility() ) + { + GetVtkProp(renderer)->RenderOverlay(renderer->GetVtkRenderer()); + } +} + +void mitk::VtkMapper::MitkRenderOpaqueGeometry(BaseRenderer* renderer) +{ + if ( this->IsVisible( renderer )==false ) + return; + if ( this->GetVtkProp(renderer)->GetVisibility() ) + { + GetVtkProp(renderer)->RenderOpaqueGeometry( renderer->GetVtkRenderer() ); + } +} + +void mitk::VtkMapper::MitkRenderTranslucentGeometry(BaseRenderer* renderer) +{ + if ( this->IsVisible(renderer)==false ) + return; + if ( this->GetVtkProp(renderer)->GetVisibility() ) + { + GetVtkProp(renderer)->RenderTranslucentPolygonalGeometry(renderer->GetVtkRenderer()); + } +} + +void mitk::VtkMapper::MitkRenderVolumetricGeometry(BaseRenderer* renderer) +{ + if(IsVisible(renderer)==false) + return; + if ( GetVtkProp(renderer)->GetVisibility() ) + { + GetVtkProp(renderer)->RenderVolumetricGeometry(renderer->GetVtkRenderer()); + } +} + +bool mitk::VtkMapper::HasVtkProp( const vtkProp *prop, BaseRenderer *renderer ) +{ + vtkProp *myProp = this->GetVtkProp( renderer ); + + // TODO: check if myProp is a vtkAssembly and if so, check if prop is contained in its leafs + return ( prop == myProp ); +} + +void mitk::VtkMapper::SetVtkMapperImmediateModeRendering(vtkMapper *mapper) +{ + if(mapper) + mapper->SetImmediateModeRendering(mitk::VtkPropRenderer::useImmediateModeRendering()); +} + +void mitk::VtkMapper::UpdateVtkTransform(mitk::BaseRenderer *renderer) +{ + vtkLinearTransform * vtktransform = GetDataNode()->GetVtkTransform(this->GetTimestep()); + + vtkProp3D *prop = dynamic_cast( GetVtkProp(renderer) ); + if(prop) + prop->SetUserTransform(vtktransform); +} + +void mitk::VtkMapper::ApplyProperties(vtkActor* actor, BaseRenderer* renderer) +{ + float rgba[4]={1.0f,1.0f,1.0f,1.0f}; + // check for color prop and use it for rendering if it exists + this->GetColor(rgba, renderer); + // check for opacity prop and use it for rendering if it exists + this->GetOpacity(rgba[3], renderer); + + double drgba[4]={rgba[0],rgba[1],rgba[2],rgba[3]}; + actor->GetProperty()->SetColor(drgba); + actor->GetProperty()->SetOpacity(drgba[3]); +} + +void mitk::VtkMapper::ReleaseGraphicsResources(vtkWindow * /*renWin*/) +{ +/* + if(m_Prop3D) + m_Prop3D->ReleaseGraphicsResources(renWin); +*/ +} diff --git a/Core/Code/Rendering/mitkVtkMapper.h b/Core/Code/Rendering/mitkVtkMapper.h new file mode 100644 index 0000000000..011cb3524b --- /dev/null +++ b/Core/Code/Rendering/mitkVtkMapper.h @@ -0,0 +1,104 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +// change number +#ifndef VTKMAPPER_H_HEADER_INCLUDED_C1C5453B +#define VTKMAPPER_H_HEADER_INCLUDED_C1C5453B + +#include +#include "mitkMapper.h" +#include "mitkBaseRenderer.h" +#include "mitkDataNode.h" +//#include "mitkProperties.h" +//#include "mitkAnnotationProperty.h" +#include "mitkVtkPropRenderer.h" + +#include +//#include +#include +#include +#include +#include +#include +//#include +//#include +#include +#include + +class vtkProp; +class vtkProp3D; +class vtkActor; +class vtkProp3DCollection; + +namespace mitk { + +//##Documentation +//## @brief Base class of all Mappers for 2D display +//## +//## @ingroup Mapper +class MITK_CORE_EXPORT VtkMapper : public Mapper +{ + public: + mitkClassMacro(VtkMapper,Mapper); + + virtual vtkProp* GetVtkProp(mitk::BaseRenderer* renderer) = 0; + + static void SetVtkMapperImmediateModeRendering(vtkMapper *mapper); + + /** + * \brief Returns whether this is an vtk-based mapper + */ + virtual bool IsVtkBased() const { return true; } + + virtual void MitkRenderOverlay(BaseRenderer* renderer); + virtual void MitkRenderOpaqueGeometry(BaseRenderer* renderer); + virtual void MitkRenderTranslucentGeometry(BaseRenderer* renderer); + virtual void MitkRenderVolumetricGeometry(BaseRenderer* renderer); + + /** \brief Returns true if this mapper owns the specified vtkProp for + * the given BaseRenderer. + * + * Note: returns false by default; should be implemented for VTK-based + * Mapper subclasses. */ + virtual bool HasVtkProp( const vtkProp *prop, BaseRenderer *renderer ); + + //##Documentation + //## @brief Set the vtkTransform of the m_Prop3D for + //## the current time step of \a renderer + //## + //## Called by mitk::VtkPropRenderer::Update before rendering + //## + virtual void UpdateVtkTransform(mitk::BaseRenderer *renderer); + + //##Documentation + //## @brief Apply color and opacity read from the PropertyList + virtual void ApplyProperties(vtkActor* actor, mitk::BaseRenderer* renderer); + + /** + * \brief Release vtk-based graphics resources. Must be overwritten in + * subclasses if vtkProps additional to m_Prop3D are used. + */ + virtual void ReleaseGraphicsResources(vtkWindow *renWin); + + protected: + + VtkMapper(); + + virtual ~VtkMapper(); + +}; +} // namespace mitk +#endif /* VTKMAPPER_H_HEADER_INCLUDED_C1C5453B */