]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/DataObjects/Image.hxx
3b0bd8e1e1432b519f7ccf22ba71b12533d37d50
[cpPlugins.git] / lib / cpPlugins / DataObjects / Image.hxx
1 #ifndef __cpPlugins__DataObjects__Image__hxx__
2 #define __cpPlugins__DataObjects__Image__hxx__
3
4 #include <itkImageToVTKImageFilter.h>
5 #include <itkVTKImageToImageFilter.h>
6 #include <itkImageToVTKImageFilter.hxx>
7 #include <itkVTKImageToImageFilter.hxx>
8 #include <itkVTKImageExport.hxx>
9 #include <itkVTKImageImport.hxx>
10
11 // -------------------------------------------------------------------------
12 template< unsigned int _VDim >
13 void cpPlugins::DataObjects::Image::
14 _ITK_2_VTK_0( itk::ImageBase< _VDim >* image )
15 {
16   cpPlugins_Demangle_ImageIntegers( image, _ITK_2_VTK_1, _VDim );
17   else cpPlugins_Demangle_ImageReals( image, _ITK_2_VTK_1, _VDim );
18   else cpPlugins_Demangle_ImageColors( image, _ITK_2_VTK_1, _VDim );
19   else cpPlugins_Demangle_ImageFixedArrays( image, _ITK_2_VTK_1, _VDim );
20   else cpPlugins_Demangle_ImageCovariantVectors( image, _ITK_2_VTK_1, _VDim );
21   else cpPlugins_Demangle_ImagePoints( image, _ITK_2_VTK_1, _VDim );
22   else cpPlugins_Demangle_ImageVectors( image, _ITK_2_VTK_1, _VDim );
23   else cpPlugins_Demangle_ImageSymmetricSecondRankTensors( image, _ITK_2_VTK_1, _VDim );
24   else
25   {
26     this->m_VTK = NULL;
27     this->m_ITKvVTK = NULL;
28
29   } // fi
30 }
31
32 // -------------------------------------------------------------------------
33 template< class _TImage >
34 void cpPlugins::DataObjects::Image::
35 _ITK_2_VTK_1( _TImage* image )
36 {
37   typedef itk::ImageToVTKImageFilter< _TImage > _TFilter;
38   _TFilter* f = dynamic_cast< _TFilter* >( this->m_ITKvVTK.GetPointer( ) );
39   if( f == NULL )
40   {
41     typename _TFilter::Pointer nf = _TFilter::New( );
42     this->m_ITKvVTK = nf;
43     f = nf.GetPointer( );
44
45   } // fi
46   f->SetInput( image );
47   f->Update( );
48
49   // Keep object track
50   this->m_ITK = image;
51   this->m_VTK = f->GetOutput( );
52 }
53
54 // -------------------------------------------------------------------------
55 template< class _TPixel >
56 void cpPlugins::DataObjects::Image::
57 _VTK_2_ITK_0( vtkImageData* image )
58 {
59   if( image->GetDataDimension( ) == 2 )
60     this->_VTK_2_ITK_1< _TPixel, 2 >( image );
61   else if( image->GetDataDimension( ) == 3 )
62     this->_VTK_2_ITK_1< _TPixel, 3 >( image );
63   else
64   {
65     this->m_ITK = NULL;
66     this->m_ITKvVTK = NULL;
67
68   } // fi
69 }
70
71 // -------------------------------------------------------------------------
72 template< class _TPixel, unsigned int _VDim >
73 void cpPlugins::DataObjects::Image::
74 _VTK_2_ITK_1( vtkImageData* image )
75 {
76   typedef itk::Image< _TPixel, _VDim > _TImage;
77   typedef itk::VTKImageToImageFilter< _TImage > _TFilter;
78   _TFilter* f = dynamic_cast< _TFilter* >( this->m_ITKvVTK.GetPointer( ) );
79
80   std::cout << typeid( _TImage ).name( ) << std::endl;
81
82   if( f == NULL )
83   {
84     typename _TFilter::Pointer nf = _TFilter::New( );
85     this->m_ITKvVTK = nf;
86     f = nf.GetPointer( );
87
88   } // fi
89   f->SetInput( image );
90   f->Update( );
91
92   // Keep object track
93   this->m_VTK = image;
94   this->m_ITK = f->GetOutput( );
95 }
96
97 #endif // __cpPlugins__DataObjects__Image__hxx__
98
99 // eof - $RCSfile$