]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Image.hxx
...
[cpPlugins.git] / lib / cpPlugins / Image.hxx
1 #ifndef __CPPLUGINS__IMAGE__HXX__
2 #define __CPPLUGINS__IMAGE__HXX__
3
4 #include <cpPlugins_Instances/ImageITK2VTK.h>
5
6 // -------------------------------------------------------------------------
7 template< unsigned int D >
8 bool cpPlugins::Image::
9 _ITK_2_VTK_0( itk::LightObject* o )
10 {
11   bool s = false;
12   if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
13   {
14     s |= this->_ITK_2_VTK_1< char, D >( o );
15     s |= this->_ITK_2_VTK_1< short, D >( o );
16     s |= this->_ITK_2_VTK_1< int, D >( o );
17     s |= this->_ITK_2_VTK_1< long, D >( o );
18     s |= this->_ITK_2_VTK_1< float, D >( o );
19     s |= this->_ITK_2_VTK_1< double, D >( o );
20     s |= this->_ITK_2_VTK_1< unsigned char, D >( o );
21     s |= this->_ITK_2_VTK_1< unsigned short, D >( o );
22     s |= this->_ITK_2_VTK_1< unsigned int, D >( o );
23     s |= this->_ITK_2_VTK_1< unsigned long, D >( o );
24     s |= this->_ITK_2_VTK_1< itk::RGBPixel< char >, D >( o );
25     s |= this->_ITK_2_VTK_1< itk::RGBPixel< short >, D >( o );
26     s |= this->_ITK_2_VTK_1< itk::RGBPixel< int >, D >( o );
27     s |= this->_ITK_2_VTK_1< itk::RGBPixel< long >, D >( o );
28     s |= this->_ITK_2_VTK_1< itk::RGBPixel< float >, D >( o );
29     s |= this->_ITK_2_VTK_1< itk::RGBPixel< double >, D >( o );
30     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned char >, D >( o );
31     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned short >, D >( o );
32     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned int >, D >( o );
33     s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned long >, D >( o );
34     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< char >, D >( o );
35     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< short >, D >( o );
36     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< int >, D >( o );
37     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< long >, D >( o );
38     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< float >, D >( o );
39     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< double >, D >( o );
40     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned char >, D >( o );
41     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned short >, D >( o );
42     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned int >, D >( o );
43     s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned long >, D >( o );
44     /* TODO
45        s |= this->_ITK_2_VTK_1< itk::DiffusionTensor3D< float >, D >( o );
46        s |= this->_ITK_2_VTK_1< itk::DiffusionTensor3D< double >, D >( o );
47        s |= this->_ITK_2_VTK_1< itk::Vector< float, D >, D >( o );
48        s |= this->_ITK_2_VTK_1< itk::Vector< double, D >, D >( o );
49        s |= this->_ITK_2_VTK_1< itk::CovariantVector< float, D >, D >( o );
50        s |= this->_ITK_2_VTK_1< itk::CovariantVector< double, D >, D >( o );
51        s |= this->_ITK_2_VTK_1< itk::Point< float, D >, D >( o );
52        s |= this->_ITK_2_VTK_1< itk::Point< double, D >, D >( o );
53        s |= this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< float, D >, D >( o );
54        s |= this->_ITK_2_VTK_1< itk::SymmetricSecondRankTensor< double, D >, D >( o );
55     */
56
57   } // fi
58   return( s );
59 }
60
61 // -------------------------------------------------------------------------
62 template< class P, unsigned int D >
63 bool cpPlugins::Image::
64 _ITK_2_VTK_1( itk::LightObject* o )
65 {
66   if( dynamic_cast< itk::Image< P, D >* >( o ) != NULL )
67     return( this->_ITK_2_VTK_2< itk::Image< P, D > >( o ) );
68   else
69     return( false );
70 }
71
72 // -------------------------------------------------------------------------
73 template< class T >
74 bool cpPlugins::Image::
75 _ITK_2_VTK_2( itk::LightObject* o )
76 {
77   typedef itk::ImageToVTKImageFilter< T > _I2V;
78
79   T* image = dynamic_cast< T* >( o );
80   if( image != NULL )
81   {
82     _I2V* f = dynamic_cast< _I2V* >( this->m_ITKvVTK.GetPointer( ) );
83     if( f == NULL )
84     {
85       typename _I2V::Pointer nf = _I2V::New( );
86       this->m_ITKvVTK = nf;
87       f = nf.GetPointer( );
88
89     } // fi
90     f->SetInput( image );
91     f->Update( );
92
93     // Keep object track
94     this->m_ITKObject = o;
95     this->m_VTKObject = f->GetOutput( );
96     return( true );
97   }
98   else
99     return( false );
100 }
101
102 /*
103  * =========================================================================
104  * Demangle macros
105  * =========================================================================
106  */
107 #define cpPlugins_Image_Demangle_Dim( F, I, D )                 \
108   if( dynamic_cast< itk::ImageBase< D >* >( I ) != NULL )       \
109     this->F( dynamic_cast< itk::ImageBase< D >* >( I ) )
110
111 #define cpPlugins_Image_Demangle_Pixel_Dim( F, I, P, D )                \
112   if( dynamic_cast< itk::Image< P, D >* >( I ) != NULL )                \
113     this->F( dynamic_cast< itk::Image< P, D >* >( I ) )
114
115 #define cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, P, D )        \
116   if( dynamic_cast< itk::Image< itk::C##Pixel< P >, D >* >( I ) != NULL ) \
117     this->F( dynamic_cast< itk::Image< itk::C##Pixel< P >, D >* >( I ) )
118
119 #define cpPlugins_Image_Demangle_VectorPixel_Dim( F, I, V, P, D )       \
120   if( dynamic_cast< itk::Image< itk::V< P, D >, D >* >( I ) != NULL )   \
121     this->F( dynamic_cast< itk::Image< itk::V< P, D >, D >* >( I ) )
122
123 #define cpPlugins_Image_Demangle_Pixel_AllInts( F, I, D )               \
124   cpPlugins_Image_Demangle_Pixel_Dim     ( F, I, char, D );             \
125   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, short, D );            \
126   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, int, D );              \
127   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, long, D )
128
129 #define cpPlugins_Image_Demangle_Pixel_AllUInts( F, I, D )              \
130   cpPlugins_Image_Demangle_Pixel_Dim     ( F, I, unsigned char, D );    \
131   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned short, D );   \
132   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned int, D );     \
133   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned long, D )
134
135 #define cpPlugins_Image_Demangle_Pixel_AllFloats( F, I, D )             \
136   cpPlugins_Image_Demangle_Pixel_Dim     ( F, I, float, D );            \
137   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, double, D )
138
139 #define cpPlugins_Image_Demangle_Pixel_AllScalars( F, I, D )   \
140   cpPlugins_Image_Demangle_Pixel_AllInts       ( F, I, D );    \
141   else cpPlugins_Image_Demangle_Pixel_AllUInts ( F, I, D );    \
142   else cpPlugins_Image_Demangle_Pixel_AllFloats( F, I, D )
143
144 #define cpPlugins_Image_Demangle_ColorPixel_AllInts( F, I, C, D )       \
145   cpPlugins_Image_Demangle_ColorPixel_Dim     ( F, I, C, char, D );     \
146   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, short, D );    \
147   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, int, D );      \
148   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, long, D )
149
150 #define cpPlugins_Image_Demangle_ColorPixel_AllUInts( F, I, C, D )      \
151   cpPlugins_Image_Demangle_ColorPixel_Dim     ( F, I, C, unsigned char, D ); \
152   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned short, D ); \
153   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned int, D ); \
154   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned long, D )
155
156 #define cpPlugins_Image_Demangle_ColorPixel_AllFloats( F, I, C, D )     \
157   cpPlugins_Image_Demangle_ColorPixel_Dim     ( F, I, C, float, D );       \
158   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, double, D )
159
160 #define cpPlugins_Image_Demangle_ColorPixel_AllScalars( F, I, C, D )    \
161   cpPlugins_Image_Demangle_ColorPixel_AllInts       ( F, I, C, D );     \
162   else cpPlugins_Image_Demangle_ColorPixel_AllUInts ( F, I, C, D );     \
163   else cpPlugins_Image_Demangle_ColorPixel_AllFloats( F, I, C, D )
164
165 #define cpPlugins_Image_Demangle_VectorPixel_AllFloats( F, I, V, D )    \
166   cpPlugins_Image_Demangle_VectorPixel_Dim     ( F, I, V, float, D );   \
167   else cpPlugins_Image_Demangle_VectorPixel_Dim( F, I, V, double, D )
168
169 /* TODO
170    #define cpPlugins_Image_Demangle_Pixel_AllVector( r, FUNC, INPUT, D ) \
171    r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< char >, D ); \
172    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< short >, D ); \
173    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< int >, D ); \
174    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< long >, D ); \
175    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< float >, D ); \
176    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< double >, D ); \
177    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned char >, D ); \
178    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned short >, D ); \
179    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned int >, D ); \
180    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned long >, D ); \
181    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< char >, D ); \
182    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< short >, D ); \
183    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< int >, D ); \
184    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< long >, D ); \
185    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< float >, D ); \
186    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< double >, D ); \
187    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned char >, D ); \
188    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned short >, D ); \
189    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned int >, D ); \
190    if( r != "" ) r = cpPlugins_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned long >, D )
191    
192    #define cpPlugins_Image_Demangle_VectorPixel_AllFloats( r, FUNC, INPUT, VECTOR, D ) \
193    r = cpPlugins_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, float, D ); \
194    if( r != "" ) r = cpPlugins_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, double, D )
195 */
196 #endif // __CPPLUGINS__IMAGE__HXX__
197
198 // eof - $RCSfile$