X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FMakeDicomDir.cxx;h=6046ac506f4caf784c2deb1da2d8e290495cb4d6;hb=7807e926c2319c5adfc037665992307222bc8f27;hp=72ff4ffa541ad43f61250daac6620f9a5c8295e9;hpb=94d13393e488310ea378c26380566596ef208bfd;p=gdcm.git diff --git a/Example/MakeDicomDir.cxx b/Example/MakeDicomDir.cxx index 72ff4ffa..6046ac50 100644 --- a/Example/MakeDicomDir.cxx +++ b/Example/MakeDicomDir.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: MakeDicomDir.cxx,v $ Language: C++ - Date: $Date: 2005/06/07 11:12:10 $ - Version: $Revision: 1.4 $ + Date: $Date: 2007/09/28 14:09:20 $ + Version: $Revision: 1.25 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -20,70 +20,71 @@ #include "gdcmDicomDirPatient.h" #include "gdcmDirList.h" #include "gdcmDebug.h" - #include "gdcmArgMgr.h" -#include - -// --- -void StartMethod(void *toto) { - (void)toto; - std::cout<<"Start parsing"< // Linux Only -void EndMethod(void *toto) { - (void)toto; - std::cout<<"End parsing"< /** - * \ingroup Test * \brief Explores recursively the given directory * orders the gdcm-readable found Files * according their Patient/Study/Serie/Image characteristics * makes the gdcmDicomDir - * and writes a file named NewDICOMDIR.. + * and writes a file named DICOMDIR. (user may choose an other name) */ int main(int argc, char *argv[]) { START_USAGE(usage) - " \n MakeDicomDir :\n", - " Explores recursively the given directory, makes the relevant DICOMDIR", - " and writes it as 'NewDICOMDIR'", - " usage: MakeDicomDir dirname=rootDirectoryName [noshadow] [noseq] [debug] ", - " noshadow : user doesn't want to load Private groups (odd number)", - " noseq : user doesn't want to load Sequences ", - " debug : user wants to run the program in 'debug mode' ", + " \n MakeDicomDir :\n ", + " Explores recursively the given directory, makes the relevant DICOMDIR ", + " and writes it as 'DICOMDIR' ", + " ", + " usage: MakeDicomDir dirname=rootDirectoryName ", + " name=DICOMDIR file name ", + " [noshadowseq][noshadow][noseq] [debug] [check] ", + " ", + " name : the default name for the generated dicomdir is 'DICOMDIR' ", + " noshadowseq: user doesn't want to load Private Sequences ", + " noshadow : user doesn't want to load Private groups (odd number) ", + " noseq : user doesn't want to load Sequences ", + " debug : developper wants to run the program in 'debug mode' ", + " check : the dicomdir is checked as 'gdcm readable' ", FINISH_USAGE // ----- Initialize Arguments Manager ------ - gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv); + GDCM_NAME_SPACE::ArgMgr *am = new GDCM_NAME_SPACE::ArgMgr(argc, argv); - if (am->ArgMgrDefined("usage")) + if (argc == 1 || am->ArgMgrDefined("usage")) { am->ArgMgrUsage(usage); // Display 'usage' delete am; return 0; } - char *dirName; + const char *dirName; dirName = am->ArgMgrGetString("dirName","."); - int loadMode; - if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") ) - loadMode = NO_SEQ | NO_SHADOW; - else if ( am->ArgMgrDefined("noshadow") ) - loadMode = NO_SHADOW; - else if ( am->ArgMgrDefined("noseq") ) - loadMode = NO_SEQ; - else - loadMode = 0; + const char *name; + name = am->ArgMgrGetString("name","DICOMDIR"); + + int loadMode = GDCM_NAME_SPACE::LD_ALL; + if ( am->ArgMgrDefined("noshadowseq") ) + loadMode |= GDCM_NAME_SPACE::LD_NOSHADOWSEQ; + else + { + if ( am->ArgMgrDefined("noshadow") ) + loadMode |= GDCM_NAME_SPACE::LD_NOSHADOW; + if ( am->ArgMgrDefined("noseq") ) + loadMode |= GDCM_NAME_SPACE::LD_NOSEQ; + } if (am->ArgMgrDefined("debug")) - gdcm::Debug::DebugOn(); - + GDCM_NAME_SPACE::Debug::DebugOn(); + + int check = am->ArgMgrDefined("check"); + // if unused Param we give up if ( am->ArgMgrPrintUnusedLabels() ) { @@ -91,63 +92,84 @@ int main(int argc, char *argv[]) delete am; return 0; } - + delete am; // we don't need Argument Manager any longer // ----- Begin Processing ----- - gdcm::DicomDir *dcmdir; - + GDCM_NAME_SPACE::DicomDir *dcmdir; + // we ask for Directory parsing - dcmdir = new gdcm::DicomDir( ); - dcmdir->SetParseDir(true); - - dcmdir->SetStartMethod(StartMethod, (void *) NULL); - dcmdir->SetEndMethod(EndMethod); + dcmdir = GDCM_NAME_SPACE::DicomDir::New( ); dcmdir->SetLoadMode(loadMode); - dcmdir->Load(dirName); - + dcmdir->SetDirectoryName(dirName); + //dcmdir->SetParseDir(true); + + // struct tms tms1, tms2; // Time measurements + // times(&tms1); + + dcmdir->Load(); // Reads all the files and creates the GDCM_NAME_SPACE::DicomDir + + //times(&tms2); + //std::cout + // << (long) ((tms2.tms_utime) - (tms1.tms_utime)) + // << std::endl; + + if ( GDCM_NAME_SPACE::Debug::GetDebugFlag() ) + std::cout << "======================= End Parsing Directory" << std::endl; + // ----- Check the result if ( !dcmdir->GetFirstPatient() ) { std::cout << "makeDicomDir: no patient found. Exiting." << std::endl; - delete dcmdir; + dcmdir->Delete(); return 1; } - // ----- Create the corresponding DicomDir - - dcmdir->WriteDicomDir("NewDICOMDIR"); - delete dcmdir; - - // Read from disc the just written DicomDir - gdcm::DicomDir *newDicomDir = new gdcm::DicomDir("NewDICOMDIR"); - if( !newDicomDir->IsReadable() ) - { - std::cout<<" Written DicomDir 'NewDICOMDIR'" - <<" is not readable"<GetFirstPatient() ) + dcmdir->Write(name); + dcmdir->Delete(); + + if (check) { - std::cout<<" Written DicomDir 'NewDICOMDIR'" - <<" has no patient"<SetFileName( name ); + newDicomDir->Load(); + if ( GDCM_NAME_SPACE::Debug::GetDebugFlag() ) + std::cout << "======================= End Parsing DICOMDIR" + << std::endl; + if( !newDicomDir->IsReadable() ) + { + std::cout<<" Written DicomDir [" << name << "] " + <<" is not readable"<Delete(); + return 1; + } + + if( !newDicomDir->GetFirstPatient() ) + { + std::cout <<" Written DicomDir [" << name << "] " + <<" has no patient"<Delete(); + return(1); + } + std::cout<Delete(); } - - std::cout<