]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/BaseProcessObjects.h
d76d8b6a548f857af187d4bce61a8f993c84feed
[cpPlugins.git] / lib / cpPlugins / Interface / BaseProcessObjects.h
1 #ifndef __CPPLUGINS__INTERFACE__BASEPROCESSOBJECTS__H__
2 #define __CPPLUGINS__INTERFACE__BASEPROCESSOBJECTS__H__
3
4 #include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
5 #include <cpPlugins/Interface/ProcessObject.h>
6
7 // -------------------------------------------------------------------------
8 #define cpPlugins_Define_ProcessObject( O, S )                  \
9   class cpPlugins_Interface_EXPORT O                            \
10     : public S                                                  \
11   {                                                             \
12   public:                                                       \
13     typedef O                               Self;               \
14     typedef S                               Superclass;         \
15     typedef itk::SmartPointer< Self >       Pointer;            \
16     typedef itk::SmartPointer< const Self > ConstPointer;       \
17   public:                                                       \
18     itkTypeMacro( O, S );                                       \
19   protected:                                                    \
20     O( );                                                       \
21     virtual ~O( );                                              \
22   private:                                                      \
23     O( const Self& );                                           \
24     Self& operator=( const Self& );                             \
25   }
26
27 // -------------------------------------------------------------------------
28 #define cpPlugins_Code_ProcessObject( O )               \
29   cpPlugins::Interface::O::O( ) : Superclass( )         \
30   {                                                     \
31     this->m_ClassName = "cpPlugins::Interface::#O";     \
32     this->m_ClassCategory = "#O";                       \
33   }                                                     \
34   cpPlugins::Interface::O::~O( ) { }
35
36 // -------------------------------------------------------------------------
37 #define cpPlugins_Image_Demangle( T, D, I, O, R, F )            \
38   if( ( O = I->GetITK< itk::Image< T, D > >( ) ) != NULL )      \
39     R = this->F< itk::Image< T, D > >( O )
40
41 // -------------------------------------------------------------------------
42 #define cpPlugins_ArrayImage_Demangle( A, T, DI, DA, I, O, R, F )       \
43   if( ( O = I->GetITK< itk::Image< A< T, DA >, DI > >( ) ) != NULL )    \
44     R = this->F< itk::Image< A< T, DA >, DI > >( O )
45
46 // -------------------------------------------------------------------------
47 #define cpPlugins_VectorImage_Demangle( T, D, I, O, R, F )              \
48   if( ( O = I->GetITK< itk::VectorImage< T, D > >( ) ) != NULL )        \
49     R = this->F< itk::VectorImage< T, D > >( O )
50
51 // -------------------------------------------------------------------------
52 #define cpPlugins_ArrayVectorImage_Demangle( A, T, DI, DA, I, O, R, F ) \
53   if( ( O = I->GetITK< itk::VectorImage< A< T, DA >, DI > >( ) ) != NULL ) \
54     R = this->F< itk::VectorImage< A< T, DA >, DI > >( O )
55
56 // -------------------------------------------------------------------------
57 #define cpPlugins_Image_Demangle_AllScalarTypes( D, I, O, R, F )        \
58   cpPlugins_Image_Demangle( char, D, I, O, R, F );                      \
59   else cpPlugins_Image_Demangle( short, D, I, O, R, F );                \
60   else cpPlugins_Image_Demangle( int, D, I, O, R, F );                  \
61   else cpPlugins_Image_Demangle( long, D, I, O, R, F );                 \
62   else cpPlugins_Image_Demangle( unsigned char, D, I, O, R, F );        \
63   else cpPlugins_Image_Demangle( unsigned short, D, I, O, R, F );       \
64   else cpPlugins_Image_Demangle( unsigned int, D, I, O, R, F );         \
65   else cpPlugins_Image_Demangle( unsigned long, D, I, O, R, F );        \
66   else cpPlugins_Image_Demangle( float, D, I, O, R, F );                \
67   else cpPlugins_Image_Demangle( double, D, I, O, R, F )
68
69 // -------------------------------------------------------------------------
70 #define cpPlugins_Image_Demangle_AllComplexTypes( D, I, O, R, F )       \
71   cpPlugins_Image_Demangle( std::complex< float >, D, I, O, R, F );     \
72   else cpPlugins_Image_Demangle( std::complex< double >, D, I, O, R, F )
73
74 // -------------------------------------------------------------------------
75 #define cpPlugins_Image_Demangle_AllRGBTypes( D, I, O, R, F )           \
76   cpPlugins_Image_Demangle( itk::RGBPixel< char >, D, I, O, R, F );     \
77   else cpPlugins_Image_Demangle( itk::RGBPixel< short >, D, I, O, R, F ); \
78   else cpPlugins_Image_Demangle( itk::RGBPixel< int >, D, I, O, R, F ); \
79   else cpPlugins_Image_Demangle( itk::RGBPixel< long >, D, I, O, R, F ); \
80   else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned char >, D, I, O, R, F ); \
81   else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned short >, D, I, O, R, F ); \
82   else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned int >, D, I, O, R, F ); \
83   else cpPlugins_Image_Demangle( itk::RGBPixel< unsigned long >, D, I, O, R, F ); \
84   else cpPlugins_Image_Demangle( itk::RGBPixel< float >, D, I, O, R, F ); \
85   else cpPlugins_Image_Demangle( itk::RGBPixel< double >, D, I, O, R, F )
86
87 // -------------------------------------------------------------------------
88 #define cpPlugins_Image_Demangle_AllRGBATypes( D, I, O, R, F )           \
89   cpPlugins_Image_Demangle( itk::RGBAPixel< char >, D, I, O, R, F );     \
90   else cpPlugins_Image_Demangle( itk::RGBAPixel< short >, D, I, O, R, F ); \
91   else cpPlugins_Image_Demangle( itk::RGBAPixel< int >, D, I, O, R, F ); \
92   else cpPlugins_Image_Demangle( itk::RGBAPixel< long >, D, I, O, R, F ); \
93   else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned char >, D, I, O, R, F ); \
94   else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned short >, D, I, O, R, F ); \
95   else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned int >, D, I, O, R, F ); \
96   else cpPlugins_Image_Demangle( itk::RGBAPixel< unsigned long >, D, I, O, R, F ); \
97   else cpPlugins_Image_Demangle( itk::RGBAPixel< float >, D, I, O, R, F ); \
98   else cpPlugins_Image_Demangle( itk::RGBAPixel< double >, D, I, O, R, F )
99
100 // -------------------------------------------------------------------------
101 #define cpPlugins_Image_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ) \
102   cpPlugins_Image_Demangle( itk::DiffusionTensor3D< float >, D, I, O, R, F ); \
103   else cpPlugins_Image_Demangle( itk::DiffusionTensor3D< double >, D, I, O, R, F )
104
105 // -------------------------------------------------------------------------
106 #define cpPlugins_ArrayImage_Demangle_AllVectorTypes( DI, DA, I, O, R, F ) \
107   cpPlugins_ArrayImage_Demangle( itk::Vector, float, DI, DA, I, O, R, F ); \
108   else cpPlugins_ArrayImage_Demangle( itk::Vector, double, DI, DA, I, O, R, F )
109
110 // -------------------------------------------------------------------------
111 #define cpPlugins_ArrayImage_Demangle_AllCovariantVectorTypes( DI, DA, I, O, R, F ) \
112   cpPlugins_ArrayImage_Demangle( itk::CovariantVector, float, DI, DA, I, O, R, F ); \
113   else cpPlugins_ArrayImage_Demangle( itk::CovariantVector, double, DI, DA, I, O, R, F )
114
115 // -------------------------------------------------------------------------
116 #define cpPlugins_ArrayImage_Demangle_AllPointTypes( DI, DA, I, O, R, F ) \
117   cpPlugins_ArrayImage_Demangle( itk::Point, float, DI, DA, I, O, R, F ); \
118   else cpPlugins_ArrayImage_Demangle( itk::Point, double, DI, DA, I, O, R, F )
119
120 // -------------------------------------------------------------------------
121 #define cpPlugins_ArrayImage_Demangle_AllSymmetricSecondRankTensorTypes( DI, DA, I, O, R, F ) \
122   cpPlugins_ArrayImage_Demangle( itk::SymmetricSecondRankTensor, float, DI, DA, I, O, R, F ); \
123   else cpPlugins_ArrayImage_Demangle( itk::SymmetricSecondRankTensor, double, DI, DA, I, O, R, F )
124
125 // -------------------------------------------------------------------------
126 #define cpPlugins_Image_Demangle_AllTypes( D, I, O, R, F )              \
127   cpPlugins_Image_Demangle_AllScalarTypes( D, I, O, R, F );             \
128   else cpPlugins_Image_Demangle_AllComplexTypes( D, I, O, R, F );       \
129   else cpPlugins_Image_Demangle_AllRGBTypes( D, I, O, R, F );           \
130   else cpPlugins_Image_Demangle_AllRGBATypes( D, I, O, R, F );          \
131   else cpPlugins_Image_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ); \
132   else cpPlugins_Image_Demangle( itk::Offset< D >, D, I, O, R, F );     \
133   else cpPlugins_ArrayImage_Demangle_AllVectorTypes( D, D, I, O, R, F ); \
134   else cpPlugins_ArrayImage_Demangle_AllCovariantVectorTypes( D, D, I, O, R, F ); \
135   else cpPlugins_ArrayImage_Demangle_AllPointTypes( D, D, I, O, R, F ); \
136   else cpPlugins_ArrayImage_Demangle_AllSymmetricSecondRankTensorTypes( D, D, I, O, R, F )
137
138 // -------------------------------------------------------------------------
139 #define cpPlugins_VectorImage_Demangle_AllScalarTypes( D, I, O, R, F )  \
140   cpPlugins_VectorImage_Demangle( char, D, I, O, R, F );                \
141   else cpPlugins_VectorImage_Demangle( short, D, I, O, R, F );          \
142   else cpPlugins_VectorImage_Demangle( int, D, I, O, R, F );            \
143   else cpPlugins_VectorImage_Demangle( long, D, I, O, R, F );           \
144   else cpPlugins_VectorImage_Demangle( unsigned char, D, I, O, R, F );  \
145   else cpPlugins_VectorImage_Demangle( unsigned short, D, I, O, R, F ); \
146   else cpPlugins_VectorImage_Demangle( unsigned int, D, I, O, R, F );   \
147   else cpPlugins_VectorImage_Demangle( unsigned long, D, I, O, R, F );  \
148   else cpPlugins_VectorImage_Demangle( float, D, I, O, R, F );          \
149   else cpPlugins_VectorImage_Demangle( double, D, I, O, R, F )
150
151 // -------------------------------------------------------------------------
152 #define cpPlugins_VectorImage_Demangle_AllComplexTypes( D, I, O, R, F ) \
153   cpPlugins_VectorImage_Demangle( std::complex< float >, D, I, O, R, F ); \
154   else cpPlugins_VectorImage_Demangle( std::complex< double >, D, I, O, R, F )
155
156 // -------------------------------------------------------------------------
157 #define cpPlugins_VectorImage_Demangle_AllRGBTypes( D, I, O, R, F )     \
158   cpPlugins_VectorImage_Demangle( itk::RGBPixel< char >, D, I, O, R, F ); \
159   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< short >, D, I, O, R, F ); \
160   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< int >, D, I, O, R, F ); \
161   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< long >, D, I, O, R, F ); \
162   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned char >, D, I, O, R, F ); \
163   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned short >, D, I, O, R, F ); \
164   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned int >, D, I, O, R, F ); \
165   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< unsigned long >, D, I, O, R, F ); \
166   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< float >, D, I, O, R, F ); \
167   else cpPlugins_VectorImage_Demangle( itk::RGBPixel< double >, D, I, O, R, F )
168
169 // -------------------------------------------------------------------------
170 #define cpPlugins_VectorImage_Demangle_AllRGBATypes( D, I, O, R, F )    \
171   cpPlugins_VectorImage_Demangle( itk::RGBAPixel< char >, D, I, O, R, F ); \
172   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< short >, D, I, O, R, F ); \
173   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< int >, D, I, O, R, F ); \
174   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< long >, D, I, O, R, F ); \
175   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned char >, D, I, O, R, F ); \
176   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned short >, D, I, O, R, F ); \
177   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned int >, D, I, O, R, F ); \
178   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< unsigned long >, D, I, O, R, F ); \
179   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< float >, D, I, O, R, F ); \
180   else cpPlugins_VectorImage_Demangle( itk::RGBAPixel< double >, D, I, O, R, F )
181
182 // -------------------------------------------------------------------------
183 #define cpPlugins_VectorImage_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ) \
184   cpPlugins_VectorImage_Demangle( itk::DiffusionTensor3D< float >, D, I, O, R, F ); \
185   else cpPlugins_VectorImage_Demangle( itk::DiffusionTensor3D< double >, D, I, O, R, F )
186
187 // -------------------------------------------------------------------------
188 #define cpPlugins_ArrayVectorImage_Demangle_AllVectorTypes( DI, DA, I, O, R, F ) \
189   cpPlugins_ArrayVectorImage_Demangle( itk::Vector, float, DI, DA, I, O, R, F ); \
190   else cpPlugins_ArrayVectorImage_Demangle( itk::Vector, double, DI, DA, I, O, R, F )
191
192 // -------------------------------------------------------------------------
193 #define cpPlugins_ArrayVectorImage_Demangle_AllCovariantVectorTypes( DI, DA, I, O, R, F ) \
194   cpPlugins_ArrayVectorImage_Demangle( itk::CovariantVector, float, DI, DA, I, O, R, F ); \
195   else cpPlugins_ArrayVectorImage_Demangle( itk::CovariantVector, double, DI, DA, I, O, R, F )
196
197 // -------------------------------------------------------------------------
198 #define cpPlugins_ArrayVectorImage_Demangle_AllPointTypes( DI, DA, I, O, R, F ) \
199   cpPlugins_ArrayVectorImage_Demangle( itk::Point, float, DI, DA, I, O, R, F ); \
200   else cpPlugins_ArrayVectorImage_Demangle( itk::Point, double, DI, DA, I, O, R, F )
201
202 // -------------------------------------------------------------------------
203 #define cpPlugins_ArrayVectorImage_Demangle_AllSymmetricSecondRankTensorTypes( DI, DA, I, O, R, F ) \
204   cpPlugins_ArrayVectorImage_Demangle( itk::SymmetricSecondRankTensor, float, DI, DA, I, O, R, F ); \
205   else cpPlugins_ArrayVectorImage_Demangle( itk::SymmetricSecondRankTensor, double, DI, DA, I, O, R, F )
206
207 // -------------------------------------------------------------------------
208 #define cpPlugins_VectorImage_Demangle_AllTypes( D, I, O, R, F )        \
209   cpPlugins_VectorImage_Demangle_AllScalarTypes( D, I, O, R, F );       \
210   else cpPlugins_VectorImage_Demangle_AllComplexTypes( D, I, O, R, F ); \
211   else cpPlugins_VectorImage_Demangle_AllRGBTypes( D, I, O, R, F );     \
212   else cpPlugins_VectorImage_Demangle_AllRGBATypes( D, I, O, R, F );    \
213   else cpPlugins_VectorImage_Demangle_AllDiffusionTensor3DTypes( D, I, O, R, F ); \
214   else cpPlugins_VectorImage_Demangle( itk::Offset< D >, D, I, O, R, F ); \
215   else cpPlugins_ArrayVectorImage_Demangle_AllVectorTypes( D, D, I, O, R, F ); \
216   else cpPlugins_ArrayVectorImage_Demangle_AllCovariantVectorTypes( D, D, I, O, R, F ); \
217   else cpPlugins_ArrayVectorImage_Demangle_AllPointTypes( D, D, I, O, R, F ); \
218   else cpPlugins_ArrayVectorImage_Demangle_AllSymmetricSecondRankTensorTypes( D, D, I, O, R, F )
219
220 namespace cpPlugins
221 {
222   namespace Interface
223   {
224     cpPlugins_Define_ProcessObject( SourceObject, ProcessObject );
225     cpPlugins_Define_ProcessObject( SinkObject, ProcessObject );
226     cpPlugins_Define_ProcessObject( FilterObject, ProcessObject );
227     cpPlugins_Define_ProcessObject( ImageSource, SourceObject );
228     cpPlugins_Define_ProcessObject( MeshSource, SourceObject );
229     cpPlugins_Define_ProcessObject( ImageSink, SinkObject );
230     cpPlugins_Define_ProcessObject( MeshSink, SinkObject );
231     cpPlugins_Define_ProcessObject( ImageToImageFilter, FilterObject );
232     cpPlugins_Define_ProcessObject( ImageToMeshFilter, FilterObject );
233     cpPlugins_Define_ProcessObject( MeshToImageFilter, FilterObject );
234     cpPlugins_Define_ProcessObject( MeshToMeshFilter, FilterObject );
235
236   } // ecapseman
237
238 } // ecapseman
239
240 #endif // __CPPLUGINS__INTERFACE__BASEPROCESSOBJECTS__H__
241
242 // eof - $RCSfile$