diff --git a/Core/Code/Rendering/mitkGLMapper2D.cpp b/Core/Code/Rendering/mitkGLMapper2D.cpp index 625eac49e2..779f68fb1c 100644 --- a/Core/Code/Rendering/mitkGLMapper2D.cpp +++ b/Core/Code/Rendering/mitkGLMapper2D.cpp @@ -1,62 +1,62 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "mitkGL.h" #include "mitkGLMapper2D.h" mitk::GLMapper2D::GLMapper2D() { - m_VtkBased = false; + } mitk::GLMapper2D::~GLMapper2D() { } void mitk::GLMapper2D::MitkRenderOpaqueGeometry(mitk::BaseRenderer* renderer) { if(IsVisible(renderer)==false) return; Paint(renderer); } void mitk::GLMapper2D::MitkRenderTranslucentGeometry(mitk::BaseRenderer* /*renderer*/) { } void mitk::GLMapper2D::MitkRenderOverlay(mitk::BaseRenderer* /*renderer*/) { } void mitk::GLMapper2D::MitkRenderVolumetricGeometry(mitk::BaseRenderer* /*renderer*/) { } void mitk::GLMapper2D::ApplyProperties(mitk::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 GetColor(rgba, renderer); // check for opacity prop and use it for rendering if it exists GetOpacity(rgba[3], renderer); glColor4fv(rgba); } diff --git a/Core/Code/Rendering/mitkGLMapper2D.h b/Core/Code/Rendering/mitkGLMapper2D.h index 8fb53247fe..2890c2ac3c 100644 --- a/Core/Code/Rendering/mitkGLMapper2D.h +++ b/Core/Code/Rendering/mitkGLMapper2D.h @@ -1,59 +1,67 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef MITKGLMAPPER2D_H_HEADER_INCLUDED_C197C872 #define MITKGLMAPPER2D_H_HEADER_INCLUDED_C197C872 #include "mitkCommon.h" #include "mitkMapper2D.h" #include "mitkBaseRenderer.h" namespace mitk { //##Documentation //## @brief Base class of all OpenGL-based 2D-Mappers //## //## Those must implement the abstract method Paint(BaseRenderer). //## @ingroup Mapper class MITK_CORE_EXPORT GLMapper2D : public Mapper2D { public: //##Documentation //## @brief Do the painting into the @a renderer virtual void Paint(mitk::BaseRenderer *renderer) = 0; //##Documentation //## @brief Apply color and opacity read from the PropertyList virtual void ApplyProperties(mitk::BaseRenderer* renderer); void MitkRenderOpaqueGeometry(mitk::BaseRenderer* renderer); void MitkRenderTranslucentGeometry(mitk::BaseRenderer* renderer); void MitkRenderOverlay(mitk::BaseRenderer* renderer); void MitkRenderVolumetricGeometry(mitk::BaseRenderer* renderer); + + /** + * \brief Returns whether this is an vtk-based mapper + */ + virtual bool IsVtkBased() const { return false; } + + + protected: GLMapper2D(); virtual ~GLMapper2D(); }; } // namespace mitk #endif /* MITKGLMAPPER2D_H_HEADER_INCLUDED_C197C872 */ diff --git a/Core/Code/Rendering/mitkMapper.cpp b/Core/Code/Rendering/mitkMapper.cpp index 69df73e073..edd8d9be1f 100644 --- a/Core/Code/Rendering/mitkMapper.cpp +++ b/Core/Code/Rendering/mitkMapper.cpp @@ -1,158 +1,158 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "mitkMapper.h" #include "mitkDataNode.h" #include "mitkBaseRenderer.h" #include "mitkProperties.h" mitk::Mapper::Mapper() - : m_VtkBased( true ), m_TimeStep( 0 ) + :m_TimeStep( 0 ) { } mitk::Mapper::~Mapper() { } mitk::BaseData* mitk::Mapper::GetData() const { return m_DataNode->GetData(); } mitk::DataNode* mitk::Mapper::GetDataNode() const { itkDebugMacro("returning DataNode address " << this->m_DataNode ); return this->m_DataNode.GetPointer(); } bool mitk::Mapper::GetColor(float rgb[3], mitk::BaseRenderer* renderer, const char* name) const { const mitk::DataNode* node=GetDataNode(); if(node==NULL) return false; return node->GetColor(rgb, renderer, name); } bool mitk::Mapper::GetVisibility(bool &visible, mitk::BaseRenderer* renderer, const char* name) const { const mitk::DataNode* node=GetDataNode(); if(node==NULL) return false; return node->GetVisibility(visible, renderer, name); } bool mitk::Mapper::GetOpacity(float &opacity, mitk::BaseRenderer* renderer, const char* name) const { const mitk::DataNode* node=GetDataNode(); if(node==NULL) return false; return node->GetOpacity(opacity, renderer, name); } bool mitk::Mapper::GetLevelWindow(mitk::LevelWindow& levelWindow, mitk::BaseRenderer* renderer, const char* name) const { const mitk::DataNode* node=GetDataNode(); if(node==NULL) return false; return node->GetLevelWindow(levelWindow, renderer, name); } bool mitk::Mapper::IsVisible(mitk::BaseRenderer* renderer, const char* name) const { bool visible=true; GetVisibility(visible, renderer, name); return visible; } void mitk::Mapper::GenerateData() { } void mitk::Mapper::GenerateDataForRenderer(mitk::BaseRenderer* /*renderer*/) { } void mitk::Mapper::CalculateTimeStep( mitk::BaseRenderer *renderer ) { if ( ( renderer != NULL ) && ( m_DataNode.GetPointer() != NULL ) ) { m_TimeStep = renderer->GetTimeStep(m_DataNode->GetData()); } else { m_TimeStep = 0; } } void mitk::Mapper::Update(mitk::BaseRenderer *renderer) { const DataNode* node = GetDataNode(); assert(node!=NULL); //safety cause there are datatreenodes that have no defined data (video-nodes and root) unsigned int dataMTime = 0; mitk::BaseData::Pointer data = static_cast(node->GetData()); if (data.IsNotNull()) { dataMTime = data->GetMTime(); } // Calculate time step of the input data for the specified renderer (integer value) this->CalculateTimeStep( renderer ); // Check if time step is valid const TimeSlicedGeometry *dataTimeGeometry = data->GetTimeSlicedGeometry(); if ( ( dataTimeGeometry == NULL ) || ( dataTimeGeometry->GetTimeSteps() == 0 ) || ( !dataTimeGeometry->IsValidTime( m_TimeStep ) ) ) { // TimeSlicedGeometry or time step is not valid for this data: // reset mapper so that nothing is displayed this->ResetMapper( renderer ); return; } if( (m_LastUpdateTime < GetMTime()) || (m_LastUpdateTime < node->GetDataReferenceChangedTime()) || (m_LastUpdateTime < dataMTime) || (renderer && (m_LastUpdateTime < renderer->GetTimeStepUpdateTime())) ) { this->GenerateData(); m_LastUpdateTime.Modified(); } this->GenerateDataForRenderer(renderer); } void mitk::Mapper::SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer, bool overwrite) { node->AddProperty( "visible", mitk::BoolProperty::New(true), renderer, overwrite ); node->AddProperty( "layer", mitk::IntProperty::New(0), renderer, overwrite); node->AddProperty( "name", mitk::StringProperty::New("No Name!"), renderer, overwrite ); } diff --git a/Core/Code/Rendering/mitkMapper.h b/Core/Code/Rendering/mitkMapper.h index 7b0c69342b..3fb236c201 100644 --- a/Core/Code/Rendering/mitkMapper.h +++ b/Core/Code/Rendering/mitkMapper.h @@ -1,285 +1,283 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef MAPPER_H_HEADER_INCLUDED_C1E6EA08 #define MAPPER_H_HEADER_INCLUDED_C1E6EA08 #include "mitkCommon.h" #include "mitkBaseRenderer.h" #include "mitkLevelWindow.h" #include #include //Just included to get VTK version #include class vtkWindow; class vtkProp; namespace mitk { class BaseRenderer; class BaseData; class DataNode; /** \brief Interface for accessing (templated) LocalStorageHandler instances. */ class BaseLocalStorageHandler { public: virtual ~BaseLocalStorageHandler() {} virtual void ClearLocalStorage(mitk::BaseRenderer *renderer,bool unregisterFromBaseRenderer=true )=0; }; //##Documentation //## @brief Base class of all mappers, 2D as well as 3D //## //## Base class of all Mappers, 2D as well as 3D. //## Subclasses of mitk::Mapper control the creation of rendering primitives //## that interface to the graphics library (e.g., OpenGL, vtk). //## @todo Should Mapper be a subclass of ImageSource? //## @ingroup Mapper class MITK_CORE_EXPORT Mapper : public itk::Object { public: mitkClassMacro(Mapper, itk::Object); //##Documentation //## @brief Set the DataNode containing the data to map itkSetObjectMacro(DataNode, DataNode); //##Documentation //## @brief Get the data to map //## //## Returns the mitk::BaseData object associated with this mapper. //## @returns the mitk::BaseData associated with this mapper. BaseData* GetData() const; //##Documentation //## @brief Get the DataNode containing the data to map virtual DataNode* GetDataNode() const; //##Documentation //## @brief Convenience access method for color properties (instances of //## ColorProperty) //## @return @a true property was found virtual bool GetColor(float rgb[3], BaseRenderer* renderer, const char* name = "color") const; //##Documentation //## @brief Convenience access method for visibility properties (instances //## of BoolProperty) //## @return @a true property was found //## @sa IsVisible virtual bool GetVisibility(bool &visible, BaseRenderer* renderer, const char* name = "visible") const; //##Documentation //## @brief Convenience access method for opacity properties (instances of //## FloatProperty) //## @return @a true property was found virtual bool GetOpacity(float &opacity, BaseRenderer* renderer, const char* name = "opacity") const; //##Documentation //## @brief Convenience access method for color properties (instances of //## LevelWindoProperty) //## @return @a true property was found virtual bool GetLevelWindow(LevelWindow &levelWindow, BaseRenderer* renderer, const char* name = "levelwindow") const; //##Documentation //## @brief Convenience access method for visibility properties (instances //## of BoolProperty). Return value is the visibility. Default is //## visible==true, i.e., true is returned even if the property (@a //## propertyKey) is not found. //## //## Thus, the return value has a different meaning than in the //## GetVisibility method! //## @sa GetVisibility virtual bool IsVisible(BaseRenderer* renderer, const char* name = "visible") const; virtual void Update(BaseRenderer* renderer); virtual void MitkRenderOverlay(BaseRenderer* renderer) = 0; virtual void MitkRenderOpaqueGeometry(BaseRenderer* renderer) = 0; virtual void MitkRenderTranslucentGeometry(BaseRenderer* renderer) = 0; virtual void MitkRenderVolumetricGeometry(BaseRenderer* renderer) = 0; + + /** * \brief Returns whether this is an vtk-based mapper */ - bool IsVtkBased() const - { - return m_VtkBased; - } - + virtual bool IsVtkBased() const = 0; + + /** \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*/ ) { return false; } /** * \brief Release vtk-based graphics resources. Must be overwritten in * subclasses if vtkProps are used. */ virtual void ReleaseGraphicsResources(vtkWindow*) { }; /** \brief Set default values of properties used by this mapper * to \a node * * \param node The node for which the properties are set * \param overwrite overwrite existing properties (default: \a false) * \param renderer defines which property list of node is used * (default: \a NULL, i.e. default property list) */ static void SetDefaultProperties(DataNode* node, BaseRenderer* renderer = NULL, bool overwrite = false); /** \brief Returns the current time step as calculated from the renderer */ int GetTimestep() const {return m_TimeStep;}; /** Returns true if this Mapper currently allows for Level-of-Detail rendering. * This reflects whether this Mapper currently invokes StartEvent, EndEvent, and * ProgressEvent on BaseRenderer. */ virtual bool IsLODEnabled( BaseRenderer * /*renderer*/ ) const { return false; } protected: Mapper(); virtual ~Mapper(); //##Documentation //## @brief Generate the data needed for rendering (independent of a specific renderer) virtual void GenerateData(); //##Documentation //## @brief Generate the data needed for rendering into @a renderer virtual void GenerateDataForRenderer(BaseRenderer* renderer); //## Updates the time step, which is sometimes needed in subclasses virtual void CalculateTimeStep( BaseRenderer* renderer ); //## Reset the mapper (i.e., make sure that nothing is displayed) if no //## valid data is present. //## //## To be implemented in sub-classes. virtual void ResetMapper( BaseRenderer* /*renderer*/ ) { }; - bool m_VtkBased; - itk::WeakPointer m_DataNode; //##Documentation //## @brief timestamp of last update of stored data itk::TimeStamp m_LastUpdateTime; private: //## The current time step of the dataset to be rendered, for use in subclasses //## The momentary timestep can be accessed via the GetTimestep() method. int m_TimeStep; public: /** \brief Base class for mapper specific rendering ressources. */ class BaseLocalStorage { }; /** \brief Templated class for management of LocalStorage implementations in Mappers. * * The LocalStorageHandler is responsible for providing a LocalStorage to a * concrete mitk::Mapper subclass. Each RenderWindow / mitk::BaseRenderer is * assigned its own LocalStorage instance so that all contained ressources * (actors, shaders, textures, ...) are provided individually per window. * */ template class LocalStorageHandler : public mitk::BaseLocalStorageHandler { protected: std::map m_BaseRenderer2LS; public: /** \brief deallocates a local storage for a specifc BaseRenderer (if the * BaseRenderer is itself deallocating it in its destructor, it has to set * unregisterFromBaseRenderer=false) */ virtual void ClearLocalStorage(mitk::BaseRenderer *renderer,bool unregisterFromBaseRenderer=true ) { //MITK_INFO << "deleting a localstorage on a mapper request"; if(unregisterFromBaseRenderer) renderer->UnregisterLocalStorageHandler( this ); L *l = m_BaseRenderer2LS[renderer]; m_BaseRenderer2LS.erase( renderer ); delete l; } /** \brief Retrieves a LocalStorage for a specific BaseRenderer. * * Should be used by mappers in GenerateData() and ApplyProperties() */ L *GetLocalStorage(mitk::BaseRenderer *forRenderer) { L *l = m_BaseRenderer2LS[ forRenderer ]; if(!l) { //MITK_INFO << "creating new localstorage"; l = new L; m_BaseRenderer2LS[ forRenderer ] = l; forRenderer->RegisterLocalStorageHandler( this ); } return l; } ~LocalStorageHandler() { typename std::map::iterator it; for ( it=m_BaseRenderer2LS.begin() ; it != m_BaseRenderer2LS.end(); it++ ) { (*it).first->UnregisterLocalStorageHandler(this); delete (*it).second; } m_BaseRenderer2LS.clear(); } }; }; } // namespace mitk #endif /* MAPPER_H_HEADER_INCLUDED_C1E6EA08 */ diff --git a/Core/Code/Rendering/mitkVtkMapper2D.cpp b/Core/Code/Rendering/mitkVtkMapper2D.cpp index b06badab36..72f7e5b9a5 100644 --- a/Core/Code/Rendering/mitkVtkMapper2D.cpp +++ b/Core/Code/Rendering/mitkVtkMapper2D.cpp @@ -1,30 +1,30 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "mitkVtkMapper2D.h" mitk::VtkMapper2D::VtkMapper2D() { - m_VtkBased = true; + } mitk::VtkMapper2D::~VtkMapper2D() { } diff --git a/Core/Code/Rendering/mitkVtkMapper2D.h b/Core/Code/Rendering/mitkVtkMapper2D.h index 37daa6339f..5851d57efb 100644 --- a/Core/Code/Rendering/mitkVtkMapper2D.h +++ b/Core/Code/Rendering/mitkVtkMapper2D.h @@ -1,51 +1,56 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef BASEVTKMAPPER2D_H_HEADER_INCLUDED #define BASEVTKMAPPER2D_H_HEADER_INCLUDED #include "mitkMapper2D.h" class vtkProp; namespace mitk { //##Documentation //## @brief Base class of all vtk-based 2D-Mappers //## //## Those must implement the abstract //## method vtkProp* GetProp(). //## @ingroup Mapper class MITK_CORE_EXPORT VtkMapper2D : public Mapper2D { public: mitkClassMacro(VtkMapper2D,Mapper2D); virtual vtkProp* GetProp(mitk::BaseRenderer* renderer) = 0; + /** + * \brief Returns whether this is an vtk-based mapper + */ + virtual bool IsVtkBased() const { return true; } + protected: VtkMapper2D(); virtual ~VtkMapper2D(); }; } // namespace mitk #endif /* BASEVTKMAPPER2D_H_HEADER_INCLUDED */ diff --git a/Core/Code/Rendering/mitkVtkMapper3D.h b/Core/Code/Rendering/mitkVtkMapper3D.h index 2eb836689b..bdee69880e 100644 --- a/Core/Code/Rendering/mitkVtkMapper3D.h +++ b/Core/Code/Rendering/mitkVtkMapper3D.h @@ -1,109 +1,113 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef BASEVTKMAPPER3D_H_HEADER_INCLUDED #define BASEVTKMAPPER3D_H_HEADER_INCLUDED #include "mitkCommon.h" #include "mitkMapper.h" #include "mitkMapper3D.h" #include "mitkBaseRenderer.h" #include "vtkMapper.h" class vtkProp; class vtkProp3D; class vtkActor; class vtkProp3DCollection; namespace mitk { //##Documentation //## @brief Base class of all vtk-based 3D-Mappers //## //## GetProp() returns m_Prop3D, which should be //## initialized by sub-classes (e.g., by setting //## it to an vtkActor). //## @ingroup Mapper class MITK_CORE_EXPORT VtkMapper3D : public Mapper3D { public: mitkClassMacro(VtkMapper3D, Mapper3D); virtual vtkProp *GetVtkProp(mitk::BaseRenderer *renderer) = 0; static void SetVtkMapperImmediateModeRendering(vtkMapper *mapper); virtual void MitkRenderOpaqueGeometry(mitk::BaseRenderer* renderer); virtual void MitkRenderTranslucentGeometry(mitk::BaseRenderer* renderer); virtual void MitkRenderOverlay(mitk::BaseRenderer* renderer); virtual void MitkRenderVolumetricGeometry(mitk::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); /** \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 ); + /** + * \brief Returns whether this is an vtk-based mapper + */ + virtual bool IsVtkBased() const { return true; } protected: VtkMapper3D(); virtual ~VtkMapper3D(); /** Checks whether the specified property is a AnnotationProperty and if yes, * adds it to m_LabelActorCollection (internal method). */ // virtual void CheckForAnnotationProperty( mitk::BaseProperty *property, BaseRenderer *renderer ); public: itkGetObjectMacro(Geometry,Geometry3D); itkSetObjectMacro(Geometry,Geometry3D); protected: Geometry3D::Pointer m_Geometry; LevelWindow m_LevelWindow; //vtkProp3D *m_Prop3D; //vtkProp3DCollection *m_LabelActorCollection; }; } // namespace mitk #endif /* BASEVTKMAPPER3D_H_HEADER_INCLUDED */