Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MAPPER_H_HEADER_INCLUDED_C1E6EA08
00020 #define MAPPER_H_HEADER_INCLUDED_C1E6EA08
00021
00022 #include "mitkCommon.h"
00023 #include "mitkBaseRenderer.h"
00024 #include "mitkLevelWindow.h"
00025
00026 #include <itkObject.h>
00027 #include <itkWeakPointer.h>
00028
00029
00030 #include <vtkConfigure.h>
00031
00032 class vtkWindow;
00033 class vtkProp;
00034
00035 namespace mitk {
00036
00037 class BaseRenderer;
00038 class BaseData;
00039 class DataNode;
00040
00041
00044 class BaseLocalStorageHandler
00045 {
00046 public:
00047 virtual ~BaseLocalStorageHandler() {}
00048 virtual void ClearLocalStorage(mitk::BaseRenderer *renderer,bool unregisterFromBaseRenderer=true )=0;
00049 };
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 class MITK_CORE_EXPORT Mapper : public itk::Object
00061 {
00062 public:
00063
00064 mitkClassMacro(Mapper, itk::Object);
00065
00066
00067
00068 itkSetObjectMacro(DataNode, DataNode);
00069
00070
00071
00072
00073
00074
00075 BaseData* GetData() const;
00076
00077
00078
00079 virtual DataNode* GetDataNode() const;
00080
00081
00082
00083
00084
00085 virtual bool GetColor(float rgb[3], BaseRenderer* renderer, const char* name = "color") const;
00086
00087
00088
00089
00090
00091
00092 virtual bool GetVisibility(bool &visible, BaseRenderer* renderer, const char* name = "visible") const;
00093
00094
00095
00096
00097
00098 virtual bool GetOpacity(float &opacity, BaseRenderer* renderer, const char* name = "opacity") const;
00099
00100
00101
00102
00103
00104 virtual bool GetLevelWindow(LevelWindow &levelWindow, BaseRenderer* renderer, const char* name = "levelwindow") const;
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 virtual bool IsVisible(BaseRenderer* renderer, const char* name = "visible") const;
00116
00117 virtual void Update(BaseRenderer* renderer);
00118
00119 virtual void MitkRenderOverlay(BaseRenderer* renderer) = 0;
00120 virtual void MitkRenderOpaqueGeometry(BaseRenderer* renderer) = 0;
00121 virtual void MitkRenderTranslucentGeometry(BaseRenderer* renderer) = 0;
00122
00123 #if ( ( VTK_MAJOR_VERSION >= 5 ) && ( VTK_MINOR_VERSION>=2) )
00124 virtual void MitkRenderVolumetricGeometry(BaseRenderer* renderer) = 0;
00125 #endif
00126
00130 bool IsVtkBased() const
00131 {
00132 return m_VtkBased;
00133 }
00134
00140 virtual bool HasVtkProp( const vtkProp* , BaseRenderer* )
00141 {
00142 return false;
00143 }
00144
00149 virtual void ReleaseGraphicsResources(vtkWindow*) { };
00150
00159 static void SetDefaultProperties(DataNode* node, BaseRenderer* renderer = NULL, bool overwrite = false);
00160
00162 int GetTimestep() const {return m_TimeStep;};
00163
00164
00168 virtual bool IsLODEnabled( BaseRenderer * ) const { return false; }
00169
00170 protected:
00171
00172 Mapper();
00173
00174 virtual ~Mapper();
00175
00176
00177
00178 virtual void GenerateData();
00179
00180
00181 virtual void GenerateData(BaseRenderer* renderer);
00182
00183
00184 virtual void CalculateTimeStep( BaseRenderer* renderer );
00185
00186
00187
00188
00189
00190 virtual void ResetMapper( BaseRenderer* ) { };
00191
00192
00193 bool m_VtkBased;
00194
00195 itk::WeakPointer<DataNode> m_DataNode;
00196
00197
00198
00199 itk::TimeStamp m_LastUpdateTime;
00200
00201 private:
00202
00203
00204
00205
00206 int m_TimeStep;
00207
00208
00209 public:
00210
00213 class BaseLocalStorage
00214 {
00215 };
00216
00217
00226 template<class L> class LocalStorageHandler : public mitk::BaseLocalStorageHandler
00227 {
00228 protected:
00229
00230 std::map<mitk::BaseRenderer *,L*> m_BaseRenderer2LS;
00231
00232 public:
00233
00238 virtual void ClearLocalStorage(mitk::BaseRenderer *renderer,bool unregisterFromBaseRenderer=true )
00239 {
00240
00241 if(unregisterFromBaseRenderer)
00242 renderer->UnregisterLocalStorageHandler( this );
00243 L *l = m_BaseRenderer2LS[renderer];
00244 m_BaseRenderer2LS.erase( renderer );
00245 delete l;
00246 }
00247
00252 L *GetLocalStorage(mitk::BaseRenderer *forRenderer)
00253 {
00254 L *l = m_BaseRenderer2LS[ forRenderer ];
00255 if(!l)
00256 {
00257
00258 l = new L;
00259 m_BaseRenderer2LS[ forRenderer ] = l;
00260 forRenderer->RegisterLocalStorageHandler( this );
00261 }
00262 return l;
00263 }
00264
00265 ~LocalStorageHandler()
00266 {
00267 typename std::map<mitk::BaseRenderer *,L*>::iterator it;
00268
00269 for ( it=m_BaseRenderer2LS.begin() ; it != m_BaseRenderer2LS.end(); it++ )
00270 {
00271 (*it).first->UnregisterLocalStorageHandler(this);
00272 delete (*it).second;
00273 }
00274
00275 m_BaseRenderer2LS.clear();
00276 }
00277
00278 };
00279
00280
00281
00282
00283 };
00284
00285 }
00286
00287 #endif