]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Image.hxx
3160fea305f850e73ca3fdd897da294052390254
[cpPlugins.git] / lib / cpPlugins / Interface / Image.hxx
1 #ifndef __CPPLUGINS__INTERFACE__IMAGE__HXX__
2 #define __CPPLUGINS__INTERFACE__IMAGE__HXX__
3
4 #include <complex>
5
6 #include <itkImage.h>
7 #include <itkVectorImage.h>
8 #include <itkImageToVTKImageFilter.h>
9
10 #include <itkCovariantVector.h>
11 #include <itkDiffusionTensor3D.h>
12 #include <itkPoint.h>
13 #include <itkRGBPixel.h>
14 #include <itkRGBAPixel.h>
15 #include <itkSymmetricSecondRankTensor.h>
16 #include <itkVector.h>
17
18 // -------------------------------------------------------------------------
19 template< unsigned int D >
20 bool cpPlugins::Interface::Image::
21 _ITK_2_VTK_0( itk::LightObject* o )
22 {
23   bool s = false;
24   if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
25   {
26     s |= this->_ITK_2_VTK_1< char, D >( o );
27     s |= this->_ITK_2_VTK_1< short, D >( o );
28     s |= this->_ITK_2_VTK_1< int, D >( o );
29     s |= this->_ITK_2_VTK_1< long, D >( o );
30     s |= this->_ITK_2_VTK_1< unsigned char, D >( o );
31     s |= this->_ITK_2_VTK_1< unsigned short, D >( o );
32     s |= this->_ITK_2_VTK_1< unsigned int, D >( o );
33     s |= this->_ITK_2_VTK_1< unsigned long, D >( o );
34     s |= this->_ITK_2_VTK_1< float, D >( o );
35     s |= this->_ITK_2_VTK_1< double, D >( o );
36     s |= this->_ITK_2_VTK_1< itk::RGBPixel< char >, D >( o );
37     s |= this->_ITK_2_VTK_1< itk::RGBPixel< short >, D >( o );
38     s |= this->_ITK_2_VTK_1< itk::RGBPixel< int >, D >( o );
39     s |= this->_ITK_2_VTK_1< itk::RGBPixel< long >, D >( o );
40     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned char >, D >( o );
41     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned short >, D >( o );
42     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned int >, D >( o );
43     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned long >, D >( o );
44     s |= this->_ITK_2_VTK_1< itk::RGBPixel< float >, D >( o );
45     s |= this->_ITK_2_VTK_1< itk::RGBPixel< double >, D >( o );
46     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< char >, D >( o );
47     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< short >, D >( o );
48     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< int >, D >( o );
49     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< long >, D >( o );
50     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned char >, D >( o );
51     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned short >, D >( o );
52     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned int >, D >( o );
53     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned long >, D >( o );
54     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< float >, D >( o );
55     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< double >, D >( o );
56     s |= this->_ITK_2_VTK_1< itk::DiffusionTensor3D< float >, D >( o );
57     s |= this->_ITK_2_VTK_1< itk::DiffusionTensor3D< double >, D >( o );
58     s |= this->_ITK_2_VTK_1< itk::Vector< float, D >, D >( o );
59     s |= this->_ITK_2_VTK_1< itk::Vector< double, D >, D >( o );
60     s |= this->_ITK_2_VTK_1< itk::CovariantVector< float, D >, D >( o );
61     s |= this->_ITK_2_VTK_1< itk::CovariantVector< double, D >, D >( o );
62     s |= this->_ITK_2_VTK_1< itk::Point< float, D >, D >( o );
63     s |= this->_ITK_2_VTK_1< itk::Point< double, D >, D >( o );
64     s |= this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< float, D >, D >( o );
65     s |= this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< double, D >, D >( o );
66
67   } // fi
68   return( s );
69 }
70
71 // -------------------------------------------------------------------------
72 template< class P, unsigned int D >
73 bool cpPlugins::Interface::Image::
74 _ITK_2_VTK_1( itk::LightObject* o )
75 {
76   if( dynamic_cast< itk::Image< P, D >* >( o ) != NULL )
77     return( this->_ITK_2_VTK_2< itk::Image< P, D > >( o ) );
78   else
79     return( false );
80 }
81
82 // -------------------------------------------------------------------------
83 template< class I >
84 bool cpPlugins::Interface::Image::
85 _ITK_2_VTK_2( itk::LightObject* o )
86 {
87   typedef itk::ImageToVTKImageFilter< I > _I2V;
88
89   I* image = dynamic_cast< I* >( o );
90   if( image != NULL )
91   {
92     _I2V* f = dynamic_cast< _I2V* >( this->m_ITKvVTK.GetPointer( ) );
93     if( f == NULL )
94     {
95       typename _I2V::Pointer nf = _I2V::New( );
96       this->m_ITKvVTK = nf;
97       f = nf.GetPointer( );
98
99     } // fi
100     f->SetInput( image );
101     f->Update( );
102
103     // Keep object track
104     this->m_ITKObject = o;
105     this->m_VTKObject = f->GetOutput( );
106     return( true );
107   }
108   else
109     return( false );
110 }
111
112 #ifndef cpPlugins_Interface_EXPORTS
113
114 // =========================================================================
115 // ==========           Declare import itk::Image types           ==========
116 // =========================================================================
117
118 // -------------------------------------------------------------------------
119 #define cpPlugins_ITKImage_Import( T, D )                       \
120   cpPlugins_TEMPLATE_IMPORT(                                    \
121     2(class cpPlugins_Interface_EXPORT itk::Image< T, D >)      \
122     )
123
124 // -------------------------------------------------------------------------
125 #define cpPlugins_ITKArrayImage_Import( A, T, DA, DI )                  \
126   cpPlugins_TEMPLATE_IMPORT(                                            \
127     3(class cpPlugins_Interface_EXPORT itk::Image< A< T, DA >, DI >)    \
128     )
129
130 // -------------------------------------------------------------------------
131 #define cpPlugins_ITKImage_AllDims_Import( T )  \
132   cpPlugins_ITKImage_Import( T, 2 );            \
133   cpPlugins_ITKImage_Import( T, 3 );            \
134   cpPlugins_ITKImage_Import( T, 4 )
135
136 // -------------------------------------------------------------------------
137 #define cpPlugins_ITKArrayImage_AllDims_Import( A, T )  \
138   cpPlugins_ITKArrayImage_Import( A, T, 2, 2 );         \
139   cpPlugins_ITKArrayImage_Import( A, T, 3, 3 );         \
140   cpPlugins_ITKArrayImage_Import( A, T, 4, 4 )
141
142 // -------------------------------------------------------------------------
143 #define cpPlugins_VTKImage_Import( T, D )               \
144   cpPlugins_TEMPLATE_IMPORT(                            \
145     2(                                                  \
146       class cpPlugins_Interface_EXPORT                  \
147       itk::ImageToVTKImageFilter< itk::Image< T, D > >  \
148       )                                                 \
149     )
150
151 // -------------------------------------------------------------------------
152 #define cpPlugins_VTKArrayImage_Import( A, T, DA, DI )                  \
153   cpPlugins_TEMPLATE_IMPORT(                                            \
154     3(class                                                             \
155       cpPlugins_Interface_EXPORT                                        \
156       itk::ImageToVTKImageFilter< itk::Image< A< T, DA >, DI > >)       \
157     )
158
159 // -------------------------------------------------------------------------
160 #define cpPlugins_VTKImage_AllDims_Import( T )  \
161   cpPlugins_VTKImage_Import( T, 2 );            \
162   cpPlugins_VTKImage_Import( T, 3 )
163
164 // -------------------------------------------------------------------------
165 #define cpPlugins_VTKArrayImage_AllDims_Import( A, T )  \
166   cpPlugins_VTKArrayImage_Import( A, T, 2, 2 );         \
167   cpPlugins_VTKArrayImage_Import( A, T, 3, 3 )
168
169 // -------------------------------------------------------------------------
170 #define cpPlugins_Image_Import( T, D )          \
171   cpPlugins_ITKImage_Import( T, D );            \
172   cpPlugins_VTKImage_Import( T, D )             \
173   
174 // -------------------------------------------------------------------------
175 #define cpPlugins_Image_AllDims_Import( T )     \
176   cpPlugins_ITKImage_AllDims_Import( T );       \
177   cpPlugins_VTKImage_AllDims_Import( T )        \
178   
179 // -------------------------------------------------------------------------
180 #define cpPlugins_ArrayImage_AllDims_Import( A, T )     \
181   cpPlugins_ITKArrayImage_AllDims_Import( A, T );       \
182   cpPlugins_VTKArrayImage_AllDims_Import( A, T )        \
183   
184 // -------------------------------------------------------------------------
185 // ITK-VTK base clases
186 // -------------------------------------------------------------------------
187
188 cpPlugins_Image_AllDims_Import( char );
189 cpPlugins_Image_AllDims_Import( short );
190 cpPlugins_Image_AllDims_Import( int );
191 cpPlugins_Image_AllDims_Import( long );
192 cpPlugins_Image_AllDims_Import( unsigned char );
193 cpPlugins_Image_AllDims_Import( unsigned short );
194 cpPlugins_Image_AllDims_Import( unsigned int );
195 cpPlugins_Image_AllDims_Import( unsigned long );
196 cpPlugins_Image_AllDims_Import( float );
197 cpPlugins_Image_AllDims_Import( double );
198
199 cpPlugins_Image_AllDims_Import( itk::RGBPixel< char > );
200 cpPlugins_Image_AllDims_Import( itk::RGBPixel< short > );
201 cpPlugins_Image_AllDims_Import( itk::RGBPixel< int > );
202 cpPlugins_Image_AllDims_Import( itk::RGBPixel< long > );
203 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned char > );
204 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned short > );
205 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned int > );
206 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned long > );
207 cpPlugins_Image_AllDims_Import( itk::RGBPixel< float > );
208 cpPlugins_Image_AllDims_Import( itk::RGBPixel< double > );
209
210 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< char > );
211 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< short > );
212 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< int > );
213 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< long > );
214 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned char > );
215 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned short > );
216 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned int > );
217 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned long > );
218 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< float > );
219 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< double > );
220
221 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< float > );
222 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< double > );
223
224 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, float );
225 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, double );
226
227 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, float );
228 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, double );
229
230 cpPlugins_ArrayImage_AllDims_Import( itk::Point, float );
231 cpPlugins_ArrayImage_AllDims_Import( itk::Point, double );
232
233 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, float );
234 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, double );
235
236 // -------------------------------------------------------------------------
237 // ITK-only base clases
238 // -------------------------------------------------------------------------
239
240 cpPlugins_ITKImage_AllDims_Import( std::complex< float > );
241 cpPlugins_ITKImage_AllDims_Import( std::complex< double > );
242
243 cpPlugins_ITKImage_Import( itk::Offset< 2 >, 2 );
244 cpPlugins_ITKImage_Import( itk::Offset< 3 >, 3 );
245 cpPlugins_ITKImage_Import( itk::Offset< 4 >, 4 );
246
247 // =========================================================================
248 // ==========        Declare import itk::VectorImage types        ==========
249 // =========================================================================
250
251 // -------------------------------------------------------------------------
252 #define cpPlugins_VectorImage_Import( T, D )                            \
253   cpPlugins_TEMPLATE_IMPORT(                                            \
254     2(class cpPlugins_Interface_EXPORT itk::VectorImage< T, D >)        \
255     )
256
257 // -------------------------------------------------------------------------
258 #define cpPlugins_ArrayVectorImage_Import( A, T, DA, DI )               \
259   cpPlugins_TEMPLATE_IMPORT(                                            \
260     3(class                                                             \
261       cpPlugins_Interface_EXPORT                                        \
262       itk::VectorImage< A< T, DA >, DI >)                               \
263     )
264
265 // -------------------------------------------------------------------------
266 #define cpPlugins_VectorImage_AllDims_Import( T )  \
267   cpPlugins_VectorImage_Import( T, 2 );            \
268   cpPlugins_VectorImage_Import( T, 3 );            \
269   cpPlugins_VectorImage_Import( T, 4 )
270
271 // -------------------------------------------------------------------------
272 #define cpPlugins_ArrayVectorImage_AllDims_Import( A, T )     \
273   cpPlugins_ArrayVectorImage_Import( A, T, 2, 2 );            \
274   cpPlugins_ArrayVectorImage_Import( A, T, 3, 3 );            \
275   cpPlugins_ArrayVectorImage_Import( A, T, 4, 4 )
276
277 // -------------------------------------------------------------------------
278 // ITK-VTK base clases
279 // -------------------------------------------------------------------------
280
281 cpPlugins_VectorImage_AllDims_Import( char );
282 cpPlugins_VectorImage_AllDims_Import( short );
283 cpPlugins_VectorImage_AllDims_Import( int );
284 cpPlugins_VectorImage_AllDims_Import( long );
285 cpPlugins_VectorImage_AllDims_Import( unsigned char );
286 cpPlugins_VectorImage_AllDims_Import( unsigned short );
287 cpPlugins_VectorImage_AllDims_Import( unsigned int );
288 cpPlugins_VectorImage_AllDims_Import( unsigned long );
289 cpPlugins_VectorImage_AllDims_Import( float );
290 cpPlugins_VectorImage_AllDims_Import( double );
291
292 cpPlugins_VectorImage_AllDims_Import( std::complex< float > );
293 cpPlugins_VectorImage_AllDims_Import( std::complex< double > );
294
295 cpPlugins_VectorImage_Import( itk::Offset< 2 >, 2 );
296 cpPlugins_VectorImage_Import( itk::Offset< 3 >, 3 );
297 cpPlugins_VectorImage_Import( itk::Offset< 4 >, 4 );
298
299 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< char > );
300 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< short > );
301 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< int > );
302 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< long > );
303 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned char > );
304 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned short > );
305 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned int > );
306 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned long > );
307 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< float > );
308 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< double > );
309
310 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< char > );
311 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< short > );
312 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< int > );
313 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< long > );
314 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned char > );
315 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned short > );
316 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned int > );
317 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned long > );
318 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< float > );
319 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< double > );
320
321 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< float > );
322 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< double > );
323
324 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, float );
325 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, double );
326
327 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, float );
328 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, double );
329
330 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, float );
331 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, double );
332
333 cpPlugins_ArrayVectorImage_AllDims_Import(
334   itk::SymmetricSecondRankTensor, float
335   );
336 cpPlugins_ArrayVectorImage_AllDims_Import(
337   itk::SymmetricSecondRankTensor, double
338   );
339
340 #endif // cpPlugins_Interface_EXPORTS
341
342 #endif // __CPPLUGINS__INTERFACE__IMAGE__HXX__
343
344 // eof - $RCSfile$