]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Plugins/ImageWriter.cxx
...
[cpPlugins.git] / lib / cpPlugins / Plugins / ImageWriter.cxx
index 3dd319afef43ec75ef6d6476aa57ce70db4c23fc..921df921cdb3149e90494139a07ff8b36573d371 100644 (file)
@@ -1,10 +1,20 @@
 #include <cpPlugins/Plugins/ImageWriter.h>
+#include <cpPlugins/Interface/Image.h>
+
+#include <itkImageFileWriter.h>
 
 // -------------------------------------------------------------------------
 cpPlugins::Plugins::ImageWriter::
 ImageWriter( )
   : Superclass( )
 {
+  this->m_ClassName = "cpPlugins::ImageWriter";
+  this->m_ClassCategory = "ImageWriter";
+  this->SetNumberOfInputs( 1 );
+
+  using namespace cpPlugins::Interface;
+  this->m_DefaultParameters.Configure( Parameters::String, "FileName" );
+  this->m_Parameters = this->m_DefaultParameters;
 }
 
 // -------------------------------------------------------------------------
@@ -15,16 +25,65 @@ cpPlugins::Plugins::ImageWriter::
 
 // -------------------------------------------------------------------------
 std::string cpPlugins::Plugins::ImageWriter::
-GetClassName( ) const
+_GenerateData( )
 {
-  return( "cpPlugins::Plugins::ImageWriter" );
+  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.";
+
+  return( r );
 }
 
 // -------------------------------------------------------------------------
-bool cpPlugins::Plugins::ImageWriter::
-Update( )
+template< class I >
+std::string cpPlugins::Plugins::ImageWriter::
+_RealGD( itk::DataObject* image )
 {
-  return( false );
+  typedef itk::ImageFileWriter< I > _W;
+  
+  // Get filename
+  std::string fname = this->m_Parameters.GetValueAsString( "FileName" );
+  _W* writer = dynamic_cast< _W* >( this->m_RealProcessObject.GetPointer( ) );
+  if( writer == NULL )
+  {
+    this->m_RealProcessObject = _W::New( );
+    writer = dynamic_cast< _W* >( this->m_RealProcessObject.GetPointer( ) );
+
+  } // fi
+  writer->SetFileName( fname );
+  writer->SetInput( dynamic_cast< I* >( image ) );
+  try
+  {
+    writer->Update( );
+  }
+  catch( itk::ExceptionObject& err )
+  {
+    return( "ImageWriter: " + std::string( err.GetDescription( ) ) );
+
+  } // yrt
+  return( "" );
 }
 
 // eof - $RCSfile$