]> Creatis software - creaImageIO.git/blobdiff - bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx
#3123creaImageIO Bug New Normal - branch changestoITK3and4
[creaImageIO.git] / bbtk / src / bbcreaImageIOItkImagesChooserDialogBox.cxx
index 9c77a1de377b1cd7c416414c1b04e61aa985cd4b..434b71972c177a65d4b494bac8ad207febb88de3 100644 (file)
 #include "bbcreaImageIOItkImagesChooserDialogBox.h"
 #include "bbcreaImageIOPackage.h"
 
+#include "itkImage.h"
+#include "itkImportImageFilter.h"
+
+/*
 // -------------------------------------------------------------------------
 // LFV: avoid itk::Concept check on 4d or superior images
 #define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di )            \
-  if( t == typeid( itk::Image< ty, di > ) )                       \
+  if( t == typeid( itk::Image< ty, di >* ) )                       \
   {                                                               \
     this->Export< itk::Image< ty, di > >( );                      \
     this->ExportVTK< itk::Image< ty, di > >( );                   \
   }
+*/
+
+// -------------------------------------------------------------------------
+// LFV: avoid itk::Concept check on 4d or superior images
+#define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di )            \
+  if( t == typeid( itk::Image< ty, di >* ) )                      \
+  {                                                               \
+    this->Export< ty , di  >( );                      \
+    this->ExportVTK< itk::Image< ty, di > >( );                   \
+  }
+
+
 // -------------------------------------------------------------------------
 
 namespace bbcreaImageIO
@@ -97,27 +113,91 @@ void ItkImagesChooserDialogBox::Process()
     delete dlg;
 }
 
-template <class TImage>
+
+//template <class TImage>
+template <typename  ty, size_t di>
 void ItkImagesChooserDialogBox::Export()
 {
-   if (dlg->getImagesSelected().size() == 1)
-   { 
+       typedef itk::Image<ty,di> TImage;
+
+printf("EED ItkImagesChooserDialogBox::Export Start \n");
+       if (dlg->getImagesSelected().size() == 1)
+       { 
+printf("EED ItkImagesChooserDialogBox::Export 1\n");
                bbSetOutputOut( dlg->getTemplatedImagesSelected<TImage>().front().GetPointer() ); 
-   } 
-   else if (dlg->getImagesSelected().size() > 1)
-   { 
-      OutputImagesITKType outVect;
-
-      typename  std::vector<typename TImage::Pointer> tempImgs= dlg->getTemplatedImagesSelected<TImage>();
-      typename std::vector<typename TImage::Pointer>::iterator it = tempImgs.begin();
-      for(;it != tempImgs.end(); ++it)
-      {
-         outVect.push_back( (*it).GetPointer() );
-      }
-      bbSetOutputOutIImages( outVect); 
-   } 
-   else
-   {
+       } else if (dlg->getImagesSelected().size() > 1){ 
+printf("EED ItkImagesChooserDialogBox::Export 2\n");
+               OutputImagesITKType outVect;
+               typename  std::vector<typename TImage::Pointer> tempImgs= dlg->getTemplatedImagesSelected<TImage>();
+               typename std::vector<typename TImage::Pointer>::iterator it = tempImgs.begin();
+               for(;it != tempImgs.end(); ++it)
+               {
+                       outVect.push_back( (*it).GetPointer() );
+               } // for
+               bbSetOutputOutIImages( outVect); 
+
+//EED creater one 3D image from 2D list
+//             const unsigned int Dimension = 3;
+//             typedef itk::RGBPixel< unsigned char > RGBPixelType;
+//             typedef itk::Image< RGBPixelType, Dimension > RGBImageType;
+//             typedef itk::ImportImageFilter< RGBPixelType, Dimension > ImportFilterType;
+
+//             typedef itk::RGBPixel< ty > RGBPixelType;
+               typedef  ty RGBPixelType;
+               typedef itk::ImportImageFilter< ty , di > ImportFilterType;
+     typename ImportFilterType::Pointer importFilter = ImportFilterType::New();
+
+
+               typename TImage::SizeType imsize;
+//             imsize[0] = img.width();
+//             imsize[1] = img.height();
+               imsize[0] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[0];
+               imsize[1] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[1];
+               imsize[2] = tempImgs.size();
+printf("EED ItkImagesChooserDialogBox::Export 2.10\n");
+
+               typename ImportFilterType::IndexType start;
+               start.Fill( 0 );
+               typename ImportFilterType::RegionType region;
+               region.SetIndex( start );
+               region.SetSize( imsize );
+               importFilter->SetRegion( region );
+
+//             const itk::SpacePrecisionType origin[ di ] = { 0.0, 0.0, 0.0 };
+               const itk::SpacePrecisionType origin[ 3 ] = { 0.0, 0.0, 0.0 };
+               importFilter->SetOrigin( origin );
+
+//             const itk::SpacePrecisionType spacing[ di ] = { 1.0, 1.0, 1.0 };
+               const itk::SpacePrecisionType spacing[ 3 ] = { 1.0, 1.0, 1.0 };
+               importFilter->SetSpacing( spacing );
+               const unsigned long int numberOfPixels2D = imsize[0]*imsize[1];
+               const unsigned long int numberOfPixels3D = imsize[0]*imsize[1]*imsize[2];
+
+               RGBPixelType * localBuffer      = new RGBPixelType[ numberOfPixels3D ];
+               RGBPixelType * tmpLocalBuffer   = localBuffer;
+printf("EED ItkImagesChooserDialogBox::Export 2.20\n");
+
+               it = tempImgs.begin();
+               for(;it != tempImgs.end(); ++it)
+               {               
+printf("EED ItkImagesChooserDialogBox::Export 2.30\n");
+                       memcpy(tmpLocalBuffer, (*it).GetPointer()->GetBufferPointer(), numberOfPixels2D);
+                       tmpLocalBuffer = tmpLocalBuffer + numberOfPixels2D;
+               } // for
+
+               const bool importImageFilterWillOwnTheBuffer = true;
+               importFilter->SetImportPointer( localBuffer , numberOfPixels3D , importImageFilterWillOwnTheBuffer );
+importFilter->Update();
+importFilter->Register();
+printf("EED ItkImagesChooserDialogBox::Export 2.40\n");
+
+//         bbSetOutputOut( (*tempImgs.begin()).GetPointer() ); 
+//         bbSetOutputOut( importFilter->GetOutput().unsafe_get<TImage*>() ); 
+           bbSetOutputOut( importFilter->GetOutput() ); 
+printf("EED ItkImagesChooserDialogBox::Export 2.50\n");
+
+   } else {
+printf("EED ItkImagesChooserDialogBox::Export 3\n");
       // warning: passing NULL to non-pointer 
       //bbSetOutputOut( NULL);
       bbSetOutputOut(0); // JPR
@@ -131,10 +211,17 @@ void ItkImagesChooserDialogBox::Export()
      //   reader->Update(); 
         //reader->GetOutput()->Register();
      //  this->bbSetOutputOut(reader->GetOutput());
+
+printf("EED ItkImagesChooserDialogBox::Export End \n");
+
 }
+
+
 template <class TImage>
 void ItkImagesChooserDialogBox::ExportVTK()
 {
+printf("EED ItkImagesChooserDialogBox::ExportVTK Start \n");
+
        // BBTK can support only a vector with same dimensions image.
         if (dlg->getDims().front() < 4)
         { 
@@ -145,40 +232,35 @@ void ItkImagesChooserDialogBox::ExportVTK()
                        dlg->split3Din3Dvtk<TImage>( (*it) );
                  }
                  bbSetOutputOutVImages( dlg->getVtkImagesSelected() ); 
-        } 
-        else if (dlg->getDims().front() == 4)
-        { 
+        } else if (dlg->getDims().front() == 4) { 
                // To Test
                 //  dlg->split4Din3Dvtk("d:/temp2");
                 // bbSetOutputOutVImages( dlg->getVtkImagesSelected()); 
-         } 
-        else
-        {
-                 // NOT IMPLEMENTED YET FOR DIMENSIONS > 4
-       
-        }
-        
+         } else {
+                 // NOT IMPLEMENTED YET FOR DIMENSIONS > 4     
+        } // if dlg
+printf("EED ItkImagesChooserDialogBox::ExportVTK End \n");
 }
+
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 void ItkImagesChooserDialogBox::bbUserSetDefaultValues()
-{
+{ 
 }
+
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 void ItkImagesChooserDialogBox::bbUserInitializeProcessing()
 {
-
 }
+
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 void ItkImagesChooserDialogBox::bbUserFinalizeProcessing()
 {
-
 }
-}
-// EO namespace bbcreaImageIO
+
+// EO namespace bbcreaImageIO