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 #include <itkProcessObject.h>
17 class cpPlugins_Interface_EXPORT ProcessObject
21 typedef ProcessObject Self;
22 typedef Object Superclass;
23 typedef itk::SmartPointer< Self > Pointer;
24 typedef itk::SmartPointer< const Self > ConstPointer;
27 itkTypeMacro( ProcessObject, Object );
30 virtual const Parameters& GetDefaultParameters( ) const;
31 virtual void SetParameters( const Parameters& params );
33 virtual unsigned int GetNumberOfInputs( ) const;
34 virtual unsigned int GetNumberOfOutputs( ) const;
36 virtual void SetNumberOfInputs( unsigned int n );
37 virtual void SetNumberOfOutputs( unsigned int n );
39 virtual void SetInput( unsigned int idx, DataObject* dobj );
40 virtual DataObject* GetOutput( unsigned int idx );
42 virtual std::string Update( );
43 virtual void DisconnectOutputs( );
47 virtual ~ProcessObject( );
50 inline void _MakeOutput( unsigned int idx );
53 inline T* _Input( unsigned int idx );
56 inline const T* _Input( unsigned int idx ) const;
59 inline T* _Output( unsigned int idx );
62 inline const T* _Output( unsigned int idx ) const;
64 virtual std::string _GenerateData( ) = 0;
67 // Purposely not implemented
68 ProcessObject( const Self& );
69 Self& operator=( const Self& );
72 itk::ProcessObject::Pointer m_RealProcessObject;
73 Parameters m_DefaultParameters;
74 Parameters m_Parameters;
76 std::vector< DataObject::Pointer > m_Inputs;
77 std::vector< DataObject::Pointer > m_Outputs;
84 #include <cpPlugins/Interface/ProcessObject.hxx>
87 // -------------------------------------------------------------------------
89 #define cpPlugins_Image_Demangle_Methods( c ) \
90 std::string _DemangleImageDimension( itk::DataObject* o ); \
91 std::string _DemangleImagePixel( unsigned int d, itk::DataObject* o );
93 // -------------------------------------------------------------------------
94 #define cpPlugins_Image_Demangle_Methods_Code( c, f ) \
95 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
98 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
100 cpPlugins_Image_Array_Demangle( \
101 itk::Vector, float, 1, 1, o, f, r \
103 else cpPlugins_Image_Array_Demangle( \
104 itk::Vector, double, 1, 1, o, f, r \
106 else cpPlugins_Image_Array_Demangle( \
107 itk::Point, float, 1, 1, o, f, r \
109 else cpPlugins_Image_Array_Demangle( \
110 itk::Point, double, 1, 1, o, f, r \
112 else cpPlugins_Image_Array_Demangle( \
113 itk::CovariantVector, float, 1, 1, o, f, r \
115 else cpPlugins_Image_Array_Demangle( \
116 itk::CovariantVector, double, 1, 1, o, f, r \
118 else cpPlugins_Image_Array_Demangle( \
119 itk::SymmetricSecondRankTensor, float, 1, 1, o, f, r \
121 else cpPlugins_Image_Array_Demangle( \
122 itk::SymmetricSecondRankTensor, double, 1, 1, o, f, r \
124 else r = this->_DemangleImagePixel( 1, o ); \
126 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
128 cpPlugins_Image_Demangle( \
129 itk::RGBPixel< char >, 2, o, f, r \
131 else cpPlugins_Image_Demangle( \
132 itk::RGBPixel< short >, 2, o, f, r \
134 else cpPlugins_Image_Demangle( \
135 itk::RGBPixel< unsigned char >, 2, o, f, r \
137 else cpPlugins_Image_Demangle( \
138 itk::RGBPixel< unsigned short >, 2, o, f, r \
140 else cpPlugins_Image_Demangle( \
141 itk::RGBAPixel< char >, 2, o, f, r \
143 else cpPlugins_Image_Demangle( \
144 itk::RGBAPixel< short >, 2, o, f, r \
146 else cpPlugins_Image_Demangle( \
147 itk::RGBAPixel< unsigned char >, 2, o, f, r \
149 else cpPlugins_Image_Demangle( \
150 itk::RGBAPixel< unsigned short >, 2, o, f, r \
152 else cpPlugins_Image_Array_Demangle( \
153 itk::Vector, float, 2, 2, o, f, r \
155 else cpPlugins_Image_Array_Demangle( \
156 itk::Vector, double, 2, 2, o, f, r \
158 else cpPlugins_Image_Array_Demangle( \
159 itk::Point, float, 2, 2, o, f, r \
161 else cpPlugins_Image_Array_Demangle( \
162 itk::Point, double, 2, 2, o, f, r \
164 else cpPlugins_Image_Array_Demangle( \
165 itk::CovariantVector, float, 2, 2, o, f, r \
167 else cpPlugins_Image_Array_Demangle( \
168 itk::CovariantVector, double, 2, 2, o, f, r \
170 else cpPlugins_Image_Array_Demangle( \
171 itk::SymmetricSecondRankTensor, float, 2, 2, o, f, r \
173 else cpPlugins_Image_Array_Demangle( \
174 itk::SymmetricSecondRankTensor, double, 2, 2, o, f, r \
176 else r = this->_DemangleImagePixel( 2, o ); \
178 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
180 cpPlugins_Image_Demangle( \
181 itk::RGBPixel< char >, 3, o, f, r \
183 else cpPlugins_Image_Demangle( \
184 itk::RGBPixel< short >, 3, o, f, r \
186 else cpPlugins_Image_Demangle( \
187 itk::RGBPixel< unsigned char >, 3, o, f, r \
189 else cpPlugins_Image_Demangle( \
190 itk::RGBPixel< unsigned short >, 3, o, f, r \
192 else cpPlugins_Image_Demangle( \
193 itk::RGBAPixel< char >, 3, o, f, r \
195 else cpPlugins_Image_Demangle( \
196 itk::RGBAPixel< short >, 3, o, f, r \
198 else cpPlugins_Image_Demangle( \
199 itk::RGBAPixel< unsigned char >, 3, o, f, r \
201 else cpPlugins_Image_Demangle( \
202 itk::RGBAPixel< unsigned short >, 3, o, f, r \
204 else cpPlugins_Image_Array_Demangle( \
205 itk::Vector, float, 3, 3, o, f, r \
207 else cpPlugins_Image_Array_Demangle( \
208 itk::Vector, double, 3, 3, o, f, r \
210 else cpPlugins_Image_Array_Demangle( \
211 itk::Point, float, 3, 3, o, f, r \
213 else cpPlugins_Image_Array_Demangle( \
214 itk::Point, double, 3, 3, o, f, r \
216 else cpPlugins_Image_Array_Demangle( \
217 itk::CovariantVector, float, 3, 3, o, f, r \
219 else cpPlugins_Image_Array_Demangle( \
220 itk::CovariantVector, double, 3, 3, o, f, r \
222 else cpPlugins_Image_Array_Demangle( \
223 itk::SymmetricSecondRankTensor, float, 3, 3, o, f, r \
225 else cpPlugins_Image_Array_Demangle( \
226 itk::SymmetricSecondRankTensor, double, 3, 3, o, f, r \
228 else cpPlugins_Image_Demangle( \
229 itk::DiffusionTensor3D< float >, 3, o, f, r \
231 else cpPlugins_Image_Demangle( \
232 itk::DiffusionTensor3D< double >, 3, o, f, r \
234 else r = this->_DemangleImagePixel( 3, o ); \
236 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
238 cpPlugins_Image_Demangle( \
239 itk::RGBPixel< char >, 4, o, f, r \
241 else cpPlugins_Image_Demangle( \
242 itk::RGBPixel< short >, 4, o, f, r \
244 else cpPlugins_Image_Demangle( \
245 itk::RGBPixel< unsigned char >, 4, o, f, r \
247 else cpPlugins_Image_Demangle( \
248 itk::RGBPixel< unsigned short >, 4, o, f, r \
250 else cpPlugins_Image_Demangle( \
251 itk::RGBAPixel< char >, 4, o, f, r \
253 else cpPlugins_Image_Demangle( \
254 itk::RGBAPixel< short >, 4, o, f, r \
256 else cpPlugins_Image_Demangle( \
257 itk::RGBAPixel< unsigned char >, 4, o, f, r \
259 else cpPlugins_Image_Demangle( \
260 itk::RGBAPixel< unsigned short >, 4, o, f, r \
262 else cpPlugins_Image_Array_Demangle( \
263 itk::Vector, float, 4, 4, o, f, r \
265 else cpPlugins_Image_Array_Demangle( \
266 itk::Vector, double, 4, 4, o, f, r \
268 else cpPlugins_Image_Array_Demangle( \
269 itk::Point, float, 4, 4, o, f, r \
271 else cpPlugins_Image_Array_Demangle( \
272 itk::Point, double, 4, 4, o, f, r \
274 else cpPlugins_Image_Array_Demangle( \
275 itk::CovariantVector, float, 4, 4, o, f, r \
277 else cpPlugins_Image_Array_Demangle( \
278 itk::CovariantVector, double, 4, 4, o, f, r \
280 else cpPlugins_Image_Array_Demangle( \
281 itk::SymmetricSecondRankTensor, float, 4, 4, o, f, r \
283 else cpPlugins_Image_Array_Demangle( \
284 itk::SymmetricSecondRankTensor, double, 4, 4, o, f, r \
286 else r = this->_DemangleImagePixel( 4, o ); \
290 std::string( #c ) + \
291 std::string( ": Image dimension not supported." ); \
294 std::string c::_DemangleImagePixel( \
295 unsigned int d, itk::DataObject* o \
298 std::string r = ""; \
301 cpPlugins_Image_Demangle( \
304 else cpPlugins_Image_Demangle( \
307 else cpPlugins_Image_Demangle( \
310 else cpPlugins_Image_Demangle( \
313 else cpPlugins_Image_Demangle( \
314 unsigned char, 1, o, f, r \
316 else cpPlugins_Image_Demangle( \
317 unsigned short, 1, o, f, r \
319 else cpPlugins_Image_Demangle( \
320 unsigned int, 1, o, f, r \
322 else cpPlugins_Image_Demangle( \
323 unsigned long, 1, o, f, r \
325 else cpPlugins_Image_Demangle( \
328 else cpPlugins_Image_Demangle( \
331 else cpPlugins_Image_Demangle( \
332 std::complex< float >, 1, o, f, r \
334 else cpPlugins_Image_Demangle( \
335 std::complex< double >, 1, o, f, r \
337 else cpPlugins_Image_Demangle( \
338 itk::Offset< 1 >, 1, o, f, r \
340 else r = std::string( #c ) + std::string( ": Image type." ); \
344 cpPlugins_Image_Demangle( \
347 else cpPlugins_Image_Demangle( \
350 else cpPlugins_Image_Demangle( \
353 else cpPlugins_Image_Demangle( \
356 else cpPlugins_Image_Demangle( \
357 unsigned char, 2, o, f, r \
359 else cpPlugins_Image_Demangle( \
360 unsigned short, 2, o, f, r \
362 else cpPlugins_Image_Demangle( \
363 unsigned int, 2, o, f, r \
365 else cpPlugins_Image_Demangle( \
366 unsigned long, 2, o, f, r \
368 else cpPlugins_Image_Demangle( \
371 else cpPlugins_Image_Demangle( \
374 else cpPlugins_Image_Demangle( \
375 std::complex< float >, 2, o, f, r \
377 else cpPlugins_Image_Demangle( \
378 std::complex< double >, 2, o, f, r \
380 else cpPlugins_Image_Demangle( \
381 itk::Offset< 2 >, 2, o, f, r \
383 else r = std::string( #c ) + std::string( ": Image type." ); \
387 cpPlugins_Image_Demangle( \
390 else cpPlugins_Image_Demangle( \
393 else cpPlugins_Image_Demangle( \
396 else cpPlugins_Image_Demangle( \
399 else cpPlugins_Image_Demangle( \
400 unsigned char, 3, o, f, r \
402 else cpPlugins_Image_Demangle( \
403 unsigned short, 3, o, f, r \
405 else cpPlugins_Image_Demangle( \
406 unsigned int, 3, o, f, r \
408 else cpPlugins_Image_Demangle( \
409 unsigned long, 3, o, f, r \
411 else cpPlugins_Image_Demangle( \
414 else cpPlugins_Image_Demangle( \
417 else cpPlugins_Image_Demangle( \
418 std::complex< float >, 3, o, f, r \
420 else cpPlugins_Image_Demangle( \
421 std::complex< double >, 3, o, f, r \
423 else cpPlugins_Image_Demangle( \
424 itk::Offset< 3 >, 3, o, f, r \
426 else r = std::string( #c ) + std::string( ": Image type." ); \
430 cpPlugins_Image_Demangle( \
433 else cpPlugins_Image_Demangle( \
436 else cpPlugins_Image_Demangle( \
439 else cpPlugins_Image_Demangle( \
442 else cpPlugins_Image_Demangle( \
443 unsigned char, 4, o, f, r \
445 else cpPlugins_Image_Demangle( \
446 unsigned short, 4, o, f, r \
448 else cpPlugins_Image_Demangle( \
449 unsigned int, 4, o, f, r \
451 else cpPlugins_Image_Demangle( \
452 unsigned long, 4, o, f, r \
454 else cpPlugins_Image_Demangle( \
457 else cpPlugins_Image_Demangle( \
460 else cpPlugins_Image_Demangle( \
461 std::complex< float >, 4, o, f, r \
463 else cpPlugins_Image_Demangle( \
464 std::complex< double >, 4, o, f, r \
466 else cpPlugins_Image_Demangle( \
467 itk::Offset< 4 >, 4, o, f, r \
469 else r = std::string( #c ) + std::string( ": Image type." ); \
473 std::string( #c ) + \
474 std::string( ": Image dimension not supported." ); \
478 // -------------------------------------------------------------------------
479 #define cpPlugins_Image_Demangle_Methods_Code_Only_Scalars( c, f ) \
480 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
482 std::string r = ""; \
483 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
484 r = this->_DemangleImagePixel( 1, o ); \
485 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
486 r = this->_DemangleImagePixel( 2, o ); \
487 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
488 r = this->_DemangleImagePixel( 3, o ); \
489 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
490 r = this->_DemangleImagePixel( 4, o ); \
493 std::string( #c ) + \
494 std::string( ": Image dimension not supported." ); \
497 std::string c::_DemangleImagePixel( \
498 unsigned int d, itk::DataObject* o \
501 std::string r = ""; \
504 cpPlugins_Image_Demangle( \
507 else cpPlugins_Image_Demangle( \
510 else cpPlugins_Image_Demangle( \
513 else cpPlugins_Image_Demangle( \
516 else cpPlugins_Image_Demangle( \
517 unsigned char, 1, o, f, r \
519 else cpPlugins_Image_Demangle( \
520 unsigned short, 1, o, f, r \
522 else cpPlugins_Image_Demangle( \
523 unsigned int, 1, o, f, r \
525 else cpPlugins_Image_Demangle( \
526 unsigned long, 1, o, f, r \
528 else cpPlugins_Image_Demangle( \
531 else cpPlugins_Image_Demangle( \
534 else r = std::string( #c ) + std::string( ": Image type." ); \
538 cpPlugins_Image_Demangle( \
541 else cpPlugins_Image_Demangle( \
544 else cpPlugins_Image_Demangle( \
547 else cpPlugins_Image_Demangle( \
550 else cpPlugins_Image_Demangle( \
551 unsigned char, 2, o, f, r \
553 else cpPlugins_Image_Demangle( \
554 unsigned short, 2, o, f, r \
556 else cpPlugins_Image_Demangle( \
557 unsigned int, 2, o, f, r \
559 else cpPlugins_Image_Demangle( \
560 unsigned long, 2, o, f, r \
562 else cpPlugins_Image_Demangle( \
565 else cpPlugins_Image_Demangle( \
568 else r = std::string( #c ) + std::string( ": Image type." ); \
572 cpPlugins_Image_Demangle( \
575 else cpPlugins_Image_Demangle( \
578 else cpPlugins_Image_Demangle( \
581 else cpPlugins_Image_Demangle( \
584 else cpPlugins_Image_Demangle( \
585 unsigned char, 3, o, f, r \
587 else cpPlugins_Image_Demangle( \
588 unsigned short, 3, o, f, r \
590 else cpPlugins_Image_Demangle( \
591 unsigned int, 3, o, f, r \
593 else cpPlugins_Image_Demangle( \
594 unsigned long, 3, o, f, r \
596 else cpPlugins_Image_Demangle( \
599 else cpPlugins_Image_Demangle( \
602 else r = std::string( #c ) + std::string( ": Image type." ); \
606 cpPlugins_Image_Demangle( \
609 else cpPlugins_Image_Demangle( \
612 else cpPlugins_Image_Demangle( \
615 else cpPlugins_Image_Demangle( \
618 else cpPlugins_Image_Demangle( \
619 unsigned char, 4, o, f, r \
621 else cpPlugins_Image_Demangle( \
622 unsigned short, 4, o, f, r \
624 else cpPlugins_Image_Demangle( \
625 unsigned int, 4, o, f, r \
627 else cpPlugins_Image_Demangle( \
628 unsigned long, 4, o, f, r \
630 else cpPlugins_Image_Demangle( \
633 else cpPlugins_Image_Demangle( \
636 else r = std::string( #c ) + std::string( ": Image type." ); \
640 std::string( #c ) + \
641 std::string( ": Image dimension not supported." ); \
646 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__