gdcmDicomDir.h

Go to the documentation of this file.
00001 /*=========================================================================
00002   
00003   Program:   gdcm
00004   Module:    $RCSfile: gdcmDicomDir.h,v $
00005   Language:  C++
00006   Date:      $Date: 2007/08/22 16:14:03 $
00007   Version:   $Revision: 1.81 $
00008   
00009   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
00010   l'Image). All rights reserved. See Doc/License.txt or
00011   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
00012   
00013      This software is distributed WITHOUT ANY WARRANTY; without even
00014      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00015      PURPOSE.  See the above copyright notices for more information.
00016   
00017 =========================================================================*/
00018 
00019 #ifndef _GDCMDICOMDIR_H_
00020 #define _GDCMDICOMDIR_H_
00021 
00022 #include "gdcmDocument.h"
00023 #include "gdcmDebug.h"
00024 
00025 #include <list>
00026 #include <vector>
00027 
00028 namespace GDCM_NAME_SPACE 
00029 {
00030 //-----------------------------------------------------------------------------
00031 class DicomDirPatient;
00032 class DicomDirMeta;
00033 class DicomDirElement;
00034 class DicomDirStudy;
00035 class DicomDirSerie;
00036 class DicomDirVisit;
00037 class DicomDirImage;
00038 class DicomDirPrivate;
00039 class SQItem;
00040 
00041 typedef std::list<DicomDirPatient *> ListDicomDirPatient;
00042 typedef std::vector<Document *> VectDocument;
00043 
00044 //-----------------------------------------------------------------------------
00056 class GDCM_EXPORT DicomDir: public Document
00057 {
00058    gdcmTypeMacro(DicomDir);
00059 
00060 public:
00062    static DicomDir *New() {return new DicomDir();}
00063 
00064 //   GDCM_LEGACY( bool Load(std::string const &filename) )
00065    bool Load( );
00066    void Print(std::ostream &os = std::cout, std::string const &indent = "" );
00067 
00069    void SetDirectoryName(std::string const &dirName)
00070         { ParseDir = true; if (Filename != dirName)
00071                                Filename = dirName, IsDocumentModified = true;}
00073    virtual void SetFileName(std::string const &fileName)
00074                    { ParseDir = false; if (Filename != fileName)
00075                               Filename = fileName, IsDocumentModified = true;}
00076 
00077    // Informations contained in the parser
00078    virtual bool IsReadable();
00079 
00080    // Meta
00081    DicomDirMeta *NewMeta();
00083    DicomDirMeta *GetMeta() { return MetaElems; }
00084 
00085    // Patients
00086    DicomDirPatient *NewPatient();
00087    void ClearPatient();
00088 
00089    DicomDirPatient *GetFirstPatient();
00090    DicomDirPatient *GetNextPatient();
00092    int              GetNumberOfPatients() { return Patients.size();}
00093    
00094    // Parsing
00095    void ParseDirectory();
00096 
00098    float GetProgress() const { return Progress; }
00100    void  AbortProgress() { Abort = true; }
00102    bool  IsAborted() { return Abort; }
00103 
00104    // Write
00105    bool Write(std::string const &fileName);
00106 
00107    bool Anonymize();
00108 
00109    virtual void Copy(DocEntrySet *set);
00110 
00112    typedef enum
00113    {
00114       GDCM_DICOMDIR_NONE,
00115       GDCM_DICOMDIR_META,
00116       GDCM_DICOMDIR_PATIENT,
00117       GDCM_DICOMDIR_STUDY,
00118       GDCM_DICOMDIR_SERIE,
00119       GDCM_DICOMDIR_VISIT,
00120       GDCM_DICOMDIR_IMAGE,
00121       GDCM_DICOMDIR_PRIVATE
00122    } DicomDirType;
00123 
00124 protected:
00125    DicomDir();
00126    ~DicomDir();
00127 //   GDCM_LEGACY( DicomDir(std::string const &filename, bool parseDir = false) )
00128 
00129    void CreateDicomDirChainedList(std::string const &path);
00130 
00131 private:
00132    void Initialize();
00133    void CreateDicomDir();
00134    bool DoTheLoadingJob();
00135    bool AddPatientToEnd(DicomDirPatient *dd);   
00136    bool AddStudyToEnd  (DicomDirStudy   *dd);
00137    bool AddSerieToEnd  (DicomDirSerie   *dd);
00138    bool AddVisitToEnd  (DicomDirVisit   *dd);
00139    bool AddImageToEnd  (DicomDirImage   *dd);
00140    bool AddPrivateToEnd(DicomDirPrivate *dd);
00141    
00142    void SetElements(std::string const &path, VectDocument const &list);
00143    void SetElement (std::string const &path, DicomDirType type,
00144                     Document *header);
00145    void MoveSQItem(DocEntrySet *dst, DocEntrySet *src);
00146 
00147    static bool HeaderLessThan(Document *header1, Document *header2);
00148 
00149 // Variables
00150 
00152    DicomDirMeta *MetaElems;
00153 
00155    ListDicomDirPatient Patients;
00156    ListDicomDirPatient::iterator ItPatient;
00157 
00159    bool ParseDir;
00160 
00161 };
00162 } // end namespace gdcm
00163 //-----------------------------------------------------------------------------
00164 #endif

Generated on Fri Aug 24 12:59:29 2007 for gdcm by  doxygen 1.4.6