1 #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
2 #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
4 #include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
5 #include <cpPlugins/Interface/Object.h>
6 #include <cpPlugins/Interface/DataObject.h>
7 #include <cpPlugins/Interface/Parameters.h>
9 #define ITK_MANUAL_INSTANTIATION
10 #include <itkProcessObject.h>
18 class cpPlugins_Interface_EXPORT ProcessObject
22 typedef ProcessObject Self;
23 typedef Object Superclass;
24 typedef itk::SmartPointer< Self > Pointer;
25 typedef itk::SmartPointer< const Self > ConstPointer;
28 itkTypeMacro( ProcessObject, Object );
31 virtual const Parameters& GetDefaultParameters( ) const;
32 virtual void SetParameters( const Parameters& params );
34 virtual unsigned int GetNumberOfInputs( ) const;
35 virtual unsigned int GetNumberOfOutputs( ) const;
37 virtual void SetNumberOfInputs( unsigned int n );
38 virtual void SetNumberOfOutputs( unsigned int n );
40 virtual void SetInput( unsigned int idx, DataObject* dobj );
41 virtual DataObject* GetOutput( unsigned int idx );
43 virtual std::string Update( );
44 virtual void DisconnectOutputs( );
48 virtual ~ProcessObject( );
51 inline void _MakeOutput( unsigned int idx );
53 virtual std::string _GenerateData( ) = 0;
56 // Purposely not implemented
57 ProcessObject( const Self& );
58 Self& operator=( const Self& );
61 itk::ProcessObject::Pointer m_RealProcessObject;
62 Parameters m_DefaultParameters;
63 Parameters m_Parameters;
65 std::vector< DataObject::Pointer > m_Inputs;
66 std::vector< DataObject::Pointer > m_Outputs;
73 #include <cpPlugins/Interface/ProcessObject.hxx>
76 // -------------------------------------------------------------------------
78 #define cpPlugins_Image_Demangle_Methods( c ) \
79 std::string _DemangleImageDimension( itk::DataObject* o ); \
80 std::string _DemangleImagePixel( unsigned int d, itk::DataObject* o );
82 // -------------------------------------------------------------------------
83 #define cpPlugins_Image_Demangle_Methods_Code( c, f ) \
84 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
87 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
89 cpPlugins_Image_Array_Demangle( \
90 itk::Vector, float, 1, 1, o, f, r \
92 else cpPlugins_Image_Array_Demangle( \
93 itk::Vector, double, 1, 1, o, f, r \
95 else cpPlugins_Image_Array_Demangle( \
96 itk::Point, float, 1, 1, o, f, r \
98 else cpPlugins_Image_Array_Demangle( \
99 itk::Point, double, 1, 1, o, f, r \
101 else cpPlugins_Image_Array_Demangle( \
102 itk::CovariantVector, float, 1, 1, o, f, r \
104 else cpPlugins_Image_Array_Demangle( \
105 itk::CovariantVector, double, 1, 1, o, f, r \
107 else cpPlugins_Image_Array_Demangle( \
108 itk::SymmetricSecondRankTensor, float, 1, 1, o, f, r \
110 else cpPlugins_Image_Array_Demangle( \
111 itk::SymmetricSecondRankTensor, double, 1, 1, o, f, r \
113 else r = this->_DemangleImagePixel( 1, o ); \
115 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
117 cpPlugins_Image_Demangle( \
118 itk::RGBPixel< char >, 2, o, f, r \
120 else cpPlugins_Image_Demangle( \
121 itk::RGBPixel< short >, 2, o, f, r \
123 else cpPlugins_Image_Demangle( \
124 itk::RGBPixel< unsigned char >, 2, o, f, r \
126 else cpPlugins_Image_Demangle( \
127 itk::RGBPixel< unsigned short >, 2, o, f, r \
129 else cpPlugins_Image_Demangle( \
130 itk::RGBAPixel< char >, 2, o, f, r \
132 else cpPlugins_Image_Demangle( \
133 itk::RGBAPixel< short >, 2, o, f, r \
135 else cpPlugins_Image_Demangle( \
136 itk::RGBAPixel< unsigned char >, 2, o, f, r \
138 else cpPlugins_Image_Demangle( \
139 itk::RGBAPixel< unsigned short >, 2, o, f, r \
141 else cpPlugins_Image_Array_Demangle( \
142 itk::Vector, float, 2, 2, o, f, r \
144 else cpPlugins_Image_Array_Demangle( \
145 itk::Vector, double, 2, 2, o, f, r \
147 else cpPlugins_Image_Array_Demangle( \
148 itk::Point, float, 2, 2, o, f, r \
150 else cpPlugins_Image_Array_Demangle( \
151 itk::Point, double, 2, 2, o, f, r \
153 else cpPlugins_Image_Array_Demangle( \
154 itk::CovariantVector, float, 2, 2, o, f, r \
156 else cpPlugins_Image_Array_Demangle( \
157 itk::CovariantVector, double, 2, 2, o, f, r \
159 else cpPlugins_Image_Array_Demangle( \
160 itk::SymmetricSecondRankTensor, float, 2, 2, o, f, r \
162 else cpPlugins_Image_Array_Demangle( \
163 itk::SymmetricSecondRankTensor, double, 2, 2, o, f, r \
165 else r = this->_DemangleImagePixel( 2, o ); \
167 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
169 cpPlugins_Image_Demangle( \
170 itk::RGBPixel< char >, 3, o, f, r \
172 else cpPlugins_Image_Demangle( \
173 itk::RGBPixel< short >, 3, o, f, r \
175 else cpPlugins_Image_Demangle( \
176 itk::RGBPixel< unsigned char >, 3, o, f, r \
178 else cpPlugins_Image_Demangle( \
179 itk::RGBPixel< unsigned short >, 3, o, f, r \
181 else cpPlugins_Image_Demangle( \
182 itk::RGBAPixel< char >, 3, o, f, r \
184 else cpPlugins_Image_Demangle( \
185 itk::RGBAPixel< short >, 3, o, f, r \
187 else cpPlugins_Image_Demangle( \
188 itk::RGBAPixel< unsigned char >, 3, o, f, r \
190 else cpPlugins_Image_Demangle( \
191 itk::RGBAPixel< unsigned short >, 3, o, f, r \
193 else cpPlugins_Image_Array_Demangle( \
194 itk::Vector, float, 3, 3, o, f, r \
196 else cpPlugins_Image_Array_Demangle( \
197 itk::Vector, double, 3, 3, o, f, r \
199 else cpPlugins_Image_Array_Demangle( \
200 itk::Point, float, 3, 3, o, f, r \
202 else cpPlugins_Image_Array_Demangle( \
203 itk::Point, double, 3, 3, o, f, r \
205 else cpPlugins_Image_Array_Demangle( \
206 itk::CovariantVector, float, 3, 3, o, f, r \
208 else cpPlugins_Image_Array_Demangle( \
209 itk::CovariantVector, double, 3, 3, o, f, r \
211 else cpPlugins_Image_Array_Demangle( \
212 itk::SymmetricSecondRankTensor, float, 3, 3, o, f, r \
214 else cpPlugins_Image_Array_Demangle( \
215 itk::SymmetricSecondRankTensor, double, 3, 3, o, f, r \
217 else cpPlugins_Image_Demangle( \
218 itk::DiffusionTensor3D< float >, 3, o, f, r \
220 else cpPlugins_Image_Demangle( \
221 itk::DiffusionTensor3D< double >, 3, o, f, r \
223 else r = this->_DemangleImagePixel( 3, o ); \
225 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
227 cpPlugins_Image_Demangle( \
228 itk::RGBPixel< char >, 4, o, f, r \
230 else cpPlugins_Image_Demangle( \
231 itk::RGBPixel< short >, 4, o, f, r \
233 else cpPlugins_Image_Demangle( \
234 itk::RGBPixel< unsigned char >, 4, o, f, r \
236 else cpPlugins_Image_Demangle( \
237 itk::RGBPixel< unsigned short >, 4, o, f, r \
239 else cpPlugins_Image_Demangle( \
240 itk::RGBAPixel< char >, 4, o, f, r \
242 else cpPlugins_Image_Demangle( \
243 itk::RGBAPixel< short >, 4, o, f, r \
245 else cpPlugins_Image_Demangle( \
246 itk::RGBAPixel< unsigned char >, 4, o, f, r \
248 else cpPlugins_Image_Demangle( \
249 itk::RGBAPixel< unsigned short >, 4, o, f, r \
251 else cpPlugins_Image_Array_Demangle( \
252 itk::Vector, float, 4, 4, o, f, r \
254 else cpPlugins_Image_Array_Demangle( \
255 itk::Vector, double, 4, 4, o, f, r \
257 else cpPlugins_Image_Array_Demangle( \
258 itk::Point, float, 4, 4, o, f, r \
260 else cpPlugins_Image_Array_Demangle( \
261 itk::Point, double, 4, 4, o, f, r \
263 else cpPlugins_Image_Array_Demangle( \
264 itk::CovariantVector, float, 4, 4, o, f, r \
266 else cpPlugins_Image_Array_Demangle( \
267 itk::CovariantVector, double, 4, 4, o, f, r \
269 else cpPlugins_Image_Array_Demangle( \
270 itk::SymmetricSecondRankTensor, float, 4, 4, o, f, r \
272 else cpPlugins_Image_Array_Demangle( \
273 itk::SymmetricSecondRankTensor, double, 4, 4, o, f, r \
275 else r = this->_DemangleImagePixel( 4, o ); \
279 std::string( #c ) + \
280 std::string( ": Image dimension not supported." ); \
283 std::string c::_DemangleImagePixel( \
284 unsigned int d, itk::DataObject* o \
287 std::string r = ""; \
290 cpPlugins_Image_Demangle( \
293 else cpPlugins_Image_Demangle( \
296 else cpPlugins_Image_Demangle( \
299 else cpPlugins_Image_Demangle( \
302 else cpPlugins_Image_Demangle( \
303 unsigned char, 1, o, f, r \
305 else cpPlugins_Image_Demangle( \
306 unsigned short, 1, o, f, r \
308 else cpPlugins_Image_Demangle( \
309 unsigned int, 1, o, f, r \
311 else cpPlugins_Image_Demangle( \
312 unsigned long, 1, o, f, r \
314 else cpPlugins_Image_Demangle( \
317 else cpPlugins_Image_Demangle( \
320 else cpPlugins_Image_Demangle( \
321 std::complex< float >, 1, o, f, r \
323 else cpPlugins_Image_Demangle( \
324 std::complex< double >, 1, o, f, r \
326 else cpPlugins_Image_Demangle( \
327 itk::Offset< 1 >, 1, o, f, r \
329 else r = std::string( #c ) + std::string( ": Image type." ); \
333 cpPlugins_Image_Demangle( \
336 else cpPlugins_Image_Demangle( \
339 else cpPlugins_Image_Demangle( \
342 else cpPlugins_Image_Demangle( \
345 else cpPlugins_Image_Demangle( \
346 unsigned char, 2, o, f, r \
348 else cpPlugins_Image_Demangle( \
349 unsigned short, 2, o, f, r \
351 else cpPlugins_Image_Demangle( \
352 unsigned int, 2, o, f, r \
354 else cpPlugins_Image_Demangle( \
355 unsigned long, 2, o, f, r \
357 else cpPlugins_Image_Demangle( \
360 else cpPlugins_Image_Demangle( \
363 else cpPlugins_Image_Demangle( \
364 std::complex< float >, 2, o, f, r \
366 else cpPlugins_Image_Demangle( \
367 std::complex< double >, 2, o, f, r \
369 else cpPlugins_Image_Demangle( \
370 itk::Offset< 2 >, 2, o, f, r \
372 else r = std::string( #c ) + std::string( ": Image type." ); \
376 cpPlugins_Image_Demangle( \
379 else cpPlugins_Image_Demangle( \
382 else cpPlugins_Image_Demangle( \
385 else cpPlugins_Image_Demangle( \
388 else cpPlugins_Image_Demangle( \
389 unsigned char, 3, o, f, r \
391 else cpPlugins_Image_Demangle( \
392 unsigned short, 3, o, f, r \
394 else cpPlugins_Image_Demangle( \
395 unsigned int, 3, o, f, r \
397 else cpPlugins_Image_Demangle( \
398 unsigned long, 3, o, f, r \
400 else cpPlugins_Image_Demangle( \
403 else cpPlugins_Image_Demangle( \
406 else cpPlugins_Image_Demangle( \
407 std::complex< float >, 3, o, f, r \
409 else cpPlugins_Image_Demangle( \
410 std::complex< double >, 3, o, f, r \
412 else cpPlugins_Image_Demangle( \
413 itk::Offset< 3 >, 3, o, f, r \
415 else r = std::string( #c ) + std::string( ": Image type." ); \
419 cpPlugins_Image_Demangle( \
422 else cpPlugins_Image_Demangle( \
425 else cpPlugins_Image_Demangle( \
428 else cpPlugins_Image_Demangle( \
431 else cpPlugins_Image_Demangle( \
432 unsigned char, 4, o, f, r \
434 else cpPlugins_Image_Demangle( \
435 unsigned short, 4, o, f, r \
437 else cpPlugins_Image_Demangle( \
438 unsigned int, 4, o, f, r \
440 else cpPlugins_Image_Demangle( \
441 unsigned long, 4, o, f, r \
443 else cpPlugins_Image_Demangle( \
446 else cpPlugins_Image_Demangle( \
449 else cpPlugins_Image_Demangle( \
450 std::complex< float >, 4, o, f, r \
452 else cpPlugins_Image_Demangle( \
453 std::complex< double >, 4, o, f, r \
455 else cpPlugins_Image_Demangle( \
456 itk::Offset< 4 >, 4, o, f, r \
458 else r = std::string( #c ) + std::string( ": Image type." ); \
462 std::string( #c ) + \
463 std::string( ": Image dimension not supported." ); \
467 // -------------------------------------------------------------------------
468 #define cpPlugins_Image_Demangle_Methods_Code_Only_Scalars( c, f ) \
469 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
471 std::string r = ""; \
472 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
473 r = this->_DemangleImagePixel( 1, o ); \
474 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
475 r = this->_DemangleImagePixel( 2, o ); \
476 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
477 r = this->_DemangleImagePixel( 3, o ); \
478 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
479 r = this->_DemangleImagePixel( 4, o ); \
482 std::string( #c ) + \
483 std::string( ": Image dimension not supported." ); \
486 std::string c::_DemangleImagePixel( \
487 unsigned int d, itk::DataObject* o \
490 std::string r = ""; \
493 cpPlugins_Image_Demangle( \
496 else cpPlugins_Image_Demangle( \
499 else cpPlugins_Image_Demangle( \
502 else cpPlugins_Image_Demangle( \
505 else cpPlugins_Image_Demangle( \
506 unsigned char, 1, o, f, r \
508 else cpPlugins_Image_Demangle( \
509 unsigned short, 1, o, f, r \
511 else cpPlugins_Image_Demangle( \
512 unsigned int, 1, o, f, r \
514 else cpPlugins_Image_Demangle( \
515 unsigned long, 1, o, f, r \
517 else cpPlugins_Image_Demangle( \
520 else cpPlugins_Image_Demangle( \
523 else r = std::string( #c ) + std::string( ": Image type." ); \
527 cpPlugins_Image_Demangle( \
530 else cpPlugins_Image_Demangle( \
533 else cpPlugins_Image_Demangle( \
536 else cpPlugins_Image_Demangle( \
539 else cpPlugins_Image_Demangle( \
540 unsigned char, 2, o, f, r \
542 else cpPlugins_Image_Demangle( \
543 unsigned short, 2, o, f, r \
545 else cpPlugins_Image_Demangle( \
546 unsigned int, 2, o, f, r \
548 else cpPlugins_Image_Demangle( \
549 unsigned long, 2, o, f, r \
551 else cpPlugins_Image_Demangle( \
554 else cpPlugins_Image_Demangle( \
557 else r = std::string( #c ) + std::string( ": Image type." ); \
561 cpPlugins_Image_Demangle( \
564 else cpPlugins_Image_Demangle( \
567 else cpPlugins_Image_Demangle( \
570 else cpPlugins_Image_Demangle( \
573 else cpPlugins_Image_Demangle( \
574 unsigned char, 3, o, f, r \
576 else cpPlugins_Image_Demangle( \
577 unsigned short, 3, o, f, r \
579 else cpPlugins_Image_Demangle( \
580 unsigned int, 3, o, f, r \
582 else cpPlugins_Image_Demangle( \
583 unsigned long, 3, o, f, r \
585 else cpPlugins_Image_Demangle( \
588 else cpPlugins_Image_Demangle( \
591 else r = std::string( #c ) + std::string( ": Image type." ); \
595 cpPlugins_Image_Demangle( \
598 else cpPlugins_Image_Demangle( \
601 else cpPlugins_Image_Demangle( \
604 else cpPlugins_Image_Demangle( \
607 else cpPlugins_Image_Demangle( \
608 unsigned char, 4, o, f, r \
610 else cpPlugins_Image_Demangle( \
611 unsigned short, 4, o, f, r \
613 else cpPlugins_Image_Demangle( \
614 unsigned int, 4, o, f, r \
616 else cpPlugins_Image_Demangle( \
617 unsigned long, 4, o, f, r \
619 else cpPlugins_Image_Demangle( \
622 else cpPlugins_Image_Demangle( \
625 else r = std::string( #c ) + std::string( ": Image type." ); \
629 std::string( #c ) + \
630 std::string( ": Image dimension not supported." ); \
635 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__