]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Image.cxx
Major refactoring: API-HCI bug corrected.
[cpPlugins.git] / lib / cpPlugins / Interface / Image.cxx
1 #include <cpPlugins/Interface/Image.h>
2
3 #undef ITK_MANUAL_INSTANTIATION
4 #include <itkImage.h>
5 #include <itkCovariantVector.h>
6 #include <itkRGBPixel.h>
7 #include <itkRGBAPixel.h>
8 #include <itkVector.h>
9 #include <itkSymmetricSecondRankTensor.h>
10 #include <itkDiffusionTensor3D.h>
11 #include <itkImageToVTKImageFilter.h>
12 #include <itkVTKImageToImageFilter.h>
13
14 // -------------------------------------------------------------------------
15 #define cpPlugins_Image_Pixel( p, d, o )                                \
16   if( dynamic_cast< itk::Image< p, d >* >( o ) != NULL )                \
17     this->_ITK_2_VTK_1< p, d >( o )
18
19 // -------------------------------------------------------------------------
20 #define cpPlugins_Image_Vector( p, d, o )                              \
21   if(                                                                  \
22     dynamic_cast< itk::Image< itk::Vector< p, d >, d >* >( o ) != NULL \
23     )                                                                  \
24     this->_ITK_2_VTK_1< itk::Vector< p, d >, d >( o )
25
26 // -------------------------------------------------------------------------
27 #define cpPlugins_Image_CovVector( p, d, o )                            \
28   if(                                                                   \
29     dynamic_cast< itk::Image< itk::CovariantVector< p, d >, d >* >( o ) \
30     !=                                                                  \
31     NULL                                                                \
32     )                                                                   \
33     this->_ITK_2_VTK_1< itk::CovariantVector< p, d >, d >( o )
34
35 // -------------------------------------------------------------------------
36 #define cpPlugins_Image_SymTensor( p, d, o )                            \
37   if(                                                                   \
38     dynamic_cast< itk::Image< itk::SymmetricSecondRankTensor< p, d >, d >* >( o ) \
39     !=                                                                  \
40     NULL                                                                \
41     )                                                                   \
42     this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< p, d >, d >( o )
43
44 // -------------------------------------------------------------------------
45 #define cpPlugins_Image_RGB( p, d, o )                  \
46   cpPlugins_Image_Pixel( itk::RGBPixel< p >, d, o )
47
48 // -------------------------------------------------------------------------
49 #define cpPlugins_Image_RGBA( p, d, o )                 \
50   cpPlugins_Image_Pixel( itk::RGBAPixel< p >, d, o )
51
52 // -------------------------------------------------------------------------
53 #define cpPlugins_Image_DiffTensor( p, d, o )                   \
54   cpPlugins_Image_Pixel( itk::DiffusionTensor3D< p >, d, o )
55
56 // -------------------------------------------------------------------------
57 void cpPlugins::Interface::Image::
58 SetITKDataObject( itk::DataObject* o )
59 {
60   if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL )
61     this->_ITK_2_VTK_0< 1 >( o );
62   else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL )
63     this->_ITK_2_VTK_0< 2 >( o );
64   else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL )
65     this->_ITK_2_VTK_0< 3 >( o );
66   else
67     this->m_ITKObject = NULL;
68 }
69
70 // -------------------------------------------------------------------------
71 void cpPlugins::Interface::Image::
72 SetVTKDataObject( vtkDataObject* o )
73 {
74   // this->m_VTKObject = o;
75   std::cerr << "Image: TODO this!!!!" << std::endl;
76   std::exit( 1 );
77 }
78
79 // -------------------------------------------------------------------------
80 vtkImageData* cpPlugins::Interface::Image::
81 GetVTKImageData( )
82 {
83   return( dynamic_cast< vtkImageData* >( this->GetVTKDataObject( ) ) );
84 }
85
86 // -------------------------------------------------------------------------
87 const vtkImageData* cpPlugins::Interface::Image::
88 GetVTKImageData( ) const
89 {
90   return( dynamic_cast< const vtkImageData* >( this->GetVTKDataObject( ) ) );
91 }
92
93 // -------------------------------------------------------------------------
94 cpPlugins::Interface::Image::
95 Image( )
96   : Superclass( )
97 {
98   this->m_ClassName = "cpPlugins::Interface::Image";
99   this->m_ClassCategory = "BasicObject";
100 }
101
102 // -------------------------------------------------------------------------
103 cpPlugins::Interface::Image::
104 ~Image( )
105 {
106 }
107
108 // -------------------------------------------------------------------------
109 template< unsigned int D >
110 void cpPlugins::Interface::Image::
111 _ITK_2_VTK_0( itk::DataObject* o )
112 {
113   cpPlugins_Image_Pixel( char, D, o );
114   else cpPlugins_Image_Pixel( short, D, o );
115   else cpPlugins_Image_Pixel( int, D, o );
116   else cpPlugins_Image_Pixel( long, D, o );
117   else cpPlugins_Image_Pixel( float, D, o );
118   else cpPlugins_Image_Pixel( double, D, o );
119   else cpPlugins_Image_Pixel( unsigned char, D, o );
120   else cpPlugins_Image_Pixel( unsigned short, D, o );
121   else cpPlugins_Image_Pixel( unsigned int, D, o );
122   else cpPlugins_Image_Pixel( unsigned long, D, o );
123   else cpPlugins_Image_RGB( char, D, o );
124   else cpPlugins_Image_RGB( short, D, o );
125   else cpPlugins_Image_RGB( int, D, o );
126   else cpPlugins_Image_RGB( long, D, o );
127   else cpPlugins_Image_RGB( float, D, o );
128   else cpPlugins_Image_RGB( double, D, o );
129   else cpPlugins_Image_RGB( unsigned char, D, o );
130   else cpPlugins_Image_RGB( unsigned short, D, o );
131   else cpPlugins_Image_RGB( unsigned int, D, o );
132   else cpPlugins_Image_RGB( unsigned long, D, o );
133   else cpPlugins_Image_RGBA( char, D, o );
134   else cpPlugins_Image_RGBA( short, D, o );
135   else cpPlugins_Image_RGBA( int, D, o );
136   else cpPlugins_Image_RGBA( long, D, o );
137   else cpPlugins_Image_RGBA( float, D, o );
138   else cpPlugins_Image_RGBA( double, D, o );
139   else cpPlugins_Image_RGBA( unsigned char, D, o );
140   else cpPlugins_Image_RGBA( unsigned short, D, o );
141   else cpPlugins_Image_RGBA( unsigned int, D, o );
142   else cpPlugins_Image_RGBA( unsigned long, D, o );
143   else cpPlugins_Image_Vector( char, D, o );
144   else cpPlugins_Image_Vector( short, D, o );
145   else cpPlugins_Image_Vector( int, D, o );
146   else cpPlugins_Image_Vector( long, D, o );
147   else cpPlugins_Image_Vector( float, D, o );
148   else cpPlugins_Image_Vector( double, D, o );
149   else cpPlugins_Image_Vector( unsigned char, D, o );
150   else cpPlugins_Image_Vector( unsigned short, D, o );
151   else cpPlugins_Image_Vector( unsigned int, D, o );
152   else cpPlugins_Image_Vector( unsigned long, D, o );
153   else cpPlugins_Image_CovVector( char, D, o );
154   else cpPlugins_Image_CovVector( short, D, o );
155   else cpPlugins_Image_CovVector( int, D, o );
156   else cpPlugins_Image_CovVector( long, D, o );
157   else cpPlugins_Image_CovVector( float, D, o );
158   else cpPlugins_Image_CovVector( double, D, o );
159   else cpPlugins_Image_CovVector( unsigned char, D, o );
160   else cpPlugins_Image_CovVector( unsigned short, D, o );
161   else cpPlugins_Image_CovVector( unsigned int, D, o );
162   else cpPlugins_Image_CovVector( unsigned long, D, o );
163   else cpPlugins_Image_SymTensor( char, D, o );
164   else cpPlugins_Image_SymTensor( short, D, o );
165   else cpPlugins_Image_SymTensor( int, D, o );
166   else cpPlugins_Image_SymTensor( long, D, o );
167   else cpPlugins_Image_SymTensor( float, D, o );
168   else cpPlugins_Image_SymTensor( double, D, o );
169   else cpPlugins_Image_SymTensor( unsigned char, D, o );
170   else cpPlugins_Image_SymTensor( unsigned short, D, o );
171   else cpPlugins_Image_SymTensor( unsigned int, D, o );
172   else cpPlugins_Image_SymTensor( unsigned long, D, o );
173   else cpPlugins_Image_DiffTensor( char, D, o );
174   else cpPlugins_Image_DiffTensor( short, D, o );
175   else cpPlugins_Image_DiffTensor( int, D, o );
176   else cpPlugins_Image_DiffTensor( long, D, o );
177   else cpPlugins_Image_DiffTensor( float, D, o );
178   else cpPlugins_Image_DiffTensor( double, D, o );
179   else cpPlugins_Image_DiffTensor( unsigned char, D, o );
180   else cpPlugins_Image_DiffTensor( unsigned short, D, o );
181   else cpPlugins_Image_DiffTensor( unsigned int, D, o );
182   else cpPlugins_Image_DiffTensor( unsigned long, D, o );
183 }
184
185 // -------------------------------------------------------------------------
186 template< class P, unsigned int D >
187 void cpPlugins::Interface::Image::
188 _ITK_2_VTK_1( itk::DataObject* o )
189 {
190   typedef itk::Image< P, D > _I;
191   typedef itk::ImageToVTKImageFilter< _I > _F;
192   
193   typename _F::Pointer f = _F::New( );
194   f->SetInput( dynamic_cast< _I* >( o ) );
195   f->Update( );
196
197   this->m_ITKObject = o;
198   this->m_VTKObject = f->GetOutput( );
199   this->m_ITKvVTKConnection = f;
200 }
201
202 // eof - $RCSfile$