X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDir.cxx;h=f14f63e2d091b02633b7e01e619f159208e07cc6;hb=b1cbd2d3c12ccac8b257901236fe8eb27a20b117;hp=eaf7e82fbe42cdc724282e3a1b39db84bb092069;hpb=4bdf977b8a564a425e9ac35787bb3a5ce50047fb;p=gdcm.git diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index eaf7e82f..f14f63e2 100644 --- a/src/gdcmDicomDir.cxx +++ b/src/gdcmDicomDir.cxx @@ -1,101 +1,194 @@ // gdcmDicomDir.cxx //----------------------------------------------------------------------------- #include "gdcmDicomDir.h" -#include "gdcmPatient.h" #include "gdcmStudy.h" #include "gdcmSerie.h" #include "gdcmImage.h" +#include "gdcmUtil.h" #include +//----------------------------------------------------------------------------- +// Constructor / Destructor gdcmDicomDir::gdcmDicomDir(std::string & FileName, bool exception_on_error): - gdcmParser(FileName.c_str(),exception_on_error, true ) { - - - gdcmPatient *patCur; - gdcmStudy *studCur; - gdcmSerie *serCur; - gdcmImage *imaCur; - - ListTag::iterator i, j; - - - if ( GetListEntry().begin() == GetListEntry().end() ) { - cout << "ListEntry vide " << endl; - } - - i = GetListEntry().begin(); - while ( i != GetListEntry().end() ) { - - // std::cout << std::hex << (*i)->GetGroup() << - // " " << (*i)->GetElement() << endl; - - std::string v = (*i)->GetValue(); - if (v == "PATIENT ") { - patCur=new gdcmPatient(); - //cout << "PATIENT" << endl, - patCur->beginObj =i; - GetPatients().push_back(patCur); - } - - if (v == "STUDY ") { - //cout << "STUDY" << endl, - studCur=new gdcmStudy(); - studCur->beginObj = patCur->endObj = i; - lPatient::iterator aa = GetPatients().end(); - --aa; - (*aa)->GetStudies().push_back(studCur); - } - studCur=new gdcmStudy(); - - if (v == "SERIES") { - //cout << "SERIES" << endl, - serCur=new gdcmSerie(); - - serCur->beginObj = studCur->endObj= i; - lPatient::iterator aa = GetPatients().end(); - --aa; - lStudy::iterator bb = (*aa)->GetStudies().end(); - --bb; - (*bb)->GetSeries().push_back(serCur); - } - - if (v == "IMAGE ") { - //cout << "IMAGE" << endl; - imaCur=new gdcmImage(); - imaCur->beginObj = serCur->endObj= i; - - lPatient::iterator aa = GetPatients().end(); - --aa; - lStudy::iterator bb = (*aa)->GetStudies().end(); - --bb; - lSerie::iterator cc = (*bb)->GetSeries().end(); - --cc; - (*cc)->GetImages().push_back(imaCur); - - - /* --- - // ce n'est pas sur une nouvelle IMAGE, qu'il faut intervenir - // mais lorsqu'on rencontre un 'non IMAGE' apres des 'IMAGE' - lImage::iterator dd = (*cc)->GetImages().end(); - - if ( (*cc)->GetImages().begin() != dd ) { - --dd; - (*dd)->endObj = i; - } - --- */ - } - ++i; - } + gdcmParser(FileName.c_str(),exception_on_error, true ) +{ + if ( GetListEntry().begin() == GetListEntry().end() ) + { + dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir entry list empty"); + } + + CreateDicomDir(); } -gdcmDicomDir::~gdcmDicomDir() { - lPatient::iterator cc = GetPatients().begin(); - while (cc != GetPatients().end() ) { - //cout << "delete PATIENT" << endl; +gdcmDicomDir::~gdcmDicomDir() +{ + for(ListPatient::iterator cc = patients.begin();cc!=patients.end();++cc) + { delete *cc; - ++cc; } } + +//----------------------------------------------------------------------------- +// Print +void gdcmDicomDir::Print(std::ostream &os) +{ + for(ListPatient::iterator cc = patients.begin();cc!=patients.end();++cc) + { + (*cc)->SetPrintLevel(printLevel); + (*cc)->Print(os); + } +} + +//----------------------------------------------------------------------------- +// Public + +//----------------------------------------------------------------------------- +// Protected + +//----------------------------------------------------------------------------- +// Private +void gdcmDicomDir::CreateDicomDir(void) +{ + // The list is parsed. When a tag is found : + // 1 - we save the beginning iterator + // 2 - we continue to parse + // 3 - we find an other tag + // + we create the object for the precedent tag + // + loop to 1 - + + gdcmDicomDirType type=gdcmDicomDir::GDCM_NONE; + ListTag::iterator begin; + ListTag::iterator end; + + begin=GetListEntry().begin(); + end=begin; + for(ListTag::iterator i=GetListEntry().begin();i != GetListEntry().end();++i) + { + // std::cout << std::hex << (*i)->GetGroup() << + // " " << (*i)->GetElement() << endl; + + std::string v = (*i)->GetValue(); + if (v == "PATIENT ") + { +// std::cout<<"PATIENT"<0) + { + ListPatient::iterator itp=patients.end(); + itp--; + (*itp)->AddStudy(new gdcmStudy(begin,end)); + } +} + +void gdcmDicomDir::AddSerieToEnd(ListTag::iterator begin,ListTag::iterator end) +{ + if(patients.size()>0) + { + ListPatient::iterator itp=patients.end(); + itp--; + + if((*itp)->GetStudies().size()>0) + { + ListStudy::iterator itst=(*itp)->GetStudies().end(); + itst--; + (*itst)->AddSerie(new gdcmSerie(begin,end)); + } + } +} + +void gdcmDicomDir::AddImageToEnd(ListTag::iterator begin,ListTag::iterator end) +{ + if(patients.size()>0) + { + ListPatient::iterator itp=patients.end(); + itp--; + + if((*itp)->GetStudies().size()>0) + { + ListStudy::iterator itst=(*itp)->GetStudies().end(); + itst--; + + if((*itst)->GetSeries().size()>0) + { + ListSerie::iterator its=(*itst)->GetSeries().end(); + its--; + (*its)->AddImage(new gdcmImage(begin,end)); + } + } + } +} + +//-----------------------------------------------------------------------------