#include // TODO: interesting... #define ITK_MANUAL_INSTANTIATION #include #include #include // ------------------------------------------------------------------------- #define cpPlugins_Plugins_ImageWriter_Dimension( ret, d, dobj, func ) \ if( dynamic_cast< itk::ImageBase< d >* >( dobj ) != NULL ) \ ret = this->func< d >( ) // ------------------------------------------------------------------------- #define cpPlugins_Plugins_ImageWriter_Pixel( ret, p, d, dobj, func ) \ if( dynamic_cast< itk::Image< p, d >* >( dobj ) != NULL ) \ ret = this->func< p, d >( ) // ------------------------------------------------------------------------- #define cpPlugins_Plugins_ImageWriter_RGB( ret, p, d, dobj, func ) \ if( dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( dobj ) != NULL ) \ ret = this->func< itk::RGBPixel< p >, d >( ) // ------------------------------------------------------------------------- cpPlugins::Plugins::ImageWriter:: ImageWriter( ) : Superclass( ) { this->SetNumberOfInputs( 1 ); this->m_DefaultParameters[ "FileName" ] = TParameter( "string", "no_file_name" ); } // ------------------------------------------------------------------------- cpPlugins::Plugins::ImageWriter:: ~ImageWriter( ) { } // ------------------------------------------------------------------------- std::string cpPlugins::Plugins::ImageWriter:: GetClassName( ) const { return( "cpPlugins::Plugins::ImageWriter" ); } // ------------------------------------------------------------------------- std::string cpPlugins::Plugins::ImageWriter:: _GenerateData( ) { itk::DataObject* dobj = this->_GetInput( 0 ); std::string ret = "itk::Image dimension not supported."; cpPlugins_Plugins_ImageWriter_Dimension( ret, 1, dobj, _GenerateData0 ); else cpPlugins_Plugins_ImageWriter_Dimension( ret, 2, dobj, _GenerateData0 ); else cpPlugins_Plugins_ImageWriter_Dimension( ret, 3, dobj, _GenerateData0 ); else cpPlugins_Plugins_ImageWriter_Dimension( ret, 4, dobj, _GenerateData0 ); return( ret ); } // ------------------------------------------------------------------------- template< unsigned int D > std::string cpPlugins::Plugins::ImageWriter:: _GenerateData0( ) { itk::ImageBase< D >* img = dynamic_cast< itk::ImageBase< D >* >( this->_GetInput( 0 ) ); std::string ret = "itk::Image pixel type not supported"; cpPlugins_Plugins_ImageWriter_Pixel( ret, char, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, short, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, int, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, long, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned char, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned short, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned int, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned long, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, float, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_Pixel( ret, double, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, char, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, short, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, int, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, long, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned char, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned short, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned int, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned long, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, float, D, img, _GenerateData1 ); else cpPlugins_Plugins_ImageWriter_RGB( ret, double, D, img, _GenerateData1 ); return( ret ); } // ------------------------------------------------------------------------- template< class P, unsigned int D > std::string cpPlugins::Plugins::ImageWriter:: _GenerateData1( ) { typedef itk::Image< P, D > _TImage; typedef itk::ImageFileWriter< _TImage > _TImageWriter; TParameters::const_iterator fIt; // Get image pixelType fIt = this->m_Parameters.find( "FileName" ); if( fIt == this->m_Parameters.end( ) ) fIt = this->m_DefaultParameters.find( "FileName" ); _TImageWriter* writer = dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) ); if( writer == NULL ) { this->m_Writer = _TImageWriter::New( ); writer = dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) ); } // fi writer->SetFileName( fIt->second.second ); writer->SetInput( dynamic_cast< _TImage* >( this->_GetInput( 0 ) ) ); try { writer->Update( ); } catch( itk::ExceptionObject& err ) { return( err.GetDescription( ) ); } // yrt return( "" ); } // eof - $RCSfile$