1 /*=========================================================================
4 Module: $RCSfile: gdcmDicomDirElement.cxx,v $
6 Date: $Date: 2005/11/04 15:29:59 $
7 Version: $Revision: 1.42 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
19 #include "gdcmDicomDirElement.h"
21 #include "gdcmDebug.h"
22 #include "gdcmDictSet.h"
29 //-----------------------------------------------------------------------------
30 /// \brief auto generate function, to fill up the default elements for
31 /// a DICOMDIR, if relevant file is not found on user's disk
32 void FillDefaultDIRDict(DicomDirElement *dde);
34 //-----------------------------------------------------------------------------
35 // Constructor / Destructor
37 * \brief constructor : populates the chained lists
38 * from the file 'Dicts/DicomDir.dic'
40 DicomDirElement::DicomDirElement()
42 std::string filename = DictSet::BuildDictPath() + DICT_ELEM;
43 std::ifstream from(filename.c_str());
46 gdcmWarningMacro( "Can't open DicomDirElement dictionary"
48 FillDefaultDIRDict( this );
60 from.getline(buff, 1024, ' ');
63 if ( strType == "imageElem" )
65 else if ( strType == "serieElem" )
67 else if ( strType == "studyElem" )
69 else if ( strType == "patientElem" )
71 else if ( strType == "metaElem" )
75 gdcmWarningMacro("Unknown type (" << strType
76 << ") found in the file : "
81 if ( type!=DD_UNKNOWN )
83 from >> std::hex >> elem.Group >> elem.Elem;
86 from.getline(buff, 1024, '"');
88 from.getline(buff, 1024, '"');
93 from.getline(buff, 1024, '\n');
100 * \brief canonical destructor
102 DicomDirElement::~DicomDirElement()
104 DicomDirMetaList.clear();
105 DicomDirPatientList.clear();
106 DicomDirStudyList.clear();
107 DicomDirSerieList.clear();
108 DicomDirImageList.clear();
111 //-----------------------------------------------------------------------------
114 * \brief Add an entry to one of the DicomDir Elements
115 * (Patient, Study, Serie, Image)
116 * @param type Element type (DD_PATIENT, DD_STUDY, DD_SERIE, DD_IMAGE)
119 bool DicomDirElement::AddEntry(DicomDirType type, DicomElement const &elem)
124 DicomDirImageList.push_back(elem);
127 DicomDirSerieList.push_back(elem);
130 DicomDirStudyList.push_back(elem);
133 DicomDirPatientList.push_back(elem);
136 DicomDirMetaList.push_back(elem);
145 * \brief Add an entry to one of the DicomDir Elements
146 * (Patient, Study, Serie, Image)
147 * @param type Element type (DD_PATIENT, DD_STUDY, DD_SERIE, DD_IMAGE)
148 * @param group Group number of the entry to be added
149 * @param elem Element number of the entry to be added
151 void DicomDirElement::AddDicomDirElement(DicomDirType type,
152 uint16_t group, uint16_t elem)
161 //-----------------------------------------------------------------------------
164 //-----------------------------------------------------------------------------
167 //-----------------------------------------------------------------------------
171 * @param os The output stream to be written to.
173 void DicomDirElement::Print(std::ostream &os,std::string const &)
175 std::ostringstream s;
176 std::list<DicomElement>::iterator it;
177 //char greltag[10]; //group element tag
180 s << "Meta Elements :"<<std::endl;
181 for (it = DicomDirMetaList.begin(); it != DicomDirMetaList.end(); ++it)
183 greltag = DictEntry::TranslateToKey(it->Group,it->Elem);
184 s << " (" << greltag << ") = " << it->Value << std::endl;
187 s << "Patient Elements :"<<std::endl;
188 for (it = DicomDirPatientList.begin(); it != DicomDirPatientList.end(); ++it)
190 greltag = DictEntry::TranslateToKey(it->Group,it->Elem);
191 s << " (" << greltag << ") = " << it->Value << std::endl;
194 s << "Study Elements :"<<std::endl;
195 for (it = DicomDirStudyList.begin(); it != DicomDirStudyList.end(); ++it)
197 greltag = DictEntry::TranslateToKey(it->Group, it->Elem);
198 s << " (" << greltag << ") = " << it->Value << std::endl;
201 s << "Serie Elements :"<<std::endl;
202 for (it = DicomDirSerieList.begin(); it != DicomDirSerieList.end(); ++it)
204 greltag = DictEntry::TranslateToKey( it->Group, it->Elem);
205 s << " (" << greltag << ") = " << it->Value << std::endl;
208 s << "Image Elements :"<<std::endl;
209 for (it = DicomDirImageList.begin(); it != DicomDirImageList.end(); ++it)
211 greltag = DictEntry::TranslateToKey(it->Group, it->Elem);
212 s << " (" << greltag << ") = " << it->Value << std::endl;
218 //-----------------------------------------------------------------------------
219 } // end namespace gdcm