1 /*=========================================================================
4 Module: $RCSfile: gdcmDicomDirElement.cxx,v $
6 Date: $Date: 2005/10/19 12:01:50 $
7 Version: $Revision: 1.40 $
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, DicomElement 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)
160 //-----------------------------------------------------------------------------
163 //-----------------------------------------------------------------------------
166 //-----------------------------------------------------------------------------
170 * @param os The output stream to be written to.
172 void DicomDirElement::Print(std::ostream &os)
174 std::ostringstream s;
175 std::list<DicomElement>::iterator it;
176 //char greltag[10]; //group element tag
179 s << "Meta Elements :"<<std::endl;
180 for (it = DicomDirMetaList.begin(); it != DicomDirMetaList.end(); ++it)
182 greltag = DictEntry::TranslateToKey(it->Group,it->Elem);
183 s << " (" << greltag << ") = " << it->Value << std::endl;
186 s << "Patient Elements :"<<std::endl;
187 for (it = DicomDirPatientList.begin(); it != DicomDirPatientList.end(); ++it)
189 greltag = DictEntry::TranslateToKey(it->Group,it->Elem);
190 s << " (" << greltag << ") = " << it->Value << std::endl;
193 s << "Study Elements :"<<std::endl;
194 for (it = DicomDirStudyList.begin(); it != DicomDirStudyList.end(); ++it)
196 greltag = DictEntry::TranslateToKey(it->Group, it->Elem);
197 s << " (" << greltag << ") = " << it->Value << std::endl;
200 s << "Serie Elements :"<<std::endl;
201 for (it = DicomDirSerieList.begin(); it != DicomDirSerieList.end(); ++it)
203 greltag = DictEntry::TranslateToKey( it->Group, it->Elem);
204 s << " (" << greltag << ") = " << it->Value << std::endl;
207 s << "Image Elements :"<<std::endl;
208 for (it = DicomDirImageList.begin(); it != DicomDirImageList.end(); ++it)
210 greltag = DictEntry::TranslateToKey(it->Group, it->Elem);
211 s << " (" << greltag << ") = " << it->Value << std::endl;
217 //-----------------------------------------------------------------------------
218 } // end namespace gdcm