X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FProcessObject.h;h=d25516d73c9d692f1204da9935e178159d7d18ac;hb=75740198fa0c55f8fdcd8b33ddff00071c893a94;hp=a9779282c8a59e37973504e1ec04730a4bf2a5ae;hpb=d33ff8f25fd903eca28c2f088adc8f68e7738135;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/ProcessObject.h b/lib/cpPlugins/Interface/ProcessObject.h index a977928..d25516d 100644 --- a/lib/cpPlugins/Interface/ProcessObject.h +++ b/lib/cpPlugins/Interface/ProcessObject.h @@ -1,12 +1,13 @@ #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ -#include #include #include #include #include +#include + namespace cpPlugins { namespace Interface @@ -26,8 +27,6 @@ namespace cpPlugins itkTypeMacro( ProcessObject, Object ); public: - virtual std::string GetClassName( ) const; - virtual std::string GetClassType( ) const; virtual const Parameters& GetDefaultParameters( ) const; virtual void SetParameters( const Parameters& params ); @@ -47,17 +46,20 @@ namespace cpPlugins ProcessObject( ); virtual ~ProcessObject( ); - virtual itk::DataObject* _GetInput( unsigned int idx ); - virtual void _SetOutput( unsigned int idx, itk::DataObject* dobj ); - template< class O > - void _MakeOutput( unsigned int idx ) - { - if( idx >= this->m_Outputs.size( ) ) - return; - this->m_Outputs[ idx ] = O::New( ); - this->m_Outputs[ idx ]->SetSource( this ); - } + inline void _MakeOutput( unsigned int idx ); + + template< class T > + inline T* _Input( unsigned int idx ); + + template< class T > + inline const T* _Input( unsigned int idx ) const; + + template< class T > + inline T* _Output( unsigned int idx ); + + template< class T > + inline const T* _Output( unsigned int idx ) const; virtual std::string _GenerateData( ) = 0; @@ -79,6 +81,568 @@ namespace cpPlugins } // ecapseman +#include + + +// ------------------------------------------------------------------------- +/* TODO + #define cpPlugins_Image_Demangle_Methods( c ) \ + std::string _DemangleImageDimension( itk::DataObject* o ); \ + std::string _DemangleImagePixel( unsigned int d, itk::DataObject* o ); + + // ------------------------------------------------------------------------- + #define cpPlugins_Image_Demangle_Methods_Code( c, f ) \ + std::string c::_DemangleImageDimension( itk::DataObject* o ) \ + { \ + std::string r = ""; \ + if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \ + { \ + cpPlugins_Image_Array_Demangle( \ + itk::Vector, float, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, double, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, float, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, double, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, float, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, double, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, float, 1, 1, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, double, 1, 1, o, f, r \ + ); \ + else r = this->_DemangleImagePixel( 1, o ); \ + } \ + else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \ + { \ + cpPlugins_Image_Demangle( \ + itk::RGBPixel< char >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< short >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< unsigned char >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< unsigned short >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< char >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< short >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< unsigned char >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< unsigned short >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, float, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, double, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, float, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, double, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, float, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, double, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, float, 2, 2, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, double, 2, 2, o, f, r \ + ); \ + else r = this->_DemangleImagePixel( 2, o ); \ + } \ + else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \ + { \ + cpPlugins_Image_Demangle( \ + itk::RGBPixel< char >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< short >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< unsigned char >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< unsigned short >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< char >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< short >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< unsigned char >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< unsigned short >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, float, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, double, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, float, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, double, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, float, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, double, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, float, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, double, 3, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::DiffusionTensor3D< float >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::DiffusionTensor3D< double >, 3, o, f, r \ + ); \ + else r = this->_DemangleImagePixel( 3, o ); \ + } \ + else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \ + { \ + cpPlugins_Image_Demangle( \ + itk::RGBPixel< char >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< short >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< unsigned char >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBPixel< unsigned short >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< char >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< short >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< unsigned char >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::RGBAPixel< unsigned short >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, float, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Vector, double, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, float, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::Point, double, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, float, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::CovariantVector, double, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, float, 4, 4, o, f, r \ + ); \ + else cpPlugins_Image_Array_Demangle( \ + itk::SymmetricSecondRankTensor, double, 4, 4, o, f, r \ + ); \ + else r = this->_DemangleImagePixel( 4, o ); \ + } \ + else \ + r = \ + std::string( #c ) + \ + std::string( ": Image dimension not supported." ); \ + return( r ); \ + } \ + std::string c::_DemangleImagePixel( \ + unsigned int d, itk::DataObject* o \ + ) \ + { \ + std::string r = ""; \ + if( d == 1 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< float >, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< double >, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::Offset< 1 >, 1, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else if( d == 2 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< float >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< double >, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::Offset< 2 >, 2, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else if( d == 3 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< float >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< double >, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::Offset< 3 >, 3, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else if( d == 4 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< float >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + std::complex< double >, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + itk::Offset< 4 >, 4, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else \ + r = \ + std::string( #c ) + \ + std::string( ": Image dimension not supported." ); \ + return( r ); \ + } + + // ------------------------------------------------------------------------- + #define cpPlugins_Image_Demangle_Methods_Code_Only_Scalars( c, f ) \ + std::string c::_DemangleImageDimension( itk::DataObject* o ) \ + { \ + std::string r = ""; \ + if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL ) \ + r = this->_DemangleImagePixel( 1, o ); \ + else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL ) \ + r = this->_DemangleImagePixel( 2, o ); \ + else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL ) \ + r = this->_DemangleImagePixel( 3, o ); \ + else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL ) \ + r = this->_DemangleImagePixel( 4, o ); \ + else \ + r = \ + std::string( #c ) + \ + std::string( ": Image dimension not supported." ); \ + return( r ); \ + } \ + std::string c::_DemangleImagePixel( \ + unsigned int d, itk::DataObject* o \ + ) \ + { \ + std::string r = ""; \ + if( d == 1 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 1, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 1, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else if( d == 2 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 2, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 2, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else if( d == 3 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 3, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 3, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else if( d == 4 ) \ + { \ + cpPlugins_Image_Demangle( \ + char, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + short, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + int, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + long, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned char, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned short, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned int, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + unsigned long, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + float, 4, o, f, r \ + ); \ + else cpPlugins_Image_Demangle( \ + double, 4, o, f, r \ + ); \ + else r = std::string( #c ) + std::string( ": Image type." ); \ + } \ + else \ + r = \ + std::string( #c ) + \ + std::string( ": Image dimension not supported." ); \ + return( r ); \ + } +*/ + #endif // __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ // eof - $RCSfile$