X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FProcessObject.h;h=61ea66aa7b0f66b5be810341685535c034762edf;hb=6df7b3a0946edcecfe55509d0b77d757d76a35ab;hp=f4c80ae21a7fcf712406b4adc88e3a2f23f47603;hpb=cb833d2fface96e020fe91584d2206860a8174ee;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/ProcessObject.h b/lib/cpPlugins/Interface/ProcessObject.h index f4c80ae..61ea66a 100644 --- a/lib/cpPlugins/Interface/ProcessObject.h +++ b/lib/cpPlugins/Interface/ProcessObject.h @@ -1,12 +1,15 @@ #ifndef __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ #define __CPPLUGINS__INTERFACE__PROCESSOBJECT__H__ -#include -#include -#include #include #include #include +#include + +#include + +#define ITK_MANUAL_INSTANTIATION +#include namespace cpPlugins { @@ -23,17 +26,12 @@ namespace cpPlugins typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; - typedef std::pair< std::string, std::string > TParameter; - typedef std::map< std::string, TParameter > TParameters; - public: itkTypeMacro( ProcessObject, Object ); public: - virtual std::string GetClassName( ) const; - virtual std::string GetClassType( ) const; - virtual const TParameters& GetDefaultParameters( ) const; - virtual void SetParameters( const TParameters& params ); + virtual const Parameters& GetDefaultParameters( ) const; + virtual void SetParameters( const Parameters& params ); virtual unsigned int GetNumberOfInputs( ) const; virtual unsigned int GetNumberOfOutputs( ) const; @@ -51,17 +49,14 @@ 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 ); - } + void _MakeOutput( unsigned int idx ) + { + if( idx >= this->m_Outputs.size( ) ) + return; + this->m_Outputs[ idx ] = O::New( ); + this->m_Outputs[ idx ]->SetSource( this ); + } virtual std::string _GenerateData( ) = 0; @@ -72,8 +67,8 @@ namespace cpPlugins protected: itk::ProcessObject::Pointer m_RealProcessObject; - TParameters m_DefaultParameters; - TParameters m_Parameters; + Parameters m_DefaultParameters; + Parameters m_Parameters; std::vector< DataObject::Pointer > m_Inputs; std::vector< DataObject::Pointer > m_Outputs; @@ -83,6 +78,563 @@ namespace cpPlugins } // ecapseman +// ------------------------------------------------------------------------- +#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$