From: regrain Date: Wed, 4 Feb 2004 13:13:05 +0000 (+0000) Subject: * FIX : amelioration of code X-Git-Tag: Version0.4~24 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=4a07b1470f68d316f570fef1f07b9f9c77e90ee1;p=gdcm.git * FIX : amelioration of code * FIX : python bug fix * Add python demo --- diff --git a/Testing/TestDicomDir.cxx b/Testing/TestDicomDir.cxx index a9fceebe..db226de8 100644 --- a/Testing/TestDicomDir.cxx +++ b/Testing/TestDicomDir.cxx @@ -18,23 +18,6 @@ using namespace std; - -void aff(ListTag::iterator deb, ListTag::iterator fin, int nbFFFE) -{ - int count =0; - for (ListTag::iterator i= deb; i!= fin; i++) - { - if( (*i)->GetGroup() == 0xfffe) - { - count ++; - if (count == nbFFFE) break; - } - (*i)->SetPrintLevel(0); - (*i)->Print(); - } -} - - int main(int argc, char* argv[]) { gdcmDicomDir *e1; @@ -63,127 +46,12 @@ int main(int argc, char* argv[]) return(1); } -// Exemples exploitation de la structure -// PATIENT -/* cout << std::endl << std::endl - << " = Liste des PATIENT ==========================================" - << std::endl<< std::endl; - - - itPatient = e1->GetPatients().begin(); - while ( itPatient != e1->GetPatients().end() ) { // on degouline la liste de PATIENT - std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name - itPatient ++; - } - -// STUDY - cout << std::endl << std::endl - << " = Liste des PATIENT/STUDY ==========================================" - << std::endl<< std::endl; - - itPatient = e1->GetPatients().begin(); - while ( itPatient != e1->GetPatients().end() ) { // on degouline la liste de PATIENT - std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name - itStudy = ((*itPatient)->GetStudies()).begin(); - while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient - std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Stdy Description - ++itStudy; - } - itPatient ++; - } - -// SERIE - cout << std::endl << std::endl - << " = Liste des PATIENT/STUDY/SERIE ==========================================" - << std::endl<< std::endl; - - itPatient = e1->GetPatients().begin(); - while ( itPatient != e1->GetPatients().end() ) { // on degouline la liste de PATIENT - std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name - itStudy = ((*itPatient)->GetStudies()).begin(); - while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient - std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Study Description - itSerie = ((*itStudy)->GetSeries()).begin(); - while (itSerie != (*itStudy)->GetSeries().end() ) { // on degouline les SERIES de cette study - std::cout << "--- --- "<< (*itSerie)->GetEntryByNumber(0x0008, 0x103e) << std::endl; // Serie Description - ++itSerie; - } - ++itStudy; - } - itPatient ++; - } - -// IMAGE - cout << std::endl << std::endl - << " = Liste des PATIENT/STUDY/SERIE/IMAGE ===================================" - << std::endl<< std::endl; - - itPatient = e1->GetPatients().begin(); - while ( itPatient != e1->GetPatients().end() ) { // on degouline la liste de PATIENT - std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name - itStudy = ((*itPatient)->GetStudies()).begin(); - while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient - std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Study Description - itSerie = ((*itStudy)->GetSeries()).begin(); - while (itSerie != (*itStudy)->GetSeries().end() ) { // on degouline les SERIES de cette study - std::cout << "--- --- "<< (*itSerie)->GetEntryByNumber(0x0008, 0x103e) << std::endl; // Serie Description - itImage = ((*itSerie)->GetImages()).begin(); - while (itImage != (*itSerie)->GetImages().end() ) { // on degouline les SERIES de cette study - std::cout << "--- --- --- "<< (*itImage)->GetEntryByNumber(0x0004, 0x1500) << std::endl; // File name - ++itImage; - } - ++itSerie; - } - ++itStudy; - } - itPatient ++; - }*/ - // DICOM DIR cout << std::endl << std::endl << " = Contenu Complet du DICOMDIR ==========================================" << std::endl<< std::endl; e1->Print(); - -/* itPatient = e1->GetPatients().begin(); - while ( itPatient != e1->GetPatients().end() ) { // on degouline la liste de PATIENT - cout << " = PATIENT ==========================================" << std::endl; - deb = (*itPatient)->beginObj; - fin = (*((*itPatient)->GetStudies()).begin())->beginObj; - e1->SetPrintLevel(2); - aff(deb,fin,1); - - itStudy = ((*itPatient)->GetStudies()).begin(); - while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient - std::cout << " ==== STUDY ==========================================" <beginObj; - fin = (*((*itStudy)->GetSeries()).begin())->beginObj; - //e1->SetPrintLevel(2); - aff(deb,fin,1); - - itSerie = ((*itStudy)->GetSeries()).begin(); - while (itSerie != (*itStudy)->GetSeries().end() ) { // on degouline les SERIES de cette study - cout << " ======= SERIES ==========================================" << std::endl; - deb = (*itSerie)->beginObj; - fin = (*((*itSerie)->GetImages()).begin())->beginObj; - //e1->SetPrintLevel(2); - aff(deb,fin,1); - - itImage = ((*itSerie)->GetImages()).begin(); - while (itImage != (*itSerie)->GetImages().end() ) { // on degouline les IMAGE de cette serie - cout << " ========== IMAGE ==========================================" << std::endl; - std::cout << "--- --- --- File Name: "<< (*itImage)->GetEntryByNumber(0x0004, 0x1500) << std::endl; // Referenced File - - ++itImage; - } - ++itSerie; - } - ++itStudy; - } - itPatient ++; - }*/ - std::cout<pos2) - path.resize(pos1); - else - path.resize(pos2); - NewDicomDir(path); + if(parseDir) + { + dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir : Parse directory and create the DicomDir"); + ParseDirectory(); + } } - - CreateDicomDir(); + else + CreateDicomDir(); } /* @@ -49,13 +43,13 @@ gdcmDicomDir::gdcmDicomDir(const char *FileName, * \brief * @param exception_on_error */ -gdcmDicomDir::gdcmDicomDir(ListTag *l, +/*gdcmDicomDir::gdcmDicomDir(ListTag *l, bool exception_on_error): gdcmParser(exception_on_error ) { listEntries=*l; CreateDicomDir(); -} +}*/ /* * \ingroup gdcmDicomDir @@ -114,6 +108,12 @@ bool gdcmDicomDir::Write(std::string fileName) return true; } +void gdcmDicomDir::ParseDirectory(void) +{ + NewDicomDir(GetPath()); + CreateDicomDir(); +} + //----------------------------------------------------------------------------- // Protected /* @@ -128,6 +128,7 @@ void gdcmDicomDir::NewDicomDir(std::string path) gdcmHeader *header; listEntries.clear(); + patients.clear(); for(gdcmDirList::iterator it=fileList.begin(); it!=fileList.end(); ++it) @@ -143,6 +144,25 @@ void gdcmDicomDir::NewDicomDir(std::string path) SetElements(path,list); } +/* + * \ingroup gdcmDicomDir + * \brief Get the dicom dir path + * @param + */ +std::string gdcmDicomDir::GetPath(void) +{ + std::string path=GetFileName(); + + int pos1=path.rfind("/"); + int pos2=path.rfind("\\"); + if(pos1>pos2) + path.resize(pos1); + else + path.resize(pos2); + + return(path); +} + //----------------------------------------------------------------------------- // Private /* diff --git a/src/gdcmDicomDir.h b/src/gdcmDicomDir.h index 3eb1b625..b0bc7453 100644 --- a/src/gdcmDicomDir.h +++ b/src/gdcmDicomDir.h @@ -21,8 +21,9 @@ typedef std::list ListHeader; class GDCM_EXPORT gdcmDicomDir: public gdcmParser { public: - gdcmDicomDir(ListTag *l, bool exception_on_error = false); - gdcmDicomDir(const char *FileName,bool exception_on_error = false); +// gdcmDicomDir(ListTag *l, bool exception_on_error = false); + gdcmDicomDir(const char *FileName, bool parseDir = false, + bool exception_on_error = false); ~gdcmDicomDir(void); @@ -30,8 +31,12 @@ public: virtual void Print(std::ostream &os = std::cout); inline ListPatient &GetPatients() {return patients;}; - bool Write(std::string fileName); +// Write + bool Write(std::string fileName); + void ParseDirectory(void); + +// Types typedef enum { GDCM_NONE, @@ -43,6 +48,7 @@ public: protected: void NewDicomDir(std::string path); + std::string GetPath(void); private: void CreateDicomDir(void);