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