]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Image.hxx
1378dc8cba97880314e5f3854cbf6157c1be4631
[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 cpPlugin_Image_Demangle_Dim( FUNC, INPUT, D )   \
108   this->FUNC( INPUT->GetITK< itk::ImageBase< D > >( ) )
109
110 #define cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, PIXEL, D )      \
111   this->FUNC( dynamic_cast< itk::Image< PIXEL, D >* >( INPUT ) )
112
113 #define cpPlugin_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, PIXEL, D ) \
114   this->FUNC( dynamic_cast< itk::Image< VECTOR< PIXEL, D >, D >* >( INPUT ) )
115
116 #define cpPlugin_Image_Demangle_Pixel_AllScalars( r, FUNC, INPUT, D )   \
117   r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, char, D );        \
118   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, short, D ); \
119   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, int, D ); \
120   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, long, D ); \
121   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, float, D ); \
122   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, double, D ); \
123   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned char, D ); \
124   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned short, D ); \
125   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned int, D ); \
126   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, unsigned long, D )
127
128 #define cpPlugin_Image_Demangle_Pixel_AllColor( r, FUNC, INPUT, D )     \
129   r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< char >, D ); \
130   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< short >, D ); \
131   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< int >, D ); \
132   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< long >, D ); \
133   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< float >, D ); \
134   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< double >, D ); \
135   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned char >, D ); \
136   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned short >, D ); \
137   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned int >, D ); \
138   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBPixel< unsigned long >, D ); \
139   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< char >, D ); \
140   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< short >, D ); \
141   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< int >, D ); \
142   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< long >, D ); \
143   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< float >, D ); \
144   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< double >, D ); \
145   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned char >, D ); \
146   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned short >, D ); \
147   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned int >, D ); \
148   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( FUNC, INPUT, itk::RGBAPixel< unsigned long >, D )
149
150 #define cpPlugin_Image_Demangle_VectorPixel_AllFloats( r, FUNC, INPUT, VECTOR, D ) \
151   r = cpPlugin_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, float, D ); \
152   if( r != "" ) r = cpPlugin_Image_Demangle_VectorPixel_Dim( FUNC, INPUT, VECTOR, double, D )
153
154 #endif // __CPPLUGINS__IMAGE__HXX__
155
156 // eof - $RCSfile$