#include <cpPlugins/Plugins/ImageWriter.h>
+#include <cpPlugins/Interface/Image.h>
-#undef ITK_MANUAL_INSTANTIATION
-#include <itkImage.h>
-#include <itkRGBPixel.h>
#include <itkImageFileWriter.h>
-// -------------------------------------------------------------------------
-#define cpPlugins_ImageWriter_Dimension( r, d, i, f ) \
- if( dynamic_cast< itk::ImageBase< d >* >( i ) != NULL ) \
- r = this->f< d >( i )
-
-// -------------------------------------------------------------------------
-#define cpPlugins_ImageWriter_Pixel( r, p, d, i, f ) \
- if( dynamic_cast< itk::Image< p, d >* >( i ) != NULL ) \
- r = this->f< p, d >( i )
-
-// -------------------------------------------------------------------------
-#define cpPlugins_ImageWriter_RGB( r, p, d, i, f ) \
- if( \
- dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( i ) != NULL \
- ) \
- r = this->f< itk::RGBPixel< p >, d >( i )
-
// -------------------------------------------------------------------------
cpPlugins::Plugins::ImageWriter::
ImageWriter( )
std::string cpPlugins::Plugins::ImageWriter::
_GenerateData( )
{
- itk::DataObject* i = this->m_Inputs[ 0 ]->GetITKDataObject( );
+ cpPlugins::Interface::Image* image =
+ this->_Input< cpPlugins::Interface::Image >( 0 );
+ if( image == NULL )
+ return( "ImageWriter: No input image." );
+
+ itk::DataObject* itk_image = NULL;
+ std::string r = "";
+ cpPlugins_Image_Input_Demangle_Dimension_AllTypes(
+ 2, image, itk_image, r, _RealGD
+ );
+ else cpPlugins_Image_Input_Demangle_Dimension_AllTypes(
+ 3, image, itk_image, r, _RealGD
+ );
+ else cpPlugins_Image_Input_Demangle_Dimension_AllTypes(
+ 4, image, itk_image, r, _RealGD
+ );
+#ifndef _WIN32 // win32: Nested loops error ????
+ else cpPlugins_Image_Input_Demangle(
+ itk::DiffusionTensor3D< float >, 3, image, itk_image, r, _RealGD
+ );
+ else cpPlugins_Image_Input_Demangle(
+ itk::DiffusionTensor3D< double >, 3, image, itk_image, r, _RealGD
+ );
+#endif // _WIN32
+ else r = "ImageWriter: Input image type not supported.";
- std::string r = "ImageWriter: Image dimension not supported.";
- cpPlugins_ImageWriter_Dimension ( r, 1, i, _GD0 );
- else cpPlugins_ImageWriter_Dimension( r, 2, i, _GD0 );
- else cpPlugins_ImageWriter_Dimension( r, 3, i, _GD0 );
return( r );
}
// -------------------------------------------------------------------------
-template< unsigned int D >
+template< class I >
std::string cpPlugins::Plugins::ImageWriter::
-_GD0( itk::DataObject* i )
+_RealGD( itk::DataObject* image )
{
- std::string r = "ImageWriter: 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( itk::DataObject* i )
-{
- typedef itk::Image< P, D > _I;
- typedef itk::ImageFileWriter< _I > _W;
-
+ typedef itk::ImageFileWriter< I > _W;
+
// Get filename
- using namespace cpPlugins::Interface;
- Parameters::TString fname =
- this->m_Parameters.GetValueAsString( "FileName" );
-
+ std::string fname = this->m_Parameters.GetValueAsString( "FileName" );
_W* writer = dynamic_cast< _W* >( this->m_RealProcessObject.GetPointer( ) );
if( writer == NULL )
{
} // fi
writer->SetFileName( fname );
- writer->SetInput( dynamic_cast< _I* >( i ) );
+ writer->SetInput( dynamic_cast< I* >( image ) );
try
{
writer->Update( );