]> 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_ScalarImages.h>
5 #include <cpPlugins_Instances_ColorImages.h>
6
7 // -------------------------------------------------------------------------
8 template< unsigned int D >
9 bool cpPlugins::Image::
10 _ITK_2_VTK_0_Scalar( itk::LightObject* o )
11 {
12   bool s = false;
13   if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
14   {
15     s          |= this->_ITK_2_VTK_1< char, D >( o );
16     if( !s ) s |= this->_ITK_2_VTK_1< short, D >( o );
17     if( !s ) s |= this->_ITK_2_VTK_1< int, D >( o );
18     if( !s ) s |= this->_ITK_2_VTK_1< long, D >( o );
19     if( !s ) s |= this->_ITK_2_VTK_1< float, D >( o );
20     if( !s ) s |= this->_ITK_2_VTK_1< double, D >( o );
21     if( !s ) s |= this->_ITK_2_VTK_1< unsigned char, D >( o );
22     if( !s ) s |= this->_ITK_2_VTK_1< unsigned short, D >( o );
23     if( !s ) s |= this->_ITK_2_VTK_1< unsigned int, D >( o );
24     if( !s ) s |= this->_ITK_2_VTK_1< unsigned long, D >( o );
25
26   } // fi
27   return( s );
28 }
29
30 // -------------------------------------------------------------------------
31 template< unsigned int D >
32 bool cpPlugins::Image::
33 _ITK_2_VTK_0_Color( itk::LightObject* o )
34 {
35   bool s = false;
36   if( dynamic_cast< itk::ImageBase< D >* >( o ) != NULL )
37   {
38     s          |= this->_ITK_2_VTK_1< itk::RGBPixel< char >, D >( o );
39     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< short >, D >( o );
40     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< int >, D >( o );
41     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< long >, D >( o );
42     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< float >, D >( o );
43     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< double >, D >( o );
44     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned char >, D >( o );
45     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned short >, D >( o );
46     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned int >, D >( o );
47     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBPixel< unsigned long >, D >( o );
48     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< char >, D >( o );
49     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< short >, D >( o );
50     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< int >, D >( o );
51     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< long >, D >( o );
52     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< float >, D >( o );
53     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< double >, D >( o );
54     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned char >, D >( o );
55     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned short >, D >( o );
56     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned int >, D >( o );
57     if( !s ) s |= this->_ITK_2_VTK_1< itk::RGBAPixel< unsigned long >, D >( o );
58
59   } // fi
60   return( s );
61 }
62
63 // -------------------------------------------------------------------------
64 template< class P, unsigned int D >
65 bool cpPlugins::Image::
66 _ITK_2_VTK_1( itk::LightObject* o )
67 {
68   if( dynamic_cast< itk::Image< P, D >* >( o ) != NULL )
69     return( this->_ITK_2_VTK_2< itk::Image< P, D > >( o ) );
70   else
71     return( false );
72 }
73
74 // -------------------------------------------------------------------------
75 template< class T >
76 bool cpPlugins::Image::
77 _ITK_2_VTK_2( itk::LightObject* o )
78 {
79   typedef itk::ImageToVTKImageFilter< T > _I2V;
80
81   T* image = dynamic_cast< T* >( o );
82   if( image != NULL )
83   {
84     _I2V* f = dynamic_cast< _I2V* >( this->m_ITKvVTK.GetPointer( ) );
85     if( f == NULL )
86     {
87       typename _I2V::Pointer nf = _I2V::New( );
88       this->m_ITKvVTK = nf;
89       f = nf.GetPointer( );
90
91     } // fi
92     f->SetInput( image );
93     f->Update( );
94
95     // Keep object track
96     this->m_ITKObject = o;
97     this->m_VTKObject = f->GetOutput( );
98     return( true );
99   }
100   else
101     return( false );
102 }
103
104 /*
105  * =========================================================================
106  * Demangle macros
107  * =========================================================================
108  */
109 #define cpPlugins_Image_Demangle_Dim( F, I, D )                 \
110   if( dynamic_cast< itk::ImageBase< D >* >( I ) != NULL )       \
111     this->F( dynamic_cast< itk::ImageBase< D >* >( I ) )
112
113 #define cpPlugins_Image_Demangle_Pixel_Dim( F, I, P, D )        \
114   if( dynamic_cast< itk::Image< P, D >* >( I ) != NULL )        \
115     this->F( dynamic_cast< itk::Image< P, D >* >( I ) )
116
117 #define cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, P, D )        \
118   if( dynamic_cast< itk::Image< itk::C##Pixel< P >, D >* >( I ) != NULL ) \
119     this->F( dynamic_cast< itk::Image< itk::C##Pixel< P >, D >* >( I ) )
120
121 #define cpPlugins_Image_Demangle_Pixel_AllInts( F, I, D )       \
122   cpPlugins_Image_Demangle_Pixel_Dim     ( F, I, char, D );     \
123   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, short, D );    \
124   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, int, D );      \
125   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, long, D )
126
127 #define cpPlugins_Image_Demangle_Pixel_AllUInts( F, I, D )              \
128   cpPlugins_Image_Demangle_Pixel_Dim     ( F, I, unsigned char, D );    \
129   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned short, D );   \
130   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned int, D );     \
131   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, unsigned long, D )
132
133 #define cpPlugins_Image_Demangle_Pixel_AllFloats( F, I, D )     \
134   cpPlugins_Image_Demangle_Pixel_Dim     ( F, I, float, D );    \
135   else cpPlugins_Image_Demangle_Pixel_Dim( F, I, double, D )
136
137 #define cpPlugins_Image_Demangle_Pixel_AllScalars( F, I, D )    \
138   cpPlugins_Image_Demangle_Pixel_AllInts       ( F, I, D );     \
139   else cpPlugins_Image_Demangle_Pixel_AllUInts ( F, I, D );     \
140   else cpPlugins_Image_Demangle_Pixel_AllFloats( F, I, D )
141
142 #define cpPlugins_Image_Demangle_ColorPixel_AllInts( F, I, C, D )       \
143   cpPlugins_Image_Demangle_ColorPixel_Dim     ( F, I, C, char, D );     \
144   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, short, D );    \
145   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, int, D );      \
146   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, long, D )
147
148 #define cpPlugins_Image_Demangle_ColorPixel_AllUInts( F, I, C, D )      \
149   cpPlugins_Image_Demangle_ColorPixel_Dim     ( F, I, C, unsigned char, D ); \
150   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned short, D ); \
151   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned int, D ); \
152   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, unsigned long, D )
153
154 #define cpPlugins_Image_Demangle_ColorPixel_AllFloats( F, I, C, D )     \
155   cpPlugins_Image_Demangle_ColorPixel_Dim     ( F, I, C, float, D );    \
156   else cpPlugins_Image_Demangle_ColorPixel_Dim( F, I, C, double, D )
157
158 #define cpPlugins_Image_Demangle_ColorPixel_AllScalars( F, I, C, D )    \
159   cpPlugins_Image_Demangle_ColorPixel_AllInts       ( F, I, C, D );     \
160   else cpPlugins_Image_Demangle_ColorPixel_AllUInts ( F, I, C, D );     \
161   else cpPlugins_Image_Demangle_ColorPixel_AllFloats( F, I, C, D )
162
163 #endif // __CPPLUGINS__IMAGE__HXX__
164
165 // eof - $RCSfile$