1 /*=========================================================================
4 Module: $RCSfile: gdcmDicomDirElement.cxx,v $
6 Date: $Date: 2005/06/24 10:55:58 $
7 Version: $Revision: 1.38 $
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 == "metaElem" )
65 else if ( strType == "patientElem" )
67 else if ( strType == "studyElem" )
69 else if ( strType == "serieElem" )
71 else if ( strType == "imageElem" )
75 gdcmWarningMacro("Unknown type found in the file : "
80 if ( type!=DD_UNKNOWN )
82 from >> std::hex >> elem.Group >> elem.Elem;
85 from.getline(buff, 1024, '"');
87 from.getline(buff, 1024, '"');
92 from.getline(buff, 1024, '\n');
99 * \brief canonical destructor
101 DicomDirElement::~DicomDirElement()
103 DicomDirMetaList.clear();
104 DicomDirPatientList.clear();
105 DicomDirStudyList.clear();
106 DicomDirSerieList.clear();
107 DicomDirImageList.clear();
110 //-----------------------------------------------------------------------------
113 * \brief Add an entry to one of the DicomDir Elements
114 * (Patient, Study, Serie, Image)
115 * @param type Element type (DD_PATIENT, DD_STUDY, DD_SERIE, DD_IMAGE)
118 bool DicomDirElement::AddEntry(DicomDirType type, Element const &elem)
123 DicomDirMetaList.push_back(elem);
126 DicomDirPatientList.push_back(elem);
129 DicomDirStudyList.push_back(elem);
132 DicomDirSerieList.push_back(elem);
135 DicomDirImageList.push_back(elem);
144 * \brief Add an entry to one of the DicomDir Elements
145 * (Patient, Study, Serie, Image)
146 * @param type Element type (DD_PATIENT, DD_STUDY, DD_SERIE, DD_IMAGE)
147 * @param group Group number of the entry to be added
148 * @param elem Element number of the entry to be added
150 void DicomDirElement::AddDicomDirElement(DicomDirType type,
151 uint16_t group, uint16_t elem)
159 //-----------------------------------------------------------------------------
162 //-----------------------------------------------------------------------------
165 //-----------------------------------------------------------------------------
169 * @param os The output stream to be written to.
171 void DicomDirElement::Print(std::ostream &os)
173 std::ostringstream s;
174 std::list<Element>::iterator it;
175 //char greltag[10]; //group element tag
178 s << "Meta Elements :"<<std::endl;
179 for (it = DicomDirMetaList.begin(); it != DicomDirMetaList.end(); ++it)
181 greltag = DictEntry::TranslateToKey(it->Group,it->Elem);
182 s << " (" << greltag << ") = " << it->Value << std::endl;
185 s << "Patient Elements :"<<std::endl;
186 for (it = DicomDirPatientList.begin(); it != DicomDirPatientList.end(); ++it)
188 greltag = DictEntry::TranslateToKey(it->Group,it->Elem);
189 s << " (" << greltag << ") = " << it->Value << std::endl;
192 s << "Study Elements :"<<std::endl;
193 for (it = DicomDirStudyList.begin(); it != DicomDirStudyList.end(); ++it)
195 greltag = DictEntry::TranslateToKey(it->Group, it->Elem);
196 s << " (" << greltag << ") = " << it->Value << std::endl;
199 s << "Serie Elements :"<<std::endl;
200 for (it = DicomDirSerieList.begin(); it != DicomDirSerieList.end(); ++it)
202 greltag = DictEntry::TranslateToKey( it->Group, it->Elem);
203 s << " (" << greltag << ") = " << it->Value << std::endl;
206 s << "Image Elements :"<<std::endl;
207 for (it = DicomDirImageList.begin(); it != DicomDirImageList.end(); ++it)
209 greltag = DictEntry::TranslateToKey(it->Group, it->Elem);
210 s << " (" << greltag << ") = " << it->Value << std::endl;
216 //-----------------------------------------------------------------------------
217 } // end namespace gdcm