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 void cpPlugins::Interface::Image::
21 _ITK_2_VTK_0( itk::LightObject* o )
23 if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
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 );
68 this->m_VTKObject = NULL;
69 this->m_ITKvVTK = NULL;
75 // -------------------------------------------------------------------------
76 template< class P, unsigned int D >
77 void cpPlugins::Interface::Image::
78 _ITK_2_VTK_1( itk::LightObject* o )
80 if( dynamic_cast< itk::Image< P, D >* >( o ) == NULL )
82 this->m_VTKObject = NULL;
83 this->m_ITKvVTK = NULL;
87 this->_ITK_2_VTK_2< itk::Image< P, D > >( o );
90 // -------------------------------------------------------------------------
92 void cpPlugins::Interface::Image::
93 _ITK_2_VTK_2( itk::LightObject* o )
95 typedef itk::ImageToVTKImageFilter< I > _I2V;
97 I* image = dynamic_cast< I* >( o );
100 _I2V* f = dynamic_cast< _I2V* >( this->m_ITKvVTK.GetPointer( ) );
103 typename _I2V::Pointer nf = _I2V::New( );
104 this->m_ITKvVTK = nf;
105 f = nf.GetPointer( );
108 f->SetInput( image );
112 this->m_ITKObject = o;
113 this->m_VTKObject = f->GetOutput( );
117 this->m_VTKObject = NULL;
118 this->m_ITKvVTK = NULL;
124 #ifndef cpPlugins_Interface_EXPORTS
126 // =========================================================================
127 // ========== Declare import itk::Image types ==========
128 // =========================================================================
130 // -------------------------------------------------------------------------
131 #define cpPlugins_ITKImage_Import( T, D ) \
132 cpPlugins_TEMPLATE_IMPORT( \
133 2(class cpPlugins_Interface_EXPORT itk::Image< T, D >) \
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 >) \
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 )
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 )
154 // -------------------------------------------------------------------------
155 #define cpPlugins_VTKImage_Import( T, D ) \
156 cpPlugins_TEMPLATE_IMPORT( \
158 class cpPlugins_Interface_EXPORT \
159 itk::ImageToVTKImageFilter< itk::Image< T, D > > \
163 // -------------------------------------------------------------------------
164 #define cpPlugins_VTKArrayImage_Import( A, T, DA, DI ) \
165 cpPlugins_TEMPLATE_IMPORT( \
167 cpPlugins_Interface_EXPORT \
168 itk::ImageToVTKImageFilter< itk::Image< A< T, DA >, DI > >) \
171 // -------------------------------------------------------------------------
172 #define cpPlugins_VTKImage_AllDims_Import( T ) \
173 cpPlugins_VTKImage_Import( T, 2 ); \
174 cpPlugins_VTKImage_Import( T, 3 )
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 )
181 // -------------------------------------------------------------------------
182 #define cpPlugins_Image_Import( T, D ) \
183 cpPlugins_ITKImage_Import( T, D ); \
184 cpPlugins_VTKImage_Import( T, D ) \
186 // -------------------------------------------------------------------------
187 #define cpPlugins_Image_AllDims_Import( T ) \
188 cpPlugins_ITKImage_AllDims_Import( T ); \
189 cpPlugins_VTKImage_AllDims_Import( T ) \
191 // -------------------------------------------------------------------------
192 #define cpPlugins_ArrayImage_AllDims_Import( A, T ) \
193 cpPlugins_ITKArrayImage_AllDims_Import( A, T ); \
194 cpPlugins_VTKArrayImage_AllDims_Import( A, T ) \
196 // -------------------------------------------------------------------------
197 // ITK-VTK base clases
198 // -------------------------------------------------------------------------
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 );
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 > );
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 > );
233 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< float > );
234 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< double > );
236 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, float );
237 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, double );
239 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, float );
240 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, double );
242 cpPlugins_ArrayImage_AllDims_Import( itk::Point, float );
243 cpPlugins_ArrayImage_AllDims_Import( itk::Point, double );
245 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, float );
246 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, double );
248 // -------------------------------------------------------------------------
249 // ITK-only base clases
250 // -------------------------------------------------------------------------
252 cpPlugins_ITKImage_AllDims_Import( std::complex< float > );
253 cpPlugins_ITKImage_AllDims_Import( std::complex< double > );
255 cpPlugins_ITKImage_Import( itk::Offset< 2 >, 2 );
256 cpPlugins_ITKImage_Import( itk::Offset< 3 >, 3 );
257 cpPlugins_ITKImage_Import( itk::Offset< 4 >, 4 );
259 // =========================================================================
260 // ========== Declare import itk::VectorImage types ==========
261 // =========================================================================
263 // -------------------------------------------------------------------------
264 #define cpPlugins_VectorImage_Import( T, D ) \
265 cpPlugins_TEMPLATE_IMPORT( \
266 2(class cpPlugins_Interface_EXPORT itk::VectorImage< T, D >) \
269 // -------------------------------------------------------------------------
270 #define cpPlugins_ArrayVectorImage_Import( A, T, DA, DI ) \
271 cpPlugins_TEMPLATE_IMPORT( \
273 cpPlugins_Interface_EXPORT \
274 itk::VectorImage< A< T, DA >, DI >) \
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 )
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 )
289 // -------------------------------------------------------------------------
290 // ITK-VTK base clases
291 // -------------------------------------------------------------------------
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 );
304 cpPlugins_VectorImage_AllDims_Import( std::complex< float > );
305 cpPlugins_VectorImage_AllDims_Import( std::complex< double > );
307 cpPlugins_VectorImage_Import( itk::Offset< 2 >, 2 );
308 cpPlugins_VectorImage_Import( itk::Offset< 3 >, 3 );
309 cpPlugins_VectorImage_Import( itk::Offset< 4 >, 4 );
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 > );
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 > );
333 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< float > );
334 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< double > );
336 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, float );
337 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, double );
339 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, float );
340 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, double );
342 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, float );
343 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, double );
345 cpPlugins_ArrayVectorImage_AllDims_Import(
346 itk::SymmetricSecondRankTensor, float
348 cpPlugins_ArrayVectorImage_AllDims_Import(
349 itk::SymmetricSecondRankTensor, double
352 #endif // cpPlugins_Interface_EXPORTS
354 #endif // __CPPLUGINS__INTERFACE__IMAGE__HXX__