]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOWxISimpleDlg.hpp
*** empty log message ***
[creaImageIO.git] / src / creaImageIOWxISimpleDlg.hpp
index e310a0736c7fe581568e3582964c7c5135bba59c..b2d813d6ddb83a5db0d0a0265e209280c73073d3 100644 (file)
@@ -3,14 +3,20 @@
 #include "creaImageIOWxGimmickReaderDialog.h"
 #include <itkAnalyzeImageIO.h>
 #include <itkImageFileReader.h>
+#include <itkImageSeriesReader.h>
 #include <itkImage.h>
 #include <itkImageSeriesWriter.h>
+#include <itkGDCMImageIO.h>
+#include <itkDICOMSeriesFileNames.h>
 #include <itkNumericSeriesFileNames.h>
-#include "itkImageToVTKImageFilter.h"
+#include <itkVectorImage.h>
+//#include "itkImageToVTKImageFilter.h"
+#include <itkOrientedImage.h>
 #include <vtkImageReader2.h>
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem.hpp>
 #include <boost/utility.hpp>
+#include <creaVtkBasicSlicer.h>
 
 namespace creaImageIO
 {
@@ -74,7 +80,7 @@ namespace creaImageIO
           Connect( gimmickBut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxISimpleDlg::OnReadGimmick ); 
 
           /// \TODO  Button to select Bruker directory
-       
+               m_dicom = true;
        Layout(); 
        
        }
@@ -178,24 +184,21 @@ namespace creaImageIO
                 dlg.ShowModal();
                 if (dlg.GetReturnCode() == wxID_OK)
             {
-       //              infoimage=_T("DICOM: ???_EED_???");
-//EED 07JUIN2010                       dlg.GetSelectedImages(m_results,3);
-                       std::vector<creaImageIO::OutStrGimmick> out;
-                       std::vector<std::string> attr;
-//                             attr.push_back("D0028_0010");
-//                             attr.push_back("D0008_0023");
-//                             attr.push_back("D0008_1070");
-                               dlg.stopReading();
-                               dlg.getSelected(out, attr,true,"");
-//                             crea::VtkBasicSlicer(out.front().img);
-                       //m_results.clear();
-                       int size=out.size();
-                       int ii;
-                       //for (ii=0;ii<size;ii++)
-                       //{
-                               //m_results.push_back(out[ii].img);
-                       //}
-
+                       std::vector<std::string> out;
+                       dlg.stopReading();
+                       dlg.GetSelectedFiles(out);
+                       if(m_dicom)
+                       {
+                               readDicomImg( out);
+                       }
+                       else
+                       {
+                               std::vector<std::string>::iterator ii = out.begin();
+                               for (;ii != out.end();ii++)
+                               {
+                                       readImg( (*ii).c_str() );
+                               }
+                       }
                        dlg.OnExit();
                 }
                 SetReturnCode( dlg.GetReturnCode() );
@@ -256,26 +259,58 @@ namespace creaImageIO
 
 
 
+         template <typename TImage> 
+         void WxISimpleDlg<TImage>::readDicomImg(const std::vector<std::string> &i_names)
+         {
+                 typedef itk::GDCMImageIO GDCMType;
+                 typedef itk::DICOMSeriesFileNames dicnames;
+                 GDCMType::Pointer gdcmIO = GDCMType::New(); 
+                 dicnames::Pointer generator = dicnames::New();
+//               generator->SetInput(i_names);
+                       typedef itk::ImageSeriesReader<TImage> ReaderType; 
+                   typename ReaderType::Pointer reader = ReaderType::New(); 
+                       reader->SetImageIO(gdcmIO);
+                       reader->SetFileNames(i_names);
+               //      reader->SetFileName( i_name ); 
+                       try 
+                       { 
+                               reader->Update(); 
+                       } 
+                       catch( itk::ExceptionObject & err ) 
+                       { 
+                       //      std::cout << "Caught an exception reading" << i_name << ": " << std::endl; 
+                               std::cout << err << " " << __FILE__ << " " << __LINE__ << std::endl; 
+                               throw err; 
+                       } 
+                       catch(...) 
+                       { 
+                               //std::cout << "Error while reading image " << i_name << std::endl; 
+                               throw; 
+                       } 
+                       m_Iresults.push_back(reader->GetOutput()); 
+    
+         }
+
+
+
+
          template <typename TImage> 
          void WxISimpleDlg<TImage>::split3Din3Dvtk()
          {
-                
-                int ii;
                  if ((m_Iresults).size() != 0)
                  {
-
-                         typename TImage::Pointer image = m_Iresults[0];
-                         image->GetImageDimension();
-                         typedef itk::ImageToVTKImageFilter< TImage > ConnectorType;
-                         ConnectorType::Pointer connector = ConnectorType::New();
-                         for(unsigned int i = 0 ;i < m_Iresults.size(); i++)
-                                  {
-                                               connector->SetInput(m_Iresults[i]);
-                                               connector->Update();
-                                               vtkImageData *im = vtkImageData::New();
-                                               im->ShallowCopy(connector->GetOutput());
-                                               m_Vresults.push_back(im);
-                                  }
+                         typedef itk::ImageToVTKImageFilter<  TImage > ConnectorType;
+                         ConnectorType::Pointer          connector = ConnectorType::New();
+             for(unsigned int i = 0 ;i < m_Iresults.size(); i++)
+                     {
+                                       connector->SetInput(m_Iresults[i]);
+                                       connector->GetImporter()->SetDataScalarTypeToUnsignedChar();
+                                       connector->Update();
+                                       vtkImageData *im = vtkImageData::New();
+                                       im->ShallowCopy(connector->GetOutput());
+                                       im->Update();
+                                       m_Vresults.push_back(im);
+                    }
                  }
          }
 
@@ -289,15 +324,20 @@ namespace creaImageIO
                            typename TImage::Pointer image = m_Iresults[0];
                        
                                 // Size and dims for Input Image
-                               typedef itk::Size<4> iSize;
-                               typedef const itk::Size<4>::SizeValueType iSizeVal;
+                               typedef itk::Size<4> iSize; // TO REMOVE
+                               typedef const itk::Size<4>::SizeValueType iSizeVal; // TO REMOVE
                                iSize size = image->GetLargestPossibleRegion().GetSize();
                                iSizeVal *dims_size  = size.GetSize();
 
                                 // Output Type
-                                typedef itk::Image<short,3> ImageOutputType;  
+                                typedef itk::Image<unsigned char,3> ImageOutputType;  
                             typedef itk::ImageSeriesWriter<TImage, ImageOutputType >  SeriesWriterType;
                  
+                               /* typedef itk::VectorImage<short, 3> VectorImageType;
+                                VectorImageType::Pointer vect = VectorImageType::New();
+                                vect.*/
+
+
                                 SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
                                 seriesWriter->SetInput( image);
                        
@@ -305,22 +345,25 @@ namespace creaImageIO
                                 typedef itk::NumericSeriesFileNames NamesGeneratorType;
                                 NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
                                 namesGenerator->SetStartIndex(0);
-                                namesGenerator->SetEndIndex(dims_size[3]-1);
+                                namesGenerator->SetEndIndex(dims_size[3]-1); // TO CHANGE
                                 namesGenerator->SetIncrementIndex(1);
                                 std::string format = i_dir;
                             format += "/image%03d.vtk";
                                 namesGenerator->SetSeriesFormat( format.c_str() );
-      
-                                seriesWriter->SetFileNames( namesGenerator->GetFileNames() );
+                                const std::vector<std::string> names = namesGenerator->GetFileNames();
+                                seriesWriter->SetFileNames( names );
                        
                                 try
                                {
                                        seriesWriter->Update();
-                                       vtkImageReader2 *vReader =vtkImageReader2::New();
-                                       for(unsigned int i = 0 ;i < dims_size[3]; i++)
+                                       vtkImageReader2 *vReader = vtkImageReader2::New();
+                                       vReader->SetFilePrefix(".vtk");
+                                       std::vector<std::string>::const_iterator it = names.begin();
+                                       for( ;it !=  names.end(); ++it)
                                        {
-                                               vReader->SetFileName(namesGenerator->GetFileNames()[i].c_str());
+                                               vReader->SetFileName((*it).c_str());
                                                vReader->Update();
+                                               crea::VtkBasicSlicer(vReader->GetOutput());
                                                m_Vresults.push_back(vReader->GetOutput());
                                        }
                                }