X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FcreaImageIOWxAnySimpleDlg.cpp;h=926e1181675271f373a4e08021c5670b1fa536a3;hb=bae8afe7ee037a3368be7060c3a0708582e7d413;hp=593d389f3a574416f1c409c1d08f8e37780757fe;hpb=e0a559861dcfa6732d80b3158eb2906ca650d5d4;p=creaImageIO.git diff --git a/src/creaImageIOWxAnySimpleDlg.cpp b/src/creaImageIOWxAnySimpleDlg.cpp index 593d389..926e118 100644 --- a/src/creaImageIOWxAnySimpleDlg.cpp +++ b/src/creaImageIOWxAnySimpleDlg.cpp @@ -1,3 +1,31 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Santé) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ +*/ + + #include "creaImageIOWxAnySimpleDlg.h" #include "creaImageIOWxGimmickReaderDialog.h" @@ -11,14 +39,13 @@ #include #include #include -#include #include #include #include #include #include #include -#include "itkImageToVTKImageFilter.h" + namespace creaImageIO { @@ -39,7 +66,7 @@ namespace creaImageIO } // Button to select file(s) wxButton *fileBut = new wxButton(this, -1,_T("Select a file to display"), wxPoint(10,7) ); - Connect( fileBut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxAnySimpleDlg::OnReadFile ); + Connect( fileBut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxAnySimpleDlg::OnReadFile ); // Button to select directory wxButton *directoryBut = new wxButton(this, -1,_T("Select a directory to display"), wxPoint(10,40) ); @@ -50,9 +77,10 @@ namespace creaImageIO Connect( gimmickBut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxAnySimpleDlg::OnReadGimmick ); /// \TODO Button to select Bruker directory - m_dicom = true; + m_dicom = false; Layout(); } + ////////////////////////////////////////////////////////////////////// // // ////////////////////////////////////////////////////////////////////// @@ -84,13 +112,11 @@ namespace creaImageIO // Close(); EndModal( resultShowModal ); } - - -void WxAnySimpleDlg::setExts(std::vector i_exts) -{ - m_exts = i_exts; -} + void WxAnySimpleDlg::setExts(std::vector i_exts) + { + m_exts = i_exts; + } ///////////////////////////////////////////////////////////////////// // // ////////////////////////////////////////////////////////////////////// @@ -115,7 +141,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) { bvalid = m_exts.size() == 0? true : false; std::vector::iterator it = m_exts.begin(); - std::string ext = itr->filename().substr(itr->filename().find_last_of(".")); + std::string ext = itr->path().filename().string().substr(itr->path().filename().string().find_last_of(".")); for(; it != m_exts.end(); it++) { if(ext == (*it) ) @@ -124,10 +150,10 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) break; } } - if (!boost::filesystem::is_directory(itr->status()) && bvalid) - { - readImg(itr->string().c_str()); - } + if (!boost::filesystem::is_directory(itr->status()) && bvalid) + { + readImg(itr->path().string().c_str()); + } } } SetReturnCode( resultShowModal ); @@ -135,14 +161,14 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) EndModal( resultShowModal ); } - ////////////////////////////////////////////////////////////////////// -// // +////////////////////////////////////////////////////////////////////// +// // ////////////////////////////////////////////////////////////////////// void WxAnySimpleDlg::OnReadGimmick(wxCommandEvent &event) { // Run Gimmick - WxGimmickReaderDialog dlg(0,-1, + WxGimmickReaderDialog dlg(0,-1, namedescp, namedb, _T("Select image(s) - Gimmick! (c) CREATIS-LRMN 2008"), @@ -179,7 +205,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) - wxString WxAnySimpleDlg::getInfoImage() + wxString WxAnySimpleDlg::getInfoImage() { return infoimage; } @@ -187,7 +213,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) // FCY : just to check but not needed, we hardly suppose that we load only same type and dim of images const std::type_info & WxAnySimpleDlg::getType(const std::string &i_name) - { + { typedef itk::ImageIOBase::IOComponentType ScalarPixelType; itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO(i_name.c_str(), itk::ImageIOFactory::ReadMode); imageIO->SetFileName(i_name.c_str()); @@ -195,7 +221,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) return imageIO->GetComponentTypeInfo();//AsString( imageIO->GetComponentType()); } - const size_t WxAnySimpleDlg::getNumberOfDimensions(const std::string &i_name) + const size_t WxAnySimpleDlg::getNumberOfDimensions(const std::string &i_name) { typedef itk::ImageIOBase::IOComponentType ScalarPixelType; itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO(i_name.c_str(), itk::ImageIOFactory::ReadMode); @@ -204,10 +230,10 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) return imageIO->GetNumberOfDimensions(); } - void WxAnySimpleDlg::readImg(const std::string &i_name) - { + void WxAnySimpleDlg::readImg(const std::string &i_name) + { size_t dims = getNumberOfDimensions(i_name); - const std::type_info *type= &getType(i_name); + //const std::type_info *type= &getType(i_name); switch(dims) { case 3: @@ -221,8 +247,8 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); } - else if (getType(i_name) == typeid(signed char)) - { + else if (getType(i_name) == typeid(signed char)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -230,7 +256,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->Update(); reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); - } + } else if (getType(i_name) == typeid(short)) { typedef itk::Image TImage; @@ -241,8 +267,8 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); } - else if (getType(i_name) == typeid(unsigned short)) - { + else if (getType(i_name) == typeid(unsigned short)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -329,8 +355,8 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); } - else if (getType(i_name) == typeid(signed char)) - { + else if (getType(i_name) == typeid(signed char)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -339,8 +365,8 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(unsigned short)) + } + else if (getType(i_name) == typeid(unsigned short)) { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; @@ -351,8 +377,8 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); } - else if(getType(i_name) == typeid(short)) - { + else if(getType(i_name) == typeid(short)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -375,9 +401,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(unsigned short)) - { + } + else if (getType(i_name) == typeid(unsigned short)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -386,9 +412,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(unsigned int)) - { + } + else if (getType(i_name) == typeid(unsigned int)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -397,9 +423,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(signed int)) - { + } + else if (getType(i_name) == typeid(signed int)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -408,9 +434,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(unsigned long)) - { + } + else if (getType(i_name) == typeid(unsigned long)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -419,9 +445,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(signed long)) - { + } + else if (getType(i_name) == typeid(signed long)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -430,9 +456,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(float)) - { + } + else if (getType(i_name) == typeid(float)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -441,9 +467,9 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else if (getType(i_name) == typeid(double)) - { + } + else if (getType(i_name) == typeid(double)) + { typedef itk::Image TImage; typedef itk::ImageFileReader ReaderType; ReaderType::Pointer reader = ReaderType::New(); @@ -452,16 +478,16 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) reader->GetOutput()->Register(); m_AnyImages.push_back(reader->GetOutput()); split4Din3Dvtk(reader->GetOutput()); - } - else - { + } + else + { //????FCY, so what the type???? - } - break; + } + break; } // Test to know if we have to add new type - bool btest = false; + bool btest = false; if( m_AnyDims.size() != 0) { btest = true; @@ -469,23 +495,20 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) else { m_AnyDims.push_back(dims); - m_AnyType.push_back(&getType(i_name)); + m_AnyType.push_back((std::type_info*)&getType(i_name)); //JPR cast } if (btest) { if(m_AnyDims.front() != dims || m_AnyType.front()->before(getType(i_name))) { m_AnyDims.push_back(dims); - m_AnyType.push_back(&getType(i_name)); + m_AnyType.push_back((std::type_info*)&getType(i_name)); //JPR cast } else{} } else {} } - - - void WxAnySimpleDlg::readDicomImg(const std::vector &i_names) { typedef itk::Image TImage; @@ -519,10 +542,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) } - - - - template + /* template void WxAnySimpleDlg::split3Din3Dvtk(TImage* i_Img) { typedef itk::ImageToVTKImageFilter< TImage > ConnectorType; @@ -534,61 +554,61 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) im->ShallowCopy(connector->GetOutput()); im->Update(); m_Vresults.push_back(im); - } + }*/ template void WxAnySimpleDlg::split4Din3Dvtk(TImage* i_Img) { - if(i_Img->GetImageDimension() == 4) - { - // size of fourth dimension - int dsize = i_Img->GetLargestPossibleRegion().GetSize(3); - // Output Type - typedef itk::Image ImageOutputType; - typedef itk::ImageSeriesWriter SeriesWriterType; - typedef itk::MetaImageIO MetaImageType; - MetaImageType::Pointer metaIO; - typename SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New(); + if(i_Img->GetImageDimension() == 4) + { + // size of fourth dimension + int dsize = i_Img->GetLargestPossibleRegion().GetSize(3); + // Output Type + typedef itk::Image ImageOutputType; + typedef itk::ImageSeriesWriter SeriesWriterType; + typedef itk::MetaImageIO MetaImageType; + MetaImageType::Pointer metaIO; + typename SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New(); - // from JPR file to generate output files - typedef itk::NumericSeriesFileNames NamesGeneratorType; - NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New(); - namesGenerator->SetStartIndex(0); - namesGenerator->SetEndIndex(dsize-1); - namesGenerator->SetIncrementIndex(1); - std::string format = m_dir; - format += "/image%03d.mhd"; - namesGenerator->SetSeriesFormat( format.c_str() ); - - const std::vector names = namesGenerator->GetFileNames(); - seriesWriter->SetFileNames( names ); - seriesWriter->SetInput(i_Img); - seriesWriter->SetImageIO(metaIO); - try - { - seriesWriter->Update(); - vtkMetaImageReader *vReader = vtkMetaImageReader::New(); - std::vector::const_iterator it = names.begin(); - for( ;it != names.end(); ++it) - { - vReader->SetFileName((*it).c_str()); - vReader->Update(); - m_Vresults.push_back(vReader->GetOutput()); - - } - } - catch( itk::ExceptionObject & excp ) - { - std::cerr << "Exception thrown while writing the series " << std::endl; - std::cerr << excp << std::endl; - //return EXIT_FAILURE; - } + // from JPR file to generate output files + typedef itk::NumericSeriesFileNames NamesGeneratorType; + NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New(); + namesGenerator->SetStartIndex(0); + namesGenerator->SetEndIndex(dsize-1); + namesGenerator->SetIncrementIndex(1); + std::string format = m_dir; + format += "/image%03d.mhd"; + namesGenerator->SetSeriesFormat( format.c_str() ); + + const std::vector names = namesGenerator->GetFileNames(); + seriesWriter->SetFileNames( names ); + seriesWriter->SetInput(i_Img); + seriesWriter->SetImageIO(metaIO); + try + { + seriesWriter->Update(); + vtkMetaImageReader *vReader = vtkMetaImageReader::New(); + std::vector::const_iterator it = names.begin(); + for( ;it != names.end(); ++it) + { + vReader->SetFileName((*it).c_str()); + vReader->Update(); + m_Vresults.push_back(vReader->GetOutput()); + } + } + catch( itk::ExceptionObject & excp ) + { + std::cerr << "Exception thrown while writing the series " << std::endl; + std::cerr << excp << std::endl; + //return EXIT_FAILURE; + } + } } - bool WxAnySimpleDlg::AllSameType() - { + bool WxAnySimpleDlg::AllSameType() + { if(m_AnyType.size() == 1) { return true; @@ -598,7 +618,7 @@ void WxAnySimpleDlg::setExts(std::vector i_exts) return false; } - } + } - }// namespace end + } // namespace end