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 MITKIMAGEMAPPER2D_H_HEADER_INCLUDED_C10E906E
00020 #define MITKIMAGEMAPPER2D_H_HEADER_INCLUDED_C10E906E
00021
00022 #include "mitkCommon.h"
00023 #include "mitkGLMapper2D.h"
00024 #include "mitkBaseRenderer.h"
00025
00026 #include <map>
00027 #include <assert.h>
00028
00029 #include <itkCommand.h>
00030 #include <itkEventObject.h>
00031
00032 #include <vtkSystemIncludes.h>
00033
00034
00035 class iil4mitkPicImage;
00036 class Vtk2itk;
00037 class vtkImageReslice;
00038 class vtkLookupTable;
00039 class vtkGeneralTransform;
00040 class vtkImageChangeInformation;
00041 class vtkPoints;
00042 class vtkMitkThickSlicesFilter;
00043
00044 namespace mitk {
00045
00046
00047
00098 class MITK_CORE_EXPORT ImageMapperGL2D : public GLMapper2D
00099 {
00100
00101 public:
00102
00104 mitkClassMacro( ImageMapperGL2D,GLMapper2D );
00105
00107 itkNewMacro(Self);
00108
00110 typedef mitk::Image InputImageType;
00111 typedef InputImageType::Pointer InputImagePointer;
00112 typedef InputImageType::ConstPointer InputImageConstPointer;
00113 typedef SlicedData::RegionType InputImageRegionType;
00114
00116 const InputImageType *GetInput(void);
00117
00119 virtual void GenerateAllData();
00120
00122 virtual void Paint( mitk::BaseRenderer *renderer );
00123
00126 virtual void Update(mitk::BaseRenderer * renderer);
00127
00128 virtual void ApplyProperties(mitk::BaseRenderer* renderer);
00129
00133 class MITK_CORE_EXPORT RendererInfo
00134 {
00136 int m_RendererID;
00137
00140 iil4mitkPicImage* m_iil4mitkImage;
00141 mitk::BaseRenderer* m_Renderer;
00142
00143 public:
00145 itk::TimeStamp m_LastUpdateTime;
00146
00148 mitkIpPicDescriptor *m_Pic;
00149
00151 Vector2D m_PixelsPerMM;
00152
00154 Vector2D m_Extent;
00155
00157 Vector2D m_Overlap;
00158
00160 vtkImageChangeInformation *m_UnitSpacingImageFilter;
00161
00163 vtkImageReslice *m_Reslicer;
00164
00166 vtkMitkThickSlicesFilter *m_TSFilter;
00167
00169 vtkImageData *m_Image;
00170
00172 const Geometry3D *m_ReferenceGeometry;
00173
00174 bool m_TextureInterpolation;
00175
00177 unsigned long m_ObserverID;
00178
00179 RendererInfo();
00180
00181 ~RendererInfo();
00182
00183 inline bool IsInitialized() const
00184 {
00185 return m_RendererID >= 0;
00186 }
00187
00188 void Initialize( int rendererID, mitk::BaseRenderer *renderer,
00189 unsigned long observerID );
00190
00191 void Set_iil4mitkImage(iil4mitkPicImage* iil4mitkImage);
00192
00193 inline iil4mitkPicImage* Get_iil4mitkImage() const
00194 {
00195 return m_iil4mitkImage;
00196 }
00197
00198 inline int GetRendererID() const
00199 {
00200 return m_RendererID;
00201 }
00202
00203 void RemoveObserver();
00204
00205 void Squeeze();
00206 };
00207
00208
00209
00213 virtual int GetAssociatedChannelNr( mitk::BaseRenderer *renderer );
00214
00216 const RendererInfo *GetRendererInfo( mitk::BaseRenderer *renderer )
00217 {
00218 return &this->AccessRendererInfo(renderer);
00219 }
00220
00222 virtual void Clear();
00223
00224 static void SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer = NULL, bool overwrite = false);
00225
00226 protected:
00227 ImageMapperGL2D();
00228
00229 virtual ~ImageMapperGL2D();
00230
00232 virtual void GenerateData(mitk::BaseRenderer *renderer);
00233
00235 inline RendererInfo & AccessRendererInfo( mitk::BaseRenderer* renderer )
00236 {
00237 RendererInfo& rendererInfo = m_RendererInfo[renderer];
00238 if(rendererInfo.IsInitialized()==false)
00239 {
00240
00241
00242
00243
00244
00245 typedef itk::MemberCommand< ImageMapperGL2D > MemberCommandType;
00246 MemberCommandType::Pointer deleteRendererCommand =
00247 MemberCommandType::New();
00248
00249 deleteRendererCommand->SetCallbackFunction(
00250 this, &ImageMapperGL2D::DeleteRendererCallback );
00251
00252 unsigned long observerID = renderer->AddObserver(
00253 BaseRenderer::RendererResetEvent(), deleteRendererCommand );
00254
00255
00256 rendererInfo.Initialize( ImageMapperGL2D::numRenderer++, renderer, observerID );
00257 }
00258
00259 return rendererInfo;
00260 }
00261
00262 void DeleteRendererCallback( itk::Object *object, const itk::EventObject & );
00263
00264
00265 double CalculateSpacing( const mitk::Geometry3D *geometry,
00266 const mitk::Vector3D &d ) const;
00267
00268 bool LineIntersectZero( vtkPoints *points, int p1, int p2,
00269 vtkFloatingPointType *bounds );
00270
00271 bool CalculateClippedPlaneBounds( const Geometry3D *boundingGeometry,
00272 const PlaneGeometry *planeGeometry, vtkFloatingPointType *bounds );
00273
00278 static int numRenderer;
00279
00280 protected:
00281 typedef std::map<BaseRenderer*,RendererInfo> RendererInfoMap;
00282
00283
00287 RendererInfoMap m_RendererInfo;
00288
00289 vtkGeneralTransform *m_ComposedResliceTransform;
00290
00291 private:
00292 int m_iil4mitkMode;
00293
00294 };
00295
00296 }
00297
00298 #endif