X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fgdcmvtk%2Fsrc%2FbbgdcmvtkGetXCoherentInfoGdcmReader.cxx;h=1ec74e201efc89186624198ffc0e69459bdd3cb2;hb=bf1bdd88621c0556024de37768c2d17d12f2a265;hp=21fcdcf1dcb17dd9e083d0a66f0d49aad2b6c370;hpb=95c46befb5658894daa148d313a17b6d15810c06;p=bbtk.git diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx index 21fcdcf..1ec74e2 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx @@ -2,19 +2,30 @@ #include "bbgdcmvtkPackage.h" #include "gdcmFile.h" -#include "gdcmFileHelper.h" #include "vtkImageData.h" -#include "vtkGdcmReader.h" #include +#if defined USE_GDCM + #include "gdcmFileHelper.h" +#endif + +#if defined USE_GDCM2 + #include + #include + #include + #include + #include "vtkStringArray.h" +#endif + namespace bbgdcmvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetXCoherentInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); +#if defined USE_GDCM void GetXCoherentInfoGdcmReader::Process() { - // Read the first image file + // Read the *first* image file (a SET of file names is given as input) f = GDCM_NAME_SPACE::File::New(); f->SetFileName( bbGetInputIn()[0] ); bool res = f->Load(); @@ -29,6 +40,7 @@ void GetXCoherentInfoGdcmReader::Process() std::vector v_iop; float iop[6]; f->GetImageOrientationPatient(iop); + for(i=0; i< 6; i++) v_iop.push_back(iop[i]); bbSetOutputIOP(v_iop ); @@ -36,21 +48,15 @@ void GetXCoherentInfoGdcmReader::Process() std::vector v_ipp; float ipp[3]; f->GetImagePositionPatient(ipp); + for(i=0; i< 3; i++) v_ipp.push_back(ipp[i]); bbSetOutputIPP(v_ipp ); - std::vector v_pixelspacing; - v_pixelspacing.push_back(f->GetXSpacing()); - v_pixelspacing.push_back(f->GetYSpacing()); - if (f->GetZSize() != 1) { - v_pixelspacing.push_back(f->GetZSpacing()); - } - bbSetOutputPixelSpacing(v_pixelspacing); - -// Add all the files to the SerieHelper +// Add *all the files* to the SerieHelper sh = GDCM_NAME_SPACE::SerieHelper::New(); std::vector gii = bbGetInputIn(); + for(std::vector::iterator it = gii.begin(); it != gii.end(); ++it) @@ -61,67 +67,137 @@ void GetXCoherentInfoGdcmReader::Process() GDCM_NAME_SPACE::FileList::const_iterator it; GDCM_NAME_SPACE::FileList *l; - // ==================== Just to see ============================== - - std::cout << std::endl << " ---------------------------------------- Recap" - << std::endl; - l = sh->GetFirstSingleSerieUIDFileSet(); - while (l) - { - it = l->begin(); - std::cout << "SerieUID [" << (*it)->GetEntryString(0x0020,0x000e) <<"] Serie Description [" - << (*it)->GetEntryString(0x0008,0x103e) << "] " - << " : " << l->size() << " files" << std::endl; - l = sh->GetNextSingleSerieUIDFileSet(); - } - std::cout << " ----------------------------------------End Recap" - << std::endl << std::endl; - - if(l->size() > 1) - std::cout << " --------------------------- More than ONE Serie UID ?!?" - << std::endl << std::endl; - // ============================================================ - // Should only contain one! l = sh->GetFirstSingleSerieUIDFileSet(); int nbFiles; double zspacing = 0.; nbFiles = l->size() ; - sh->OrderFileList(l); + sh->OrderFileList(l); // this one should compute the *actual* Z Spacing! zspacing = sh->GetZSpacing(); + std::vector v_pixelspacing; + v_pixelspacing.push_back( f->GetXSpacing() ); + v_pixelspacing.push_back( f->GetYSpacing() ); + v_pixelspacing.push_back( zspacing ); +// if (f->GetZSize() != 1) { +// v_pixelspacing.push_back(f->GetZSpacing()); +// } + bbSetOutputPixelSpacing(v_pixelspacing); - std::cout << "GetZSpacing() of sorted SingleSerieUIDFileSet " - << "from GDCM_NAME_SPACE::SerieHelper: " << zspacing << std::endl; - std::cout << " ('-1' means all the files have the same position)" << std::endl; - - bbSetOutputInterSlice(zspacing); - - + if (reader!=NULL) + { + reader->Delete(); + reader=NULL; + } reader = vtkGdcmReader::New(); + + //EED 21 mars 2012 FLIP probleme ..PLOP.. + reader->SetFlipY(false); + + //reader->SetFileName( bbGetInputIn().c_str() ); reader->SetCoherentFileList(l); reader->Update(); reader->GetOutput(); - vtkIndent indent ; - reader->GetOutput()->PrintSelf(std::cout, indent); bbSetOutputOut( reader->GetOutput() ); } +#endif +// endif USE_GDCM + +#if defined USE_GDCM2 +void GetXCoherentInfoGdcmReader::Process() +{ + // Read the *first* image file (a SET of file names is given as input) + gdcm::Reader *read = new gdcm::Reader(); + reader->SetFileName( bbGetInputIn()[0].c_str()); + + bool res = read->Read(); + if ( !res ) + { + delete read; + bbSetOutputOut(0); + return; + } + + // Get info from the first image file + const gdcm::File &f = read->GetFile(); + int i; + std::vector v_iop; + const gdcm::DataElement &deIop = f.GetDataSet().GetDataElement(gdcm::Tag(0x0020, 0x0037)); + std::stringstream ss; + deIop.GetValue().Print(ss); + gdcm::Element iop; + iop.Read( ss ); + for(i=0; i< 6; i++) + v_iop.push_back((float)(iop[i])); + bbSetOutputIOP(v_iop ); + + std::vector v_ipp; + const gdcm::DataElement &deIpp = f.GetDataSet().GetDataElement(gdcm::Tag((0x0020,0x0032))); + deIpp.GetValue().Print(ss); + gdcm::Element ipp; + ipp.Read( ss ); + for(i=0; i< 3; i++) + v_ipp.push_back((float)(ipp[i])); + bbSetOutputIPP(v_ipp ); + +// Add *all the files* to the IPPsorter + gdcm::IPPSorter s; + s.SetComputeZSpacing( true ); + s.SetZSpacingTolerance( 1e-3 ); + std::vector gii = bbGetInputIn(); + s.Sort(gii); + + //l = sh->GetFirstSingleSerieUIDFileSet(); + // no Test if we have multiple series + //s.GetFilenames(); + //int nbFiles; + + double zspacing = 0.; + zspacing = s.GetZSpacing(); + std::vector v_pixelspacing = gdcm::ImageHelper::GetSpacingValue(f); + v_pixelspacing.push_back( v_pixelspacing[0] ); + v_pixelspacing.push_back( v_pixelspacing[1] ); + v_pixelspacing.push_back( zspacing ); + bbSetOutputPixelSpacing(v_pixelspacing); + + if (reader!=NULL) + { + reader->Delete(); + reader=NULL; + } + reader = vtkGDCMImageReader::New(); + vtkStringArray *files = vtkStringArray::New(); + std::vector< std::string >::const_iterator it = s.GetFilenames().begin(); + for( ; it != s.GetFilenames().end(); ++it) + { + const std::string &f = *it; + files->InsertNextValue( f.c_str() ); + } + reader->SetFileNames(files); + reader->Update(); + reader->GetOutput(); + bbSetOutputOut( reader->GetOutput() ); +} +#endif +// endif USE_GDCM2 -void GetXCoherentInfoGdcmReader::bbUserConstructor() +void GetXCoherentInfoGdcmReader::bbUserSetDefaultValues() { - std::vector init; - init.push_back(""); - bbSetInputIn(init); + std::vector init; + init.push_back(""); + bbSetInputIn(init); + //reader=NULL; /// \TODO fixme JPR } -void GetXCoherentInfoGdcmReader::bbUserCopyConstructor(bbtk::BlackBox::Pointer) +void GetXCoherentInfoGdcmReader::bbUserInitializeProcessing() { - + } -void GetXCoherentInfoGdcmReader::bbUserDestructor() +#if defined USE_GDCM +void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() { if(reader) reader->Delete(); @@ -130,8 +206,15 @@ void GetXCoherentInfoGdcmReader::bbUserDestructor() if(sh) sh->Delete(); } +#endif +#if defined USE_GDCM2 +void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() +{ + if(reader) + reader->Delete(); } -// EO namespace bbgdcmvtk - +#endif +} +// EO namespace bbgdcmvtk