1 #ifndef __CPPLUGINS__INTERFACE__IMAGE__HXX__
2 #define __CPPLUGINS__INTERFACE__IMAGE__HXX__
7 #include <itkVectorImage.h>
8 #include <itkImageToVTKImageFilter.h>
10 #include <itkCovariantVector.h>
11 #include <itkDiffusionTensor3D.h>
13 #include <itkRGBPixel.h>
14 #include <itkRGBAPixel.h>
15 #include <itkSymmetricSecondRankTensor.h>
16 #include <itkVector.h>
18 // -------------------------------------------------------------------------
19 template< unsigned int D >
20 bool cpPlugins::Interface::Image::
21 _ITK_2_VTK_0( itk::LightObject* o )
24 if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
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 );
71 // -------------------------------------------------------------------------
72 template< class P, unsigned int D >
73 bool cpPlugins::Interface::Image::
74 _ITK_2_VTK_1( itk::LightObject* o )
76 if( dynamic_cast< itk::Image< P, D >* >( o ) != NULL )
77 return( this->_ITK_2_VTK_2< itk::Image< P, D > >( o ) );
82 // -------------------------------------------------------------------------
84 bool cpPlugins::Interface::Image::
85 _ITK_2_VTK_2( itk::LightObject* o )
87 typedef itk::ImageToVTKImageFilter< I > _I2V;
89 I* image = dynamic_cast< I* >( o );
92 _I2V* f = dynamic_cast< _I2V* >( this->m_ITKvVTK.GetPointer( ) );
95 typename _I2V::Pointer nf = _I2V::New( );
100 f->SetInput( image );
104 this->m_ITKObject = o;
105 this->m_VTKObject = f->GetOutput( );
112 #ifndef cpPlugins_Interface_EXPORTS
114 // =========================================================================
115 // ========== Declare import itk::Image types ==========
116 // =========================================================================
118 // -------------------------------------------------------------------------
119 #define cpPlugins_ITKImage_Import( T, D ) \
120 cpPlugins_TEMPLATE_IMPORT( \
121 2(class cpPlugins_Interface_EXPORT itk::Image< T, D >) \
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 >) \
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 )
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 )
142 // -------------------------------------------------------------------------
143 #define cpPlugins_VTKImage_Import( T, D ) \
144 cpPlugins_TEMPLATE_IMPORT( \
146 class cpPlugins_Interface_EXPORT \
147 itk::ImageToVTKImageFilter< itk::Image< T, D > > \
151 // -------------------------------------------------------------------------
152 #define cpPlugins_VTKArrayImage_Import( A, T, DA, DI ) \
153 cpPlugins_TEMPLATE_IMPORT( \
155 cpPlugins_Interface_EXPORT \
156 itk::ImageToVTKImageFilter< itk::Image< A< T, DA >, DI > >) \
159 // -------------------------------------------------------------------------
160 #define cpPlugins_VTKImage_AllDims_Import( T ) \
161 cpPlugins_VTKImage_Import( T, 2 ); \
162 cpPlugins_VTKImage_Import( T, 3 )
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 )
169 // -------------------------------------------------------------------------
170 #define cpPlugins_Image_Import( T, D ) \
171 cpPlugins_ITKImage_Import( T, D ); \
172 cpPlugins_VTKImage_Import( T, D ) \
174 // -------------------------------------------------------------------------
175 #define cpPlugins_Image_AllDims_Import( T ) \
176 cpPlugins_ITKImage_AllDims_Import( T ); \
177 cpPlugins_VTKImage_AllDims_Import( T ) \
179 // -------------------------------------------------------------------------
180 #define cpPlugins_ArrayImage_AllDims_Import( A, T ) \
181 cpPlugins_ITKArrayImage_AllDims_Import( A, T ); \
182 cpPlugins_VTKArrayImage_AllDims_Import( A, T ) \
184 // -------------------------------------------------------------------------
185 // ITK-VTK base clases
186 // -------------------------------------------------------------------------
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 );
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 > );
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 > );
221 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< float > );
222 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< double > );
224 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, float );
225 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, double );
227 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, float );
228 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, double );
230 cpPlugins_ArrayImage_AllDims_Import( itk::Point, float );
231 cpPlugins_ArrayImage_AllDims_Import( itk::Point, double );
233 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, float );
234 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, double );
236 // -------------------------------------------------------------------------
237 // ITK-only base clases
238 // -------------------------------------------------------------------------
240 cpPlugins_ITKImage_AllDims_Import( std::complex< float > );
241 cpPlugins_ITKImage_AllDims_Import( std::complex< double > );
243 cpPlugins_ITKImage_Import( itk::Offset< 2 >, 2 );
244 cpPlugins_ITKImage_Import( itk::Offset< 3 >, 3 );
245 cpPlugins_ITKImage_Import( itk::Offset< 4 >, 4 );
247 // =========================================================================
248 // ========== Declare import itk::VectorImage types ==========
249 // =========================================================================
251 // -------------------------------------------------------------------------
252 #define cpPlugins_VectorImage_Import( T, D ) \
253 cpPlugins_TEMPLATE_IMPORT( \
254 2(class cpPlugins_Interface_EXPORT itk::VectorImage< T, D >) \
257 // -------------------------------------------------------------------------
258 #define cpPlugins_ArrayVectorImage_Import( A, T, DA, DI ) \
259 cpPlugins_TEMPLATE_IMPORT( \
261 cpPlugins_Interface_EXPORT \
262 itk::VectorImage< A< T, DA >, DI >) \
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 )
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 )
277 // -------------------------------------------------------------------------
278 // ITK-VTK base clases
279 // -------------------------------------------------------------------------
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 );
292 cpPlugins_VectorImage_AllDims_Import( std::complex< float > );
293 cpPlugins_VectorImage_AllDims_Import( std::complex< double > );
295 cpPlugins_VectorImage_Import( itk::Offset< 2 >, 2 );
296 cpPlugins_VectorImage_Import( itk::Offset< 3 >, 3 );
297 cpPlugins_VectorImage_Import( itk::Offset< 4 >, 4 );
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 > );
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 > );
321 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< float > );
322 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< double > );
324 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, float );
325 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, double );
327 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, float );
328 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, double );
330 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, float );
331 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, double );
333 cpPlugins_ArrayVectorImage_AllDims_Import(
334 itk::SymmetricSecondRankTensor, float
336 cpPlugins_ArrayVectorImage_AllDims_Import(
337 itk::SymmetricSecondRankTensor, double
340 #endif // cpPlugins_Interface_EXPORTS
342 #endif // __CPPLUGINS__INTERFACE__IMAGE__HXX__