1 /*=========================================================================
4 Module: $RCSfile: gdcmDicomDirElement.cxx,v $
6 Date: $Date: 2004/11/03 18:08:56 $
7 Version: $Revision: 1.21 $
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 void FillDefaultDIRDict(DicomDirElement *dde);
30 //-----------------------------------------------------------------------------
31 // Constructor / Destructor
34 * \brief constructor : populates the chained lists
35 * from the file 'Dicts/DicomDir.dic'
37 DicomDirElement::DicomDirElement()
39 std::string filename = DictSet::BuildDictPath() + DICT_ELEM;
40 std::ifstream from(filename.c_str());
44 "DicomDirElement::DicomDirElement: can't open dictionary",
46 FillDefaultDIRDict( this );
57 from.getline(buff, 1024, ' ');
60 if( (type=="metaElem") || (type=="patientElem") ||
61 (type=="studyElem") || (type=="serieElem") ||
64 from >> std::hex >> elem.Group >> elem.Elem;
67 from.getline(buff, 1024, '"');
69 from.getline(buff, 1024, '"');
72 AddNewEntry(type, elem);
76 dbg.Error("DicomDirElement::DicomDirElement: Error parsing file",
78 dbg.Error("Type", type.c_str(), " is not registered as valid" );
80 from.getline(buff, 1024, '\n');
87 * \ingroup DicomDirElement
88 * \brief canonical destructor
90 DicomDirElement::~DicomDirElement()
92 DicomDirMetaList.clear();
93 DicomDirPatientList.clear();
94 DicomDirStudyList.clear();
95 DicomDirSerieList.clear();
96 DicomDirImageList.clear();
99 //-----------------------------------------------------------------------------
102 * \ingroup DicomDirElement
104 * \todo add a 'Print Level' check
105 * @param os The output stream to be written to.
107 void DicomDirElement::Print(std::ostream &os)
109 std::ostringstream s;
110 std::list<Element>::iterator it;
111 //char greltag[10]; //group element tag
114 s << "Meta Elements :"<<std::endl;
115 for (it = DicomDirMetaList.begin(); it != DicomDirMetaList.end(); ++it)
117 greltag = Util::Format("%04x|%04x ",it->Group,it->Elem);
118 s << " (" << greltag << ") = " << it->Value << std::endl;
121 s << "Patient Elements :"<<std::endl;
122 for (it = DicomDirPatientList.begin(); it != DicomDirPatientList.end(); ++it)
124 greltag = Util::Format("%04x|%04x ",it->Group,it->Elem);
125 s << " (" << greltag << ") = " << it->Value << std::endl;
128 s << "Study Elements :"<<std::endl;
129 for (it = DicomDirStudyList.begin(); it != DicomDirStudyList.end(); ++it)
131 greltag = Util::Format("%04x|%04x ", it->Group, it->Elem);
132 s << " (" << greltag << ") = " << it->Value << std::endl;
135 s << "Serie Elements :"<<std::endl;
136 for (it = DicomDirSerieList.begin(); it != DicomDirSerieList.end(); ++it)
138 greltag = Util::Format("%04x|%04x ", it->Group, it->Elem);
139 s << " (" << greltag << ") = " << it->Value << std::endl;
142 s << "Image Elements :"<<std::endl;
143 for (it = DicomDirImageList.begin(); it != DicomDirImageList.end(); ++it)
145 greltag = Util::Format("%04x|%04x ", it->Group, it->Elem);
146 s << " (" << greltag << ") = " << it->Value << std::endl;
152 //-----------------------------------------------------------------------------
155 bool DicomDirElement::AddNewEntry(std::string const & type,
156 Element const & elem)
158 if( type == "metaElem" )
160 DicomDirMetaList.push_back(elem);
162 else if( type == "patientElem" )
164 DicomDirPatientList.push_back(elem);
166 else if( type == "studyElem" )
168 DicomDirStudyList.push_back(elem);
170 else if( type == "serieElem" )
172 DicomDirSerieList.push_back(elem);
174 else if( type == "imageElem" )
176 DicomDirImageList.push_back(elem);
184 //-----------------------------------------------------------------------------
187 //-----------------------------------------------------------------------------
190 //-----------------------------------------------------------------------------
192 } // end namespace gdcm