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