X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDirElement.cxx;h=3d5733d505f80d23aa3185be9ba5c08b7b5478bc;hb=b06cbd9177331d793223eac6bf8b2bccf874e7e3;hp=65c05e51bb310f54670e428f642a84bc30cd3b7f;hpb=616fe6757e5e27ce6ebb48e9e3bf3b42ab15be1c;p=gdcm.git diff --git a/src/gdcmDicomDirElement.cxx b/src/gdcmDicomDirElement.cxx index 65c05e51..3d5733d5 100644 --- a/src/gdcmDicomDirElement.cxx +++ b/src/gdcmDicomDirElement.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDirElement.cxx,v $ Language: C++ - Date: $Date: 2004/11/03 18:08:56 $ - Version: $Revision: 1.21 $ + Date: $Date: 2007/05/23 14:18:08 $ + Version: $Revision: 1.45 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -24,12 +24,15 @@ #include #include -namespace gdcm +namespace GDCM_NAME_SPACE { +//----------------------------------------------------------------------------- +/// \brief auto generate function, to fill up the default elements for +/// a DICOMDIR, if relevant file is not found on user's disk void FillDefaultDIRDict(DicomDirElement *dde); + //----------------------------------------------------------------------------- // Constructor / Destructor - /** * \brief constructor : populates the chained lists * from the file 'Dicts/DicomDir.dic' @@ -38,53 +41,68 @@ DicomDirElement::DicomDirElement() { std::string filename = DictSet::BuildDictPath() + DICT_ELEM; std::ifstream from(filename.c_str()); - if(!from) + if ( !from ) { - dbg.Verbose(2, - "DicomDirElement::DicomDirElement: can't open dictionary", - filename.c_str()); + gdcmWarningMacro( "Can't open DicomDirElement dictionary" + << filename.c_str()); FillDefaultDIRDict( this ); } else { char buff[1024]; - std::string type; - Element elem; - + char buff2[1024]; + std::string strType; + DicomElement elem; + DicomDirType type; while (!from.eof()) { from >> std::ws; from.getline(buff, 1024, ' '); - type = buff; + strType = buff; + + if ( strType == "imageElem" ) + type = DD_IMAGE; + else if ( strType == "serieElem" ) + type = DD_SERIE; + else if ( strType == "studyElem" ) + type = DD_STUDY; + else if ( strType == "patientElem" ) + type = DD_PATIENT; + else if ( strType == "metaElem" ) + type = DD_META; + else + { + gdcmWarningMacro("Unknown type (" << strType + << ") found in the file : " + << filename.c_str()); + type = DD_UNKNOWN; + } - if( (type=="metaElem") || (type=="patientElem") || - (type=="studyElem") || (type=="serieElem") || - (type=="imageElem") ) + if ( type!=DD_UNKNOWN ) { - from >> std::hex >> elem.Group >> elem.Elem; + from >> std::hex >> elem.Group >> elem.Elem;// >> elem.VR; + from.getline(buff2, 1024, '"'); + from >> std::ws; + from.getline(buff2, 1024, '"'); + elem.VR[0] = buff2[0]; + elem.VR[1] = buff2[1]; + // std::cout << "VR : [" << elem.VR[0] << elem.VR[1] << "]" << std::endl; // JPR from >> std::ws; from.getline(buff, 1024, '"'); from >> std::ws; from.getline(buff, 1024, '"'); elem.Value = buff; - - AddNewEntry(type, elem); - } - else - { - dbg.Error("DicomDirElement::DicomDirElement: Error parsing file", - filename.c_str()); - dbg.Error("Type", type.c_str(), " is not registered as valid" ); + + AddEntry(type, elem); } from.getline(buff, 1024, '\n'); } - from.close(); + from.close(); } } /** - * \ingroup DicomDirElement * \brief canonical destructor */ DicomDirElement::~DicomDirElement() @@ -96,53 +114,108 @@ DicomDirElement::~DicomDirElement() DicomDirImageList.clear(); } +//----------------------------------------------------------------------------- +// Public +/** + * \brief Add an entry to one of the DicomDir Elements + * (Patient, Study, Serie, Image) + * @param type Element type (DD_PATIENT, DD_STUDY, DD_SERIE, DD_IMAGE) + * @param elem elem + */ +bool DicomDirElement::AddEntry(DicomDirType type, DicomElement const &elem) +{ + switch( type ) + { + case DD_IMAGE : + DicomDirImageList.push_back(elem); + break; + case DD_SERIE : + DicomDirSerieList.push_back(elem); + break; + case DD_STUDY : + DicomDirStudyList.push_back(elem); + break; + case DD_PATIENT : + DicomDirPatientList.push_back(elem); + break; + case DD_META : + DicomDirMetaList.push_back(elem); + break; + default : + return false; + } + return true; +} + +/** + * \brief Add an entry to one of the DicomDir Elements + * (Patient, Study, Serie, Image) + * @param type Element type (DD_PATIENT, DD_STUDY, DD_SERIE, DD_IMAGE) + * @param group Group number of the entry to be added + * @param elem Element number of the entry to be added + * @param vr Value Representation of the entry to be added + */ +void DicomDirElement::AddDicomDirElement(DicomDirType type, + uint16_t group, uint16_t elem, VRKey vr) +{ + DicomElement el; + el.Group = group; + el.Elem = elem; + el.VR = vr; + el.Value = ""; + AddEntry(type, el); +} + +//----------------------------------------------------------------------------- +// Protected + +//----------------------------------------------------------------------------- +// Private + //----------------------------------------------------------------------------- // Print /** - * \ingroup DicomDirElement * \brief Print all - * \todo add a 'Print Level' check * @param os The output stream to be written to. */ -void DicomDirElement::Print(std::ostream &os) +void DicomDirElement::Print(std::ostream &os,std::string const &) { std::ostringstream s; - std::list::iterator it; - //char greltag[10]; //group element tag - std::string greltag; + std::list::iterator it; + TagKey greltag; s << "Meta Elements :"<Group,it->Elem); + greltag = DictEntry::TranslateToKey(it->Group,it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Patient Elements :"<Group,it->Elem); + greltag = DictEntry::TranslateToKey(it->Group,it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Study Elements :"<Group, it->Elem); + greltag = DictEntry::TranslateToKey(it->Group, it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Serie Elements :"<Group, it->Elem); + greltag = DictEntry::TranslateToKey( it->Group, it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Image Elements :"<Group, it->Elem); + greltag = DictEntry::TranslateToKey(it->Group, it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } @@ -150,43 +223,4 @@ void DicomDirElement::Print(std::ostream &os) } //----------------------------------------------------------------------------- -// Public - -bool DicomDirElement::AddNewEntry(std::string const & type, - Element const & elem) -{ - if( type == "metaElem" ) - { - DicomDirMetaList.push_back(elem); - } - else if( type == "patientElem" ) - { - DicomDirPatientList.push_back(elem); - } - else if( type == "studyElem" ) - { - DicomDirStudyList.push_back(elem); - } - else if( type == "serieElem" ) - { - DicomDirSerieList.push_back(elem); - } - else if( type == "imageElem" ) - { - DicomDirImageList.push_back(elem); - } - else - { - return false; - } - return true; -} -//----------------------------------------------------------------------------- -// Protected - -//----------------------------------------------------------------------------- -// Private - -//----------------------------------------------------------------------------- - } // end namespace gdcm