1 #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
2 #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__
4 #include <cpPlugins/cpPlugins_Export.h>
5 #include <cpPlugins/Interface/Object.h>
6 #include <cpPlugins/Interface/DataObject.h>
7 #include <cpPlugins/Interface/Parameters.h>
9 #include <cpPlugins/Interface/Image.h>
11 #define ITK_MANUAL_INSTANTIATION
12 #include <itkProcessObject.h>
20 class cpPlugins_EXPORT ProcessObject
24 typedef ProcessObject Self;
25 typedef Object Superclass;
26 typedef itk::SmartPointer< Self > Pointer;
27 typedef itk::SmartPointer< const Self > ConstPointer;
30 itkTypeMacro( ProcessObject, Object );
33 virtual const Parameters& GetDefaultParameters( ) const;
34 virtual void SetParameters( const Parameters& params );
36 virtual unsigned int GetNumberOfInputs( ) const;
37 virtual unsigned int GetNumberOfOutputs( ) const;
39 virtual void SetNumberOfInputs( unsigned int n );
40 virtual void SetNumberOfOutputs( unsigned int n );
42 virtual void SetInput( unsigned int idx, DataObject* dobj );
43 virtual DataObject* GetOutput( unsigned int idx );
45 virtual std::string Update( );
46 virtual void DisconnectOutputs( );
50 virtual ~ProcessObject( );
53 void _MakeOutput( unsigned int idx )
55 if( idx >= this->m_Outputs.size( ) )
57 this->m_Outputs[ idx ] = O::New( );
58 this->m_Outputs[ idx ]->SetSource( this );
61 virtual std::string _GenerateData( ) = 0;
64 // Purposely not implemented
65 ProcessObject( const Self& );
66 Self& operator=( const Self& );
69 itk::ProcessObject::Pointer m_RealProcessObject;
70 Parameters m_DefaultParameters;
71 Parameters m_Parameters;
73 std::vector< DataObject::Pointer > m_Inputs;
74 std::vector< DataObject::Pointer > m_Outputs;
81 // -------------------------------------------------------------------------
82 #define cpPlugins_Image_Demangle_Methods( c ) \
83 std::string _DemangleImageDimension( itk::DataObject* o ); \
84 std::string _DemangleImagePixel( unsigned int d, itk::DataObject* o );
86 // -------------------------------------------------------------------------
87 #define cpPlugins_Image_Demangle_Methods_Code( c, f ) \
88 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
91 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
93 cpPlugins_Image_Array_Demangle( \
94 itk::Vector, float, 1, 1, o, f, r \
96 else cpPlugins_Image_Array_Demangle( \
97 itk::Vector, double, 1, 1, o, f, r \
99 else cpPlugins_Image_Array_Demangle( \
100 itk::Point, float, 1, 1, o, f, r \
102 else cpPlugins_Image_Array_Demangle( \
103 itk::Point, double, 1, 1, o, f, r \
105 else cpPlugins_Image_Array_Demangle( \
106 itk::CovariantVector, float, 1, 1, o, f, r \
108 else cpPlugins_Image_Array_Demangle( \
109 itk::CovariantVector, double, 1, 1, o, f, r \
111 else cpPlugins_Image_Array_Demangle( \
112 itk::SymmetricSecondRankTensor, float, 1, 1, o, f, r \
114 else cpPlugins_Image_Array_Demangle( \
115 itk::SymmetricSecondRankTensor, double, 1, 1, o, f, r \
117 else r = this->_DemangleImagePixel( 1, o ); \
119 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
121 cpPlugins_Image_Demangle( \
122 itk::RGBPixel< char >, 2, o, f, r \
124 else cpPlugins_Image_Demangle( \
125 itk::RGBPixel< short >, 2, o, f, r \
127 else cpPlugins_Image_Demangle( \
128 itk::RGBPixel< unsigned char >, 2, o, f, r \
130 else cpPlugins_Image_Demangle( \
131 itk::RGBPixel< unsigned short >, 2, o, f, r \
133 else cpPlugins_Image_Demangle( \
134 itk::RGBAPixel< char >, 2, o, f, r \
136 else cpPlugins_Image_Demangle( \
137 itk::RGBAPixel< short >, 2, o, f, r \
139 else cpPlugins_Image_Demangle( \
140 itk::RGBAPixel< unsigned char >, 2, o, f, r \
142 else cpPlugins_Image_Demangle( \
143 itk::RGBAPixel< unsigned short >, 2, o, f, r \
145 else cpPlugins_Image_Array_Demangle( \
146 itk::Vector, float, 2, 2, o, f, r \
148 else cpPlugins_Image_Array_Demangle( \
149 itk::Vector, double, 2, 2, o, f, r \
151 else cpPlugins_Image_Array_Demangle( \
152 itk::Point, float, 2, 2, o, f, r \
154 else cpPlugins_Image_Array_Demangle( \
155 itk::Point, double, 2, 2, o, f, r \
157 else cpPlugins_Image_Array_Demangle( \
158 itk::CovariantVector, float, 2, 2, o, f, r \
160 else cpPlugins_Image_Array_Demangle( \
161 itk::CovariantVector, double, 2, 2, o, f, r \
163 else cpPlugins_Image_Array_Demangle( \
164 itk::SymmetricSecondRankTensor, float, 2, 2, o, f, r \
166 else cpPlugins_Image_Array_Demangle( \
167 itk::SymmetricSecondRankTensor, double, 2, 2, o, f, r \
169 else r = this->_DemangleImagePixel( 2, o ); \
171 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
173 cpPlugins_Image_Demangle( \
174 itk::RGBPixel< char >, 3, o, f, r \
176 else cpPlugins_Image_Demangle( \
177 itk::RGBPixel< short >, 3, o, f, r \
179 else cpPlugins_Image_Demangle( \
180 itk::RGBPixel< unsigned char >, 3, o, f, r \
182 else cpPlugins_Image_Demangle( \
183 itk::RGBPixel< unsigned short >, 3, o, f, r \
185 else cpPlugins_Image_Demangle( \
186 itk::RGBAPixel< char >, 3, o, f, r \
188 else cpPlugins_Image_Demangle( \
189 itk::RGBAPixel< short >, 3, o, f, r \
191 else cpPlugins_Image_Demangle( \
192 itk::RGBAPixel< unsigned char >, 3, o, f, r \
194 else cpPlugins_Image_Demangle( \
195 itk::RGBAPixel< unsigned short >, 3, o, f, r \
197 else cpPlugins_Image_Array_Demangle( \
198 itk::Vector, float, 3, 3, o, f, r \
200 else cpPlugins_Image_Array_Demangle( \
201 itk::Vector, double, 3, 3, o, f, r \
203 else cpPlugins_Image_Array_Demangle( \
204 itk::Point, float, 3, 3, o, f, r \
206 else cpPlugins_Image_Array_Demangle( \
207 itk::Point, double, 3, 3, o, f, r \
209 else cpPlugins_Image_Array_Demangle( \
210 itk::CovariantVector, float, 3, 3, o, f, r \
212 else cpPlugins_Image_Array_Demangle( \
213 itk::CovariantVector, double, 3, 3, o, f, r \
215 else cpPlugins_Image_Array_Demangle( \
216 itk::SymmetricSecondRankTensor, float, 3, 3, o, f, r \
218 else cpPlugins_Image_Array_Demangle( \
219 itk::SymmetricSecondRankTensor, double, 3, 3, o, f, r \
221 else cpPlugins_Image_Demangle( \
222 itk::DiffusionTensor3D< float >, 3, o, f, r \
224 else cpPlugins_Image_Demangle( \
225 itk::DiffusionTensor3D< double >, 3, o, f, r \
227 else r = this->_DemangleImagePixel( 3, o ); \
229 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
231 cpPlugins_Image_Demangle( \
232 itk::RGBPixel< char >, 4, o, f, r \
234 else cpPlugins_Image_Demangle( \
235 itk::RGBPixel< short >, 4, o, f, r \
237 else cpPlugins_Image_Demangle( \
238 itk::RGBPixel< unsigned char >, 4, o, f, r \
240 else cpPlugins_Image_Demangle( \
241 itk::RGBPixel< unsigned short >, 4, o, f, r \
243 else cpPlugins_Image_Demangle( \
244 itk::RGBAPixel< char >, 4, o, f, r \
246 else cpPlugins_Image_Demangle( \
247 itk::RGBAPixel< short >, 4, o, f, r \
249 else cpPlugins_Image_Demangle( \
250 itk::RGBAPixel< unsigned char >, 4, o, f, r \
252 else cpPlugins_Image_Demangle( \
253 itk::RGBAPixel< unsigned short >, 4, o, f, r \
255 else cpPlugins_Image_Array_Demangle( \
256 itk::Vector, float, 4, 4, o, f, r \
258 else cpPlugins_Image_Array_Demangle( \
259 itk::Vector, double, 4, 4, o, f, r \
261 else cpPlugins_Image_Array_Demangle( \
262 itk::Point, float, 4, 4, o, f, r \
264 else cpPlugins_Image_Array_Demangle( \
265 itk::Point, double, 4, 4, o, f, r \
267 else cpPlugins_Image_Array_Demangle( \
268 itk::CovariantVector, float, 4, 4, o, f, r \
270 else cpPlugins_Image_Array_Demangle( \
271 itk::CovariantVector, double, 4, 4, o, f, r \
273 else cpPlugins_Image_Array_Demangle( \
274 itk::SymmetricSecondRankTensor, float, 4, 4, o, f, r \
276 else cpPlugins_Image_Array_Demangle( \
277 itk::SymmetricSecondRankTensor, double, 4, 4, o, f, r \
279 else r = this->_DemangleImagePixel( 4, o ); \
283 std::string( #c ) + \
284 std::string( ": Image dimension not supported." ); \
287 std::string c::_DemangleImagePixel( \
288 unsigned int d, itk::DataObject* o \
291 std::string r = ""; \
294 cpPlugins_Image_Demangle( \
297 else cpPlugins_Image_Demangle( \
300 else cpPlugins_Image_Demangle( \
303 else cpPlugins_Image_Demangle( \
306 else cpPlugins_Image_Demangle( \
307 unsigned char, 1, o, f, r \
309 else cpPlugins_Image_Demangle( \
310 unsigned short, 1, o, f, r \
312 else cpPlugins_Image_Demangle( \
313 unsigned int, 1, o, f, r \
315 else cpPlugins_Image_Demangle( \
316 unsigned long, 1, o, f, r \
318 else cpPlugins_Image_Demangle( \
321 else cpPlugins_Image_Demangle( \
324 else cpPlugins_Image_Demangle( \
325 std::complex< float >, 1, o, f, r \
327 else cpPlugins_Image_Demangle( \
328 std::complex< double >, 1, o, f, r \
330 else cpPlugins_Image_Demangle( \
331 itk::Offset< 1 >, 1, o, f, r \
333 else r = std::string( #c ) + std::string( ": Image type." ); \
337 cpPlugins_Image_Demangle( \
340 else cpPlugins_Image_Demangle( \
343 else cpPlugins_Image_Demangle( \
346 else cpPlugins_Image_Demangle( \
349 else cpPlugins_Image_Demangle( \
350 unsigned char, 2, o, f, r \
352 else cpPlugins_Image_Demangle( \
353 unsigned short, 2, o, f, r \
355 else cpPlugins_Image_Demangle( \
356 unsigned int, 2, o, f, r \
358 else cpPlugins_Image_Demangle( \
359 unsigned long, 2, o, f, r \
361 else cpPlugins_Image_Demangle( \
364 else cpPlugins_Image_Demangle( \
367 else cpPlugins_Image_Demangle( \
368 std::complex< float >, 2, o, f, r \
370 else cpPlugins_Image_Demangle( \
371 std::complex< double >, 2, o, f, r \
373 else cpPlugins_Image_Demangle( \
374 itk::Offset< 2 >, 2, o, f, r \
376 else r = std::string( #c ) + std::string( ": Image type." ); \
380 cpPlugins_Image_Demangle( \
383 else cpPlugins_Image_Demangle( \
386 else cpPlugins_Image_Demangle( \
389 else cpPlugins_Image_Demangle( \
392 else cpPlugins_Image_Demangle( \
393 unsigned char, 3, o, f, r \
395 else cpPlugins_Image_Demangle( \
396 unsigned short, 3, o, f, r \
398 else cpPlugins_Image_Demangle( \
399 unsigned int, 3, o, f, r \
401 else cpPlugins_Image_Demangle( \
402 unsigned long, 3, o, f, r \
404 else cpPlugins_Image_Demangle( \
407 else cpPlugins_Image_Demangle( \
410 else cpPlugins_Image_Demangle( \
411 std::complex< float >, 3, o, f, r \
413 else cpPlugins_Image_Demangle( \
414 std::complex< double >, 3, o, f, r \
416 else cpPlugins_Image_Demangle( \
417 itk::Offset< 3 >, 3, o, f, r \
419 else r = std::string( #c ) + std::string( ": Image type." ); \
423 cpPlugins_Image_Demangle( \
426 else cpPlugins_Image_Demangle( \
429 else cpPlugins_Image_Demangle( \
432 else cpPlugins_Image_Demangle( \
435 else cpPlugins_Image_Demangle( \
436 unsigned char, 4, o, f, r \
438 else cpPlugins_Image_Demangle( \
439 unsigned short, 4, o, f, r \
441 else cpPlugins_Image_Demangle( \
442 unsigned int, 4, o, f, r \
444 else cpPlugins_Image_Demangle( \
445 unsigned long, 4, o, f, r \
447 else cpPlugins_Image_Demangle( \
450 else cpPlugins_Image_Demangle( \
453 else cpPlugins_Image_Demangle( \
454 std::complex< float >, 4, o, f, r \
456 else cpPlugins_Image_Demangle( \
457 std::complex< double >, 4, o, f, r \
459 else cpPlugins_Image_Demangle( \
460 itk::Offset< 4 >, 4, o, f, r \
462 else r = std::string( #c ) + std::string( ": Image type." ); \
466 std::string( #c ) + \
467 std::string( ": Image dimension not supported." ); \
471 // -------------------------------------------------------------------------
472 #define cpPlugins_Image_Demangle_Methods_Code_Only_Scalars( c, f ) \
473 std::string c::_DemangleImageDimension( itk::DataObject* o ) \
475 std::string r = ""; \
476 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \
477 r = this->_DemangleImagePixel( 1, o ); \
478 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \
479 r = this->_DemangleImagePixel( 2, o ); \
480 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \
481 r = this->_DemangleImagePixel( 3, o ); \
482 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \
483 r = this->_DemangleImagePixel( 4, o ); \
486 std::string( #c ) + \
487 std::string( ": Image dimension not supported." ); \
490 std::string c::_DemangleImagePixel( \
491 unsigned int d, itk::DataObject* o \
494 std::string r = ""; \
497 cpPlugins_Image_Demangle( \
500 else cpPlugins_Image_Demangle( \
503 else cpPlugins_Image_Demangle( \
506 else cpPlugins_Image_Demangle( \
509 else cpPlugins_Image_Demangle( \
510 unsigned char, 1, o, f, r \
512 else cpPlugins_Image_Demangle( \
513 unsigned short, 1, o, f, r \
515 else cpPlugins_Image_Demangle( \
516 unsigned int, 1, o, f, r \
518 else cpPlugins_Image_Demangle( \
519 unsigned long, 1, o, f, r \
521 else cpPlugins_Image_Demangle( \
524 else cpPlugins_Image_Demangle( \
527 else r = std::string( #c ) + std::string( ": Image type." ); \
531 cpPlugins_Image_Demangle( \
534 else cpPlugins_Image_Demangle( \
537 else cpPlugins_Image_Demangle( \
540 else cpPlugins_Image_Demangle( \
543 else cpPlugins_Image_Demangle( \
544 unsigned char, 2, o, f, r \
546 else cpPlugins_Image_Demangle( \
547 unsigned short, 2, o, f, r \
549 else cpPlugins_Image_Demangle( \
550 unsigned int, 2, o, f, r \
552 else cpPlugins_Image_Demangle( \
553 unsigned long, 2, o, f, r \
555 else cpPlugins_Image_Demangle( \
558 else cpPlugins_Image_Demangle( \
561 else r = std::string( #c ) + std::string( ": Image type." ); \
565 cpPlugins_Image_Demangle( \
568 else cpPlugins_Image_Demangle( \
571 else cpPlugins_Image_Demangle( \
574 else cpPlugins_Image_Demangle( \
577 else cpPlugins_Image_Demangle( \
578 unsigned char, 3, o, f, r \
580 else cpPlugins_Image_Demangle( \
581 unsigned short, 3, o, f, r \
583 else cpPlugins_Image_Demangle( \
584 unsigned int, 3, o, f, r \
586 else cpPlugins_Image_Demangle( \
587 unsigned long, 3, o, f, r \
589 else cpPlugins_Image_Demangle( \
592 else cpPlugins_Image_Demangle( \
595 else r = std::string( #c ) + std::string( ": Image type." ); \
599 cpPlugins_Image_Demangle( \
602 else cpPlugins_Image_Demangle( \
605 else cpPlugins_Image_Demangle( \
608 else cpPlugins_Image_Demangle( \
611 else cpPlugins_Image_Demangle( \
612 unsigned char, 4, o, f, r \
614 else cpPlugins_Image_Demangle( \
615 unsigned short, 4, o, f, r \
617 else cpPlugins_Image_Demangle( \
618 unsigned int, 4, o, f, r \
620 else cpPlugins_Image_Demangle( \
621 unsigned long, 4, o, f, r \
623 else cpPlugins_Image_Demangle( \
626 else cpPlugins_Image_Demangle( \
629 else r = std::string( #c ) + std::string( ": Image type." ); \
633 std::string( #c ) + \
634 std::string( ": Image dimension not supported." ); \
638 #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__