#include #include #define ITK_MANUAL_INSTANTIATION #include #include // ------------------------------------------------------------------------- #define cpPlugins_ImageWriter_Dimension( r, d, o, f ) \ if( dynamic_cast< itk::ImageBase< d >* >( o ) != NULL ) \ r = this->f< d >( ) // ------------------------------------------------------------------------- #define cpPlugins_ImageWriter_Pixel( r, p, d, o, f ) \ if( dynamic_cast< itk::Image< p, d >* >( o ) != NULL ) \ r = this->f< p, d >( ) // ------------------------------------------------------------------------- #define cpPlugins_ImageWriter_RGB( r, p, d, o, f ) \ if( \ dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( o ) != NULL \ ) \ r = this->f< itk::RGBPixel< p >, d >( ) // ------------------------------------------------------------------------- std::string cpPlugins::Plugins::ImageWriter:: GetClassName( ) const { return( "cpPlugins::Plugins::ImageWriter" ); } // ------------------------------------------------------------------------- cpPlugins::Plugins::ImageWriter:: ImageWriter( ) : Superclass( ) { this->SetNumberOfInputs( 1 ); using namespace cpPlugins::Interface; this->m_DefaultParameters.Configure( Parameters::String, "FileName" ); this->m_Parameters = this->m_DefaultParameters; } // ------------------------------------------------------------------------- cpPlugins::Plugins::ImageWriter:: ~ImageWriter( ) { } // ------------------------------------------------------------------------- std::string cpPlugins::Plugins::ImageWriter:: _GenerateData( ) { itk::DataObject* o = this->_GetInput( 0 ); std::string r = "cpPlugins::Plugins::ImageWriter: itk::Image dimension not supported."; cpPlugins_ImageWriter_Dimension( r, 1, o, _GD0 ); else cpPlugins_ImageWriter_Dimension( r, 2, o, _GD0 ); else cpPlugins_ImageWriter_Dimension( r, 3, o, _GD0 ); else cpPlugins_ImageWriter_Dimension( r, 4, o, _GD0 ); return( r ); } // ------------------------------------------------------------------------- template< unsigned int D > std::string cpPlugins::Plugins::ImageWriter:: _GD0( ) { itk::ImageBase< D >* i = dynamic_cast< itk::ImageBase< D >* >( this->_GetInput( 0 ) ); std::string r = "cpPlugins::Plugins::ImageWriter: itk::Image pixel type not supported"; cpPlugins_ImageWriter_Pixel( r, char, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, short, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, int, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, long, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, unsigned char, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, unsigned short, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, unsigned int, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, unsigned long, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, float, D, i, _GD1 ); else cpPlugins_ImageWriter_Pixel( r, double, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, char, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, short, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, int, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, long, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, unsigned char, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, unsigned short, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, unsigned int, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, unsigned long, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, float, D, i, _GD1 ); else cpPlugins_ImageWriter_RGB( r, double, D, i, _GD1 ); return( r ); } // ------------------------------------------------------------------------- template< class P, unsigned int D > std::string cpPlugins::Plugins::ImageWriter:: _GD1( ) { typedef itk::Image< P, D > _TImage; typedef itk::ImageFileWriter< _TImage > _TWriter; // Get filename using namespace cpPlugins::Interface; Parameters::TString fname = this->m_Parameters.GetValueAsString( "FileName" ); _TWriter* writer = dynamic_cast< _TWriter* >( this->m_RealProcessObject.GetPointer( ) ); if( writer == NULL ) { this->m_RealProcessObject = _TWriter::New( ); writer = dynamic_cast< _TWriter* >( this->m_RealProcessObject.GetPointer( ) ); } // fi writer->SetFileName( fname ); writer->SetInput( dynamic_cast< _TImage* >( this->_GetInput( 0 ) ) ); try { writer->Update( ); } catch( itk::ExceptionObject& err ) { return( err.GetDescription( ) ); } // yrt return( "" ); } // eof - $RCSfile$