X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDir.cxx;h=cf828c9edc63d09be5b9a7a8880af442e2ff8786;hb=b918abd539ab5d8d633a83cf1d5b8cfcf5cc5c09;hp=1226e49598d9b3ca02ef9a6a7d47d7f3d0d8f9ff;hpb=fbd2698cb0545343abc2d8aefe92bab1f5b3eaa3;p=gdcm.git diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index 1226e495..cf828c9e 100644 --- a/src/gdcmDicomDir.cxx +++ b/src/gdcmDicomDir.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDir.cxx,v $ Language: C++ - Date: $Date: 2005/07/07 16:37:40 $ - Version: $Revision: 1.144 $ + Date: $Date: 2005/08/19 13:15:05 $ + Version: $Revision: 1.153 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -21,8 +21,10 @@ // PS 3.3-2003, pages 731-750 //----------------------------------------------------------------------------- #include "gdcmDicomDir.h" +#include "gdcmDicomDirObject.h" #include "gdcmDicomDirStudy.h" #include "gdcmDicomDirSerie.h" +#include "gdcmDicomDirVisit.h" #include "gdcmDicomDirImage.h" #include "gdcmDicomDirPatient.h" #include "gdcmDicomDirMeta.h" @@ -98,7 +100,8 @@ // // (Root directory Entity) PATIENT // PATIENT STUDY -// STUDY SERIES +// STUDY SERIES +// STUDY VISIT // SERIES IMAGE // IMAGE / // @@ -117,9 +120,11 @@ DicomDir::DicomDir() :Document( ) { Initialize(); // sets all private fields to NULL + ParseDir = false; NewMeta(); } +#ifndef GDCM_LEGACY_REMOVE /** * \brief Constructor Parses recursively the directory and creates the DicomDir * or uses an already built DICOMDIR, depending on 'parseDir' value. @@ -131,6 +136,8 @@ DicomDir::DicomDir() * and wants to explore recursively the directories * - false if user passed an already built DICOMDIR file * and wants to use it + * @deprecated use : new DicomDir() + [ SetLoadMode(lm) + ] SetDirectoryName(name) + * or : new DicomDir() + SetFileName(name) */ DicomDir::DicomDir(std::string const &fileName, bool parseDir ): Document( ) @@ -142,8 +149,10 @@ DicomDir::DicomDir(std::string const &fileName, bool parseDir ): ParseDir = parseDir; SetLoadMode (0x00000000); // concerns only dicom files - Load( fileName ); + SetFileName( fileName ); + Load( ); } +#endif /** * \brief Canonical destructor @@ -165,7 +174,8 @@ DicomDir::~DicomDir() // Public /** - * \brief Loader. use SetLoadMode(), SetFileName() before ! + * \brief Loader. use SetFileName(fn) + * or SetLoadMode(lm) + SetDirectoryName(dn) before ! * @return false if file cannot be open or no swap info was found, * or no tag was found. */ @@ -182,11 +192,13 @@ bool DicomDir::Load( ) return DoTheLoadingJob( ); } + #ifndef GDCM_LEGACY_REMOVE /** - * \brief Loader. (DEPRECATED : not to break the API) + * \brief Loader. (DEPRECATED : kept not to break the API) * @param fileName file to be open for parsing * @return false if file cannot be open or no swap info was found, * or no tag was found. + * @deprecated use SetFileName(n) + Load() instead */ bool DicomDir::Load(std::string const &fileName ) { @@ -202,6 +214,13 @@ bool DicomDir::Load(std::string const &fileName ) return DoTheLoadingJob( ); } +/// DEPRECATED : use SetDirectoryName(dname) instead +void DicomDir::SetParseDir(bool parseDir) +{ + ParseDir = parseDir; +} +#endif + /** * \brief Does the Loading Job (internal use only) * @return false if file cannot be open or no swap info was found, @@ -603,8 +622,10 @@ void DicomDir::CreateDicomDirChainedList(std::string const &path) } f = new File( ); - f->SetLoadMode(LoadMode); // we allow user not to load Sequences... - f->Load( it->c_str() ); + f->SetLoadMode(LoadMode); // we allow user not to load Sequences, or Shadow + // groups, or ...... + f->SetFileName( it->c_str() ); + /*int res = */f->Load( ); // if ( !f ) // { @@ -771,6 +792,16 @@ void DicomDir::CreateDicomDir() gdcmErrorMacro( "Add AddSerieToEnd failed"); } } + else if ( v == "VISIT " ) + { + si = new DicomDirVisit(true); + if ( !AddVisitToEnd( static_cast(si)) ) + { + delete si; + si = NULL; + gdcmErrorMacro( "Add AddVisitToEnd failed"); + } + } else if ( v == "STUDY " ) { si = new DicomDirStudy(true); @@ -804,7 +835,9 @@ void DicomDir::CreateDicomDir() continue; } if ( si ) - MoveSQItem(si,tmpSI); + //MoveSQItem(si,tmpSI); // Old code : Copies each Entry + // -and then removes the source- + si->MoveObject(tmpSI); // New code : Copies the List tmpSI=s->GetNextSQItem(); } @@ -858,6 +891,26 @@ bool DicomDir::AddSerieToEnd(DicomDirSerie *dd) return false; } +/** + * \brief AddVisitToEnd + * @param dd SQ Item to enqueue to the DicomDirVisit chained List + */ +bool DicomDir::AddVisitToEnd(DicomDirVisit *dd) +{ + if ( Patients.size() > 0 ) + { + ListDicomDirPatient::iterator itp = Patients.end(); + itp--; + + DicomDirStudy *study = (*itp)->GetLastStudy(); + if ( study ) + { + study->AddVisit(dd); + return true; + } + } + return false; +} /** * \brief AddImageToEnd * @param dd SQ Item to enqueue to the DicomDirImage chained List @@ -1098,7 +1151,7 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, * @param src source SQItem */ void DicomDir::MoveSQItem(DocEntrySet *dst,DocEntrySet *src) -{ +{ DocEntry *entry; entry = src->GetFirstEntry();