X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FMakeDicomDir.cxx;h=4a14581f8d4175f4f76a65869aea7a2402b2ca98;hb=feb4513ae3f9c54a62e30c7a3ead38114fd222d0;hp=9f9ac06b58da7e0deef42d9ae36af37d731b4a70;hpb=bbfa3cf89fc2ede7c43259e945f021044b56069f;p=gdcm.git diff --git a/Example/MakeDicomDir.cxx b/Example/MakeDicomDir.cxx index 9f9ac06b..4a14581f 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/02/02 14:26:30 $ - Version: $Revision: 1.1 $ + Date: $Date: 2005/06/15 09:54:49 $ + Version: $Revision: 1.6 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -19,6 +19,9 @@ #include "gdcmDicomDir.h" #include "gdcmDicomDirPatient.h" #include "gdcmDirList.h" +#include "gdcmDebug.h" + +#include "gdcmArgMgr.h" #include @@ -35,8 +38,7 @@ void EndMethod(void *toto) { // --- /** - * \ingroup Test - * \brief Explores recursively the given directory (or GDCM_DATA_ROOT by default) + * \brief Explores recursively the given directory * orders the gdcm-readable found Files * according their Patient/Study/Serie/Image characteristics * makes the gdcmDicomDir @@ -45,29 +47,106 @@ void EndMethod(void *toto) { int main(int argc, char *argv[]) { - gdcm::DicomDir *dcmdir; - std::string dirName; + 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' ", + FINISH_USAGE + + // ----- Initialize Arguments Manager ------ + gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv); + + if (am->ArgMgrDefined("usage")) + { + am->ArgMgrUsage(usage); // Display 'usage' + delete am; + return 0; + } + + char *dirName; + dirName = am->ArgMgrGetString("dirName",(char *)"."); - if (argc > 1) - dirName = argv[1]; + 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 - dirName = GDCM_DATA_ROOT; + loadMode = 0; + + if (am->ArgMgrDefined("debug")) + gdcm::Debug::DebugOn(); + + // if unused Param we give up + if ( am->ArgMgrPrintUnusedLabels() ) + { + am->ArgMgrUsage(usage); + delete am; + return 0; + } - dcmdir = new gdcm::DicomDir(dirName, true); // we ask for Directory parsing + delete am; // we don't need Argument Manager any longer + + // ----- Begin Processing ----- + + gdcm::DicomDir *dcmdir; + + // we ask for Directory parsing + + dcmdir = new gdcm::DicomDir( ); + dcmdir->SetParseDir(true); dcmdir->SetStartMethod(StartMethod, (void *) NULL); dcmdir->SetEndMethod(EndMethod); - - if ( !dcmdir->GetFirstEntry() ) + + dcmdir->SetLoadMode(loadMode); + dcmdir->Load(dirName); + + // ----- Check the result + + if ( !dcmdir->GetFirstPatient() ) { - std::cout << "makeDicomDir: no patient list present. Exiting." + std::cout << "makeDicomDir: no patient found. Exiting." << std::endl; + delete dcmdir; 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() ) + { + std::cout<<" Written DicomDir 'NewDICOMDIR'" + <<" has no patient"<