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 );
54 inline T* _Input( unsigned int idx );
57 inline const T* _Input( unsigned int idx ) const;
60 inline T* _Output( unsigned int idx );
63 inline const T* _Output( unsigned int idx ) const;
65 virtual std::string _GenerateData( ) = 0;
68 // Purposely not implemented
69 ProcessObject( const Self& );
70 Self& operator=( const Self& );
73 itk::ProcessObject::Pointer m_RealProcessObject;
74 Parameters m_DefaultParameters;
75 Parameters m_Parameters;
77 std::vector< DataObject::Pointer > m_Inputs;
78 std::vector< DataObject::Pointer > m_Outputs;
85 #include <cpPlugins/Interface/ProcessObject.hxx>
88 // -------------------------------------------------------------------------
90 #define cpPlugins_Image_Demangle_Methods( c ) \
91 std::string _DemangleImageDimension( itk::DataObject* o ); \
92 std::string _DemangleImagePixel( unsigned int d, itk::DataObject* o );
94 // -------------------------------------------------------------------------
95 #define cpPlugins_Image_Demangle_Methods_Code( c, f ) \
96 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
99 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
101 cpPlugins_Image_Array_Demangle( \
102 itk::Vector, float, 1, 1, o, f, r \
104 else cpPlugins_Image_Array_Demangle( \
105 itk::Vector, double, 1, 1, o, f, r \
107 else cpPlugins_Image_Array_Demangle( \
108 itk::Point, float, 1, 1, o, f, r \
110 else cpPlugins_Image_Array_Demangle( \
111 itk::Point, double, 1, 1, o, f, r \
113 else cpPlugins_Image_Array_Demangle( \
114 itk::CovariantVector, float, 1, 1, o, f, r \
116 else cpPlugins_Image_Array_Demangle( \
117 itk::CovariantVector, double, 1, 1, o, f, r \
119 else cpPlugins_Image_Array_Demangle( \
120 itk::SymmetricSecondRankTensor, float, 1, 1, o, f, r \
122 else cpPlugins_Image_Array_Demangle( \
123 itk::SymmetricSecondRankTensor, double, 1, 1, o, f, r \
125 else r = this->_DemangleImagePixel( 1, o ); \
127 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
129 cpPlugins_Image_Demangle( \
130 itk::RGBPixel< char >, 2, o, f, r \
132 else cpPlugins_Image_Demangle( \
133 itk::RGBPixel< short >, 2, o, f, r \
135 else cpPlugins_Image_Demangle( \
136 itk::RGBPixel< unsigned char >, 2, o, f, r \
138 else cpPlugins_Image_Demangle( \
139 itk::RGBPixel< unsigned short >, 2, o, f, r \
141 else cpPlugins_Image_Demangle( \
142 itk::RGBAPixel< char >, 2, o, f, r \
144 else cpPlugins_Image_Demangle( \
145 itk::RGBAPixel< short >, 2, o, f, r \
147 else cpPlugins_Image_Demangle( \
148 itk::RGBAPixel< unsigned char >, 2, o, f, r \
150 else cpPlugins_Image_Demangle( \
151 itk::RGBAPixel< unsigned short >, 2, o, f, r \
153 else cpPlugins_Image_Array_Demangle( \
154 itk::Vector, float, 2, 2, o, f, r \
156 else cpPlugins_Image_Array_Demangle( \
157 itk::Vector, double, 2, 2, o, f, r \
159 else cpPlugins_Image_Array_Demangle( \
160 itk::Point, float, 2, 2, o, f, r \
162 else cpPlugins_Image_Array_Demangle( \
163 itk::Point, double, 2, 2, o, f, r \
165 else cpPlugins_Image_Array_Demangle( \
166 itk::CovariantVector, float, 2, 2, o, f, r \
168 else cpPlugins_Image_Array_Demangle( \
169 itk::CovariantVector, double, 2, 2, o, f, r \
171 else cpPlugins_Image_Array_Demangle( \
172 itk::SymmetricSecondRankTensor, float, 2, 2, o, f, r \
174 else cpPlugins_Image_Array_Demangle( \
175 itk::SymmetricSecondRankTensor, double, 2, 2, o, f, r \
177 else r = this->_DemangleImagePixel( 2, o ); \
179 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
181 cpPlugins_Image_Demangle( \
182 itk::RGBPixel< char >, 3, o, f, r \
184 else cpPlugins_Image_Demangle( \
185 itk::RGBPixel< short >, 3, o, f, r \
187 else cpPlugins_Image_Demangle( \
188 itk::RGBPixel< unsigned char >, 3, o, f, r \
190 else cpPlugins_Image_Demangle( \
191 itk::RGBPixel< unsigned short >, 3, o, f, r \
193 else cpPlugins_Image_Demangle( \
194 itk::RGBAPixel< char >, 3, o, f, r \
196 else cpPlugins_Image_Demangle( \
197 itk::RGBAPixel< short >, 3, o, f, r \
199 else cpPlugins_Image_Demangle( \
200 itk::RGBAPixel< unsigned char >, 3, o, f, r \
202 else cpPlugins_Image_Demangle( \
203 itk::RGBAPixel< unsigned short >, 3, o, f, r \
205 else cpPlugins_Image_Array_Demangle( \
206 itk::Vector, float, 3, 3, o, f, r \
208 else cpPlugins_Image_Array_Demangle( \
209 itk::Vector, double, 3, 3, o, f, r \
211 else cpPlugins_Image_Array_Demangle( \
212 itk::Point, float, 3, 3, o, f, r \
214 else cpPlugins_Image_Array_Demangle( \
215 itk::Point, double, 3, 3, o, f, r \
217 else cpPlugins_Image_Array_Demangle( \
218 itk::CovariantVector, float, 3, 3, o, f, r \
220 else cpPlugins_Image_Array_Demangle( \
221 itk::CovariantVector, double, 3, 3, o, f, r \
223 else cpPlugins_Image_Array_Demangle( \
224 itk::SymmetricSecondRankTensor, float, 3, 3, o, f, r \
226 else cpPlugins_Image_Array_Demangle( \
227 itk::SymmetricSecondRankTensor, double, 3, 3, o, f, r \
229 else cpPlugins_Image_Demangle( \
230 itk::DiffusionTensor3D< float >, 3, o, f, r \
232 else cpPlugins_Image_Demangle( \
233 itk::DiffusionTensor3D< double >, 3, o, f, r \
235 else r = this->_DemangleImagePixel( 3, o ); \
237 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
239 cpPlugins_Image_Demangle( \
240 itk::RGBPixel< char >, 4, o, f, r \
242 else cpPlugins_Image_Demangle( \
243 itk::RGBPixel< short >, 4, o, f, r \
245 else cpPlugins_Image_Demangle( \
246 itk::RGBPixel< unsigned char >, 4, o, f, r \
248 else cpPlugins_Image_Demangle( \
249 itk::RGBPixel< unsigned short >, 4, o, f, r \
251 else cpPlugins_Image_Demangle( \
252 itk::RGBAPixel< char >, 4, o, f, r \
254 else cpPlugins_Image_Demangle( \
255 itk::RGBAPixel< short >, 4, o, f, r \
257 else cpPlugins_Image_Demangle( \
258 itk::RGBAPixel< unsigned char >, 4, o, f, r \
260 else cpPlugins_Image_Demangle( \
261 itk::RGBAPixel< unsigned short >, 4, o, f, r \
263 else cpPlugins_Image_Array_Demangle( \
264 itk::Vector, float, 4, 4, o, f, r \
266 else cpPlugins_Image_Array_Demangle( \
267 itk::Vector, double, 4, 4, o, f, r \
269 else cpPlugins_Image_Array_Demangle( \
270 itk::Point, float, 4, 4, o, f, r \
272 else cpPlugins_Image_Array_Demangle( \
273 itk::Point, double, 4, 4, o, f, r \
275 else cpPlugins_Image_Array_Demangle( \
276 itk::CovariantVector, float, 4, 4, o, f, r \
278 else cpPlugins_Image_Array_Demangle( \
279 itk::CovariantVector, double, 4, 4, o, f, r \
281 else cpPlugins_Image_Array_Demangle( \
282 itk::SymmetricSecondRankTensor, float, 4, 4, o, f, r \
284 else cpPlugins_Image_Array_Demangle( \
285 itk::SymmetricSecondRankTensor, double, 4, 4, o, f, r \
287 else r = this->_DemangleImagePixel( 4, o ); \
291 std::string( #c ) + \
292 std::string( ": Image dimension not supported." ); \
295 std::string c::_DemangleImagePixel( \
296 unsigned int d, itk::DataObject* o \
299 std::string r = ""; \
302 cpPlugins_Image_Demangle( \
305 else cpPlugins_Image_Demangle( \
308 else cpPlugins_Image_Demangle( \
311 else cpPlugins_Image_Demangle( \
314 else cpPlugins_Image_Demangle( \
315 unsigned char, 1, o, f, r \
317 else cpPlugins_Image_Demangle( \
318 unsigned short, 1, o, f, r \
320 else cpPlugins_Image_Demangle( \
321 unsigned int, 1, o, f, r \
323 else cpPlugins_Image_Demangle( \
324 unsigned long, 1, o, f, r \
326 else cpPlugins_Image_Demangle( \
329 else cpPlugins_Image_Demangle( \
332 else cpPlugins_Image_Demangle( \
333 std::complex< float >, 1, o, f, r \
335 else cpPlugins_Image_Demangle( \
336 std::complex< double >, 1, o, f, r \
338 else cpPlugins_Image_Demangle( \
339 itk::Offset< 1 >, 1, o, f, r \
341 else r = std::string( #c ) + std::string( ": Image type." ); \
345 cpPlugins_Image_Demangle( \
348 else cpPlugins_Image_Demangle( \
351 else cpPlugins_Image_Demangle( \
354 else cpPlugins_Image_Demangle( \
357 else cpPlugins_Image_Demangle( \
358 unsigned char, 2, o, f, r \
360 else cpPlugins_Image_Demangle( \
361 unsigned short, 2, o, f, r \
363 else cpPlugins_Image_Demangle( \
364 unsigned int, 2, o, f, r \
366 else cpPlugins_Image_Demangle( \
367 unsigned long, 2, o, f, r \
369 else cpPlugins_Image_Demangle( \
372 else cpPlugins_Image_Demangle( \
375 else cpPlugins_Image_Demangle( \
376 std::complex< float >, 2, o, f, r \
378 else cpPlugins_Image_Demangle( \
379 std::complex< double >, 2, o, f, r \
381 else cpPlugins_Image_Demangle( \
382 itk::Offset< 2 >, 2, o, f, r \
384 else r = std::string( #c ) + std::string( ": Image type." ); \
388 cpPlugins_Image_Demangle( \
391 else cpPlugins_Image_Demangle( \
394 else cpPlugins_Image_Demangle( \
397 else cpPlugins_Image_Demangle( \
400 else cpPlugins_Image_Demangle( \
401 unsigned char, 3, o, f, r \
403 else cpPlugins_Image_Demangle( \
404 unsigned short, 3, o, f, r \
406 else cpPlugins_Image_Demangle( \
407 unsigned int, 3, o, f, r \
409 else cpPlugins_Image_Demangle( \
410 unsigned long, 3, o, f, r \
412 else cpPlugins_Image_Demangle( \
415 else cpPlugins_Image_Demangle( \
418 else cpPlugins_Image_Demangle( \
419 std::complex< float >, 3, o, f, r \
421 else cpPlugins_Image_Demangle( \
422 std::complex< double >, 3, o, f, r \
424 else cpPlugins_Image_Demangle( \
425 itk::Offset< 3 >, 3, o, f, r \
427 else r = std::string( #c ) + std::string( ": Image type." ); \
431 cpPlugins_Image_Demangle( \
434 else cpPlugins_Image_Demangle( \
437 else cpPlugins_Image_Demangle( \
440 else cpPlugins_Image_Demangle( \
443 else cpPlugins_Image_Demangle( \
444 unsigned char, 4, o, f, r \
446 else cpPlugins_Image_Demangle( \
447 unsigned short, 4, o, f, r \
449 else cpPlugins_Image_Demangle( \
450 unsigned int, 4, o, f, r \
452 else cpPlugins_Image_Demangle( \
453 unsigned long, 4, o, f, r \
455 else cpPlugins_Image_Demangle( \
458 else cpPlugins_Image_Demangle( \
461 else cpPlugins_Image_Demangle( \
462 std::complex< float >, 4, o, f, r \
464 else cpPlugins_Image_Demangle( \
465 std::complex< double >, 4, o, f, r \
467 else cpPlugins_Image_Demangle( \
468 itk::Offset< 4 >, 4, o, f, r \
470 else r = std::string( #c ) + std::string( ": Image type." ); \
474 std::string( #c ) + \
475 std::string( ": Image dimension not supported." ); \
479 // -------------------------------------------------------------------------
480 #define cpPlugins_Image_Demangle_Methods_Code_Only_Scalars( c, f ) \
481 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
483 std::string r = ""; \
484 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
485 r = this->_DemangleImagePixel( 1, o ); \
486 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
487 r = this->_DemangleImagePixel( 2, o ); \
488 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
489 r = this->_DemangleImagePixel( 3, o ); \
490 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
491 r = this->_DemangleImagePixel( 4, o ); \
494 std::string( #c ) + \
495 std::string( ": Image dimension not supported." ); \
498 std::string c::_DemangleImagePixel( \
499 unsigned int d, itk::DataObject* o \
502 std::string r = ""; \
505 cpPlugins_Image_Demangle( \
508 else cpPlugins_Image_Demangle( \
511 else cpPlugins_Image_Demangle( \
514 else cpPlugins_Image_Demangle( \
517 else cpPlugins_Image_Demangle( \
518 unsigned char, 1, o, f, r \
520 else cpPlugins_Image_Demangle( \
521 unsigned short, 1, o, f, r \
523 else cpPlugins_Image_Demangle( \
524 unsigned int, 1, o, f, r \
526 else cpPlugins_Image_Demangle( \
527 unsigned long, 1, o, f, r \
529 else cpPlugins_Image_Demangle( \
532 else cpPlugins_Image_Demangle( \
535 else r = std::string( #c ) + std::string( ": Image type." ); \
539 cpPlugins_Image_Demangle( \
542 else cpPlugins_Image_Demangle( \
545 else cpPlugins_Image_Demangle( \
548 else cpPlugins_Image_Demangle( \
551 else cpPlugins_Image_Demangle( \
552 unsigned char, 2, o, f, r \
554 else cpPlugins_Image_Demangle( \
555 unsigned short, 2, o, f, r \
557 else cpPlugins_Image_Demangle( \
558 unsigned int, 2, o, f, r \
560 else cpPlugins_Image_Demangle( \
561 unsigned long, 2, o, f, r \
563 else cpPlugins_Image_Demangle( \
566 else cpPlugins_Image_Demangle( \
569 else r = std::string( #c ) + std::string( ": Image type." ); \
573 cpPlugins_Image_Demangle( \
576 else cpPlugins_Image_Demangle( \
579 else cpPlugins_Image_Demangle( \
582 else cpPlugins_Image_Demangle( \
585 else cpPlugins_Image_Demangle( \
586 unsigned char, 3, o, f, r \
588 else cpPlugins_Image_Demangle( \
589 unsigned short, 3, o, f, r \
591 else cpPlugins_Image_Demangle( \
592 unsigned int, 3, o, f, r \
594 else cpPlugins_Image_Demangle( \
595 unsigned long, 3, o, f, r \
597 else cpPlugins_Image_Demangle( \
600 else cpPlugins_Image_Demangle( \
603 else r = std::string( #c ) + std::string( ": Image type." ); \
607 cpPlugins_Image_Demangle( \
610 else cpPlugins_Image_Demangle( \
613 else cpPlugins_Image_Demangle( \
616 else cpPlugins_Image_Demangle( \
619 else cpPlugins_Image_Demangle( \
620 unsigned char, 4, o, f, r \
622 else cpPlugins_Image_Demangle( \
623 unsigned short, 4, o, f, r \
625 else cpPlugins_Image_Demangle( \
626 unsigned int, 4, o, f, r \
628 else cpPlugins_Image_Demangle( \
629 unsigned long, 4, o, f, r \
631 else cpPlugins_Image_Demangle( \
634 else cpPlugins_Image_Demangle( \
637 else r = std::string( #c ) + std::string( ": Image type." ); \
641 std::string( #c ) + \
642 std::string( ": Image dimension not supported." ); \
647 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__