X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmObject.cxx;h=331c41073a2369334946ab8d4e6a5bd7c45e946f;hb=0a7355e1aaeeabadba3e464bdef81bcff5777d37;hp=54c56ca179572a4a4a4f4327903127e7a5a91098;hpb=58d648ca53b7940a5c10f3e1f62bc0d17846c324;p=gdcm.git diff --git a/src/gdcmObject.cxx b/src/gdcmObject.cxx index 54c56ca1..331c4107 100644 --- a/src/gdcmObject.cxx +++ b/src/gdcmObject.cxx @@ -1,45 +1,120 @@ -// gdcmObject.cxx -//----------------------------------------------------------------------------- +/*========================================================================= + + Program: gdcm + Module: $RCSfile: gdcmObject.cxx,v $ + Language: C++ + Date: $Date: 2004/07/17 22:47:01 $ + Version: $Revision: 1.22 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + #include "gdcmObject.h" -#include "gdcmUtil.h" +#include "gdcmGlobal.h" +#include "gdcmDebug.h" +#include "gdcmValEntry.h" +//----------------------------------------------------------------------------- +/** + * \ingroup gdcmObject + * \brief Constructor + * + * @param ptagHT pointer to the HTable (gdcmObject needs it + * to build the gdcmDocEntries) + * @param depth Seaquence depth level + */ + +gdcmObject::gdcmObject(TagDocEntryHT *ptagHT, int depth) + : gdcmSQItem (depth) { + this->ptagHT = ptagHT; +} -/* -gdcmObject::gdcmObject() { +/** + * \ingroup gdcmObject + * \brief Canonical destructor. + */ +gdcmObject::~gdcmObject(void) { } -gdcmObject::~gdcmObject() { -} -*/ +//----------------------------------------------------------------------------- +// Public -std::string gdcmObject::GetEntryByNumber(guint16 group, guint16 element) { - guint16 gr, el; - ListTag::iterator deb , fin; - deb = beginObj; - fin = endObj; - - ListTag::iterator i=deb; - - if (deb == fin) cout << "Big Trouble : Empty List!" <GetKey()]=*i; + } + return(HT); } +//----------------------------------------------------------------------------- +// Protected +/** + * \brief add the 'Object' related Dicom Elements to the listEntries + * of a partially created DICOMDIR + */ +void gdcmObject::FillObject(std::list elemList) { -std::string gdcmObject::GetEntryByName(TagName name) { - gdcmDict *PubDict=gdcmGlobal::GetDicts()->GetDefaultPubDict(); - gdcmDictEntry *dictEntry = (*PubDict).GetDictEntryByName(name); - if( dictEntry == NULL) - return GDCM_UNFOUND; - return GetEntryByNumber(dictEntry->GetGroup(),dictEntry->GetElement()); -} + // FillObject rempli le SQItem qui sera accroche au bon endroit + + std::list::iterator it; + uint16_t tmpGr,tmpEl; + gdcmDictEntry *dictEntry; + gdcmValEntry *entry; + + //gdcmSQItem *s = new gdcmSQItem; + + // for all the Elements found in they own part of the DicomDir dict. + for(it=elemList.begin();it!=elemList.end();++it) + { + tmpGr=it->group; + tmpEl=it->elem; + dictEntry=gdcmGlobal::GetDicts()->GetDefaultPubDict()->GetDictEntryByNumber(tmpGr,tmpEl); + entry=new gdcmValEntry(dictEntry); + entry->SetOffset(0); // just to avoid further missprinting + entry->SetValue(it->value); + // dealing with value length ... + + if(dictEntry->GetGroup()==0xfffe) + { + entry->SetLength(entry->GetValue().length()); + } + else if( (dictEntry->GetVR()=="UL") || (dictEntry->GetVR()=="SL") ) + { + entry->SetLength(4); + } + else if( (dictEntry->GetVR()=="US") || (dictEntry->GetVR()=="SS") ) + { + entry->SetLength(2); + } + else if(dictEntry->GetVR()=="SQ") + { + entry->SetLength(0xffffffff); + } + else + { + entry->SetLength(entry->GetValue().length()); + } + AddDocEntry(entry); + } +}