]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Plugins/ImageWriter.cxx
...
[cpPlugins.git] / lib / cpPlugins / Plugins / ImageWriter.cxx
index 9c99f2c8490ee2c5bcedb72a80423519fc176e8c..59dbe83795e526d3f4f041e8a3d75725e20a216b 100644 (file)
@@ -1,27 +1,8 @@
 #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( )
@@ -46,57 +27,44 @@ cpPlugins::Plugins::ImageWriter::
 std::string cpPlugins::Plugins::ImageWriter::
 _GenerateData( )
 {
-  itk::DataObject* i = this->m_Inputs[ 0 ]->GetITKDataObject( );
+  cpPlugins::Interface::Image* image =
+    this->GetInput< 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 )
   {
@@ -105,7 +73,7 @@ _GD1( itk::DataObject* i )
 
   } // fi
   writer->SetFileName( fname );
-  writer->SetInput( dynamic_cast< _I* >( i ) );
+  writer->SetInput( dynamic_cast< I* >( image ) );
   try
   {
     writer->Update( );