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 #define cpPlugins_VTKImage_Demangle( TI, T, D, o ) \
20 if( typeid( TI ) == typeid( itk::Image< T, D > ) ) \
21 this->_ITK_2_VTK< T, D >( o )
23 // -------------------------------------------------------------------------
24 #define cpPlugins_VTKImageArray_Demangle( TI, T, P, DP, DI, o ) \
25 if( typeid( TI ) == typeid( itk::Image< T< P, DP >, DI > ) ) \
26 this->_ITK_2_VTK< T< P, DP >, DI >( o )
28 // -------------------------------------------------------------------------
29 #define cpPlugins_VTKImage_Demangle_AllDims( TI, T, o ) \
30 cpPlugins_VTKImage_Demangle( TI, T, 2, o ); \
31 else cpPlugins_VTKImage_Demangle( TI, T, 3, o )
33 // -------------------------------------------------------------------------
34 #define cpPlugins_VTKImageArray_Demangle_AllDims( TI, T, P, o ) \
35 cpPlugins_VTKImageArray_Demangle( TI, T, P, 2, 2, o ); \
36 else cpPlugins_VTKImageArray_Demangle( TI, T, P, 3, 3, o )
38 // -------------------------------------------------------------------------
40 void cpPlugins::Interface::Image::
41 SetITK( itk::Object* object )
43 // Check if input object has the desired type
44 I* image = dynamic_cast< I* >( object );
47 this->m_ITKObject = NULL;
48 this->m_VTKObject = NULL;
49 this->m_ITKvVTKConnection = NULL;
55 // --------- TODO ---------------
56 typename I::DirectionType norm_dir;
57 norm_dir.SetIdentity( );
58 image->SetDirection( norm_dir );
59 // --------- TODO ---------------
62 cpPlugins_VTKImage_Demangle_AllDims( I, char, image );
63 else cpPlugins_VTKImage_Demangle_AllDims( I, short, image );
64 else cpPlugins_VTKImage_Demangle_AllDims( I, int, image );
65 else cpPlugins_VTKImage_Demangle_AllDims( I, long, image );
66 else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned char, image );
67 else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned short, image );
68 else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned int, image );
69 else cpPlugins_VTKImage_Demangle_AllDims( I, unsigned long, image );
70 else cpPlugins_VTKImage_Demangle_AllDims( I, float, image );
71 else cpPlugins_VTKImage_Demangle_AllDims( I, double, image );
72 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< char >, image );
73 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< short >, image );
74 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< int >, image );
75 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< long >, image );
76 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned char >, image );
77 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned short >, image );
78 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned int >, image );
79 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< unsigned long >, image );
80 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< float >, image );
81 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBPixel< double >, image );
82 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< char >, image );
83 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< short >, image );
84 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< int >, image );
85 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< long >, image );
86 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned char >, image );
87 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned short >, image );
88 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned int >, image );
89 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< unsigned long >, image );
90 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< float >, image );
91 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::RGBAPixel< double >, image );
92 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::DiffusionTensor3D< float >, image );
93 else cpPlugins_VTKImage_Demangle_AllDims( I, itk::DiffusionTensor3D< double >, image );
94 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Vector, float, image );
95 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Vector, double, image );
96 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::CovariantVector, float, image );
97 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::CovariantVector, double, image );
98 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Point, float, image );
99 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::Point, double, image );
100 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::SymmetricSecondRankTensor, float, image );
101 else cpPlugins_VTKImageArray_Demangle_AllDims( I, itk::SymmetricSecondRankTensor, double, image );
104 this->m_VTKObject = NULL;
105 this->m_ITKvVTKConnection = NULL;
110 this->m_ITKObject = object;
114 // -------------------------------------------------------------------------
115 template< class P, unsigned int D >
116 void cpPlugins::Interface::Image::
117 _ITK_2_VTK( itk::Object* object )
119 typedef itk::Image< P, D > _I;
120 typedef itk::ImageToVTKImageFilter< _I > _I2Vtk;
122 // Check (yes, again!!!) if input object has the desired type
123 _I* image = dynamic_cast< _I* >( object );
129 dynamic_cast< _I2Vtk* >( this->m_ITKvVTKConnection.GetPointer( ) );
132 typename _I2Vtk::Pointer nf = _I2Vtk::New( );
133 this->m_ITKvVTKConnection = nf;
134 f = nf.GetPointer( );
137 f->SetInput( image );
141 this->m_VTKObject = f->GetOutput( );
144 #ifndef cpPlugins_Interface_EXPORTS
146 // =========================================================================
147 // ========== Declare import itk::Image types ==========
148 // =========================================================================
150 // -------------------------------------------------------------------------
151 #define cpPlugins_ITKImage_Import( T, D ) \
152 cpPlugins_TEMPLATE_IMPORT( \
153 2(class cpPlugins_Interface_EXPORT itk::Image< T, D >) \
156 // -------------------------------------------------------------------------
157 #define cpPlugins_ITKArrayImage_Import( A, T, DA, DI ) \
158 cpPlugins_TEMPLATE_IMPORT( \
159 3(class cpPlugins_Interface_EXPORT itk::Image< A< T, DA >, DI >) \
162 // -------------------------------------------------------------------------
163 #define cpPlugins_ITKImage_AllDims_Import( T ) \
164 cpPlugins_ITKImage_Import( T, 2 ); \
165 cpPlugins_ITKImage_Import( T, 3 ); \
166 cpPlugins_ITKImage_Import( T, 4 )
168 // -------------------------------------------------------------------------
169 #define cpPlugins_ITKArrayImage_AllDims_Import( A, T ) \
170 cpPlugins_ITKArrayImage_Import( A, T, 2, 2 ); \
171 cpPlugins_ITKArrayImage_Import( A, T, 3, 3 ); \
172 cpPlugins_ITKArrayImage_Import( A, T, 4, 4 )
174 // -------------------------------------------------------------------------
175 #define cpPlugins_VTKImage_Import( T, D ) \
176 cpPlugins_TEMPLATE_IMPORT( \
178 class cpPlugins_Interface_EXPORT \
179 itk::ImageToVTKImageFilter< itk::Image< T, D > > \
183 // -------------------------------------------------------------------------
184 #define cpPlugins_VTKArrayImage_Import( A, T, DA, DI ) \
185 cpPlugins_TEMPLATE_IMPORT( \
187 cpPlugins_Interface_EXPORT \
188 itk::ImageToVTKImageFilter< itk::Image< A< T, DA >, DI > >) \
191 // -------------------------------------------------------------------------
192 #define cpPlugins_VTKImage_AllDims_Import( T ) \
193 cpPlugins_VTKImage_Import( T, 2 ); \
194 cpPlugins_VTKImage_Import( T, 3 )
196 // -------------------------------------------------------------------------
197 #define cpPlugins_VTKArrayImage_AllDims_Import( A, T ) \
198 cpPlugins_VTKArrayImage_Import( A, T, 2, 2 ); \
199 cpPlugins_VTKArrayImage_Import( A, T, 3, 3 )
201 // -------------------------------------------------------------------------
202 #define cpPlugins_Image_Import( T, D ) \
203 cpPlugins_ITKImage_Import( T, D ); \
204 cpPlugins_VTKImage_Import( T, D ) \
206 // -------------------------------------------------------------------------
207 #define cpPlugins_Image_AllDims_Import( T ) \
208 cpPlugins_ITKImage_AllDims_Import( T ); \
209 cpPlugins_VTKImage_AllDims_Import( T ) \
211 // -------------------------------------------------------------------------
212 #define cpPlugins_ArrayImage_AllDims_Import( A, T ) \
213 cpPlugins_ITKArrayImage_AllDims_Import( A, T ); \
214 cpPlugins_VTKArrayImage_AllDims_Import( A, T ) \
216 // -------------------------------------------------------------------------
217 // ITK-VTK base clases
218 // -------------------------------------------------------------------------
220 cpPlugins_Image_AllDims_Import( char );
221 cpPlugins_Image_AllDims_Import( short );
222 cpPlugins_Image_AllDims_Import( int );
223 cpPlugins_Image_AllDims_Import( long );
224 cpPlugins_Image_AllDims_Import( unsigned char );
225 cpPlugins_Image_AllDims_Import( unsigned short );
226 cpPlugins_Image_AllDims_Import( unsigned int );
227 cpPlugins_Image_AllDims_Import( unsigned long );
228 cpPlugins_Image_AllDims_Import( float );
229 cpPlugins_Image_AllDims_Import( double );
231 cpPlugins_Image_AllDims_Import( itk::RGBPixel< char > );
232 cpPlugins_Image_AllDims_Import( itk::RGBPixel< short > );
233 cpPlugins_Image_AllDims_Import( itk::RGBPixel< int > );
234 cpPlugins_Image_AllDims_Import( itk::RGBPixel< long > );
235 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned char > );
236 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned short > );
237 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned int > );
238 cpPlugins_Image_AllDims_Import( itk::RGBPixel< unsigned long > );
239 cpPlugins_Image_AllDims_Import( itk::RGBPixel< float > );
240 cpPlugins_Image_AllDims_Import( itk::RGBPixel< double > );
242 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< char > );
243 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< short > );
244 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< int > );
245 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< long > );
246 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned char > );
247 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned short > );
248 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned int > );
249 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< unsigned long > );
250 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< float > );
251 cpPlugins_Image_AllDims_Import( itk::RGBAPixel< double > );
253 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< float > );
254 cpPlugins_Image_AllDims_Import( itk::DiffusionTensor3D< double > );
256 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, float );
257 cpPlugins_ArrayImage_AllDims_Import( itk::Vector, double );
259 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, float );
260 cpPlugins_ArrayImage_AllDims_Import( itk::CovariantVector, double );
262 cpPlugins_ArrayImage_AllDims_Import( itk::Point, float );
263 cpPlugins_ArrayImage_AllDims_Import( itk::Point, double );
265 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, float );
266 cpPlugins_ArrayImage_AllDims_Import( itk::SymmetricSecondRankTensor, double );
268 // -------------------------------------------------------------------------
269 // ITK-only base clases
270 // -------------------------------------------------------------------------
272 cpPlugins_ITKImage_AllDims_Import( std::complex< float > );
273 cpPlugins_ITKImage_AllDims_Import( std::complex< double > );
275 cpPlugins_ITKImage_Import( itk::Offset< 2 >, 2 );
276 cpPlugins_ITKImage_Import( itk::Offset< 3 >, 3 );
277 cpPlugins_ITKImage_Import( itk::Offset< 4 >, 4 );
279 // =========================================================================
280 // ========== Declare import itk::VectorImage types ==========
281 // =========================================================================
283 // -------------------------------------------------------------------------
284 #define cpPlugins_VectorImage_Import( T, D ) \
285 cpPlugins_TEMPLATE_IMPORT( \
286 2(class cpPlugins_Interface_EXPORT itk::VectorImage< T, D >) \
289 // -------------------------------------------------------------------------
290 #define cpPlugins_ArrayVectorImage_Import( A, T, DA, DI ) \
291 cpPlugins_TEMPLATE_IMPORT( \
293 cpPlugins_Interface_EXPORT \
294 itk::VectorImage< A< T, DA >, DI >) \
297 // -------------------------------------------------------------------------
298 #define cpPlugins_VectorImage_AllDims_Import( T ) \
299 cpPlugins_VectorImage_Import( T, 2 ); \
300 cpPlugins_VectorImage_Import( T, 3 ); \
301 cpPlugins_VectorImage_Import( T, 4 )
303 // -------------------------------------------------------------------------
304 #define cpPlugins_ArrayVectorImage_AllDims_Import( A, T ) \
305 cpPlugins_ArrayVectorImage_Import( A, T, 2, 2 ); \
306 cpPlugins_ArrayVectorImage_Import( A, T, 3, 3 ); \
307 cpPlugins_ArrayVectorImage_Import( A, T, 4, 4 )
309 // -------------------------------------------------------------------------
310 // ITK-VTK base clases
311 // -------------------------------------------------------------------------
313 cpPlugins_VectorImage_AllDims_Import( char );
314 cpPlugins_VectorImage_AllDims_Import( short );
315 cpPlugins_VectorImage_AllDims_Import( int );
316 cpPlugins_VectorImage_AllDims_Import( long );
317 cpPlugins_VectorImage_AllDims_Import( unsigned char );
318 cpPlugins_VectorImage_AllDims_Import( unsigned short );
319 cpPlugins_VectorImage_AllDims_Import( unsigned int );
320 cpPlugins_VectorImage_AllDims_Import( unsigned long );
321 cpPlugins_VectorImage_AllDims_Import( float );
322 cpPlugins_VectorImage_AllDims_Import( double );
324 cpPlugins_VectorImage_AllDims_Import( std::complex< float > );
325 cpPlugins_VectorImage_AllDims_Import( std::complex< double > );
327 cpPlugins_VectorImage_Import( itk::Offset< 2 >, 2 );
328 cpPlugins_VectorImage_Import( itk::Offset< 3 >, 3 );
329 cpPlugins_VectorImage_Import( itk::Offset< 4 >, 4 );
331 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< char > );
332 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< short > );
333 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< int > );
334 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< long > );
335 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned char > );
336 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned short > );
337 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned int > );
338 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< unsigned long > );
339 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< float > );
340 cpPlugins_VectorImage_AllDims_Import( itk::RGBPixel< double > );
342 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< char > );
343 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< short > );
344 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< int > );
345 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< long > );
346 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned char > );
347 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned short > );
348 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned int > );
349 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< unsigned long > );
350 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< float > );
351 cpPlugins_VectorImage_AllDims_Import( itk::RGBAPixel< double > );
353 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< float > );
354 cpPlugins_VectorImage_AllDims_Import( itk::DiffusionTensor3D< double > );
356 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, float );
357 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Vector, double );
359 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, float );
360 cpPlugins_ArrayVectorImage_AllDims_Import( itk::CovariantVector, double );
362 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, float );
363 cpPlugins_ArrayVectorImage_AllDims_Import( itk::Point, double );
365 cpPlugins_ArrayVectorImage_AllDims_Import(
366 itk::SymmetricSecondRankTensor, float
368 cpPlugins_ArrayVectorImage_AllDims_Import(
369 itk::SymmetricSecondRankTensor, double
372 #endif // cpPlugins_Interface_EXPORTS
374 #endif // __CPPLUGINS__INTERFACE__IMAGE__HXX__