Program: gdcm
Module: $RCSfile: gdcmDocEntrySet.cxx,v $
Language: C++
- Date: $Date: 2004/10/27 22:31:12 $
- Version: $Revision: 1.25 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.29 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "gdcmDebug.h"
#include "gdcmCommon.h"
+#include "gdcmDictSet.h"
#include "gdcmGlobal.h"
#include "gdcmException.h"
#include "gdcmDocEntry.h"
// Protected
/**
- * \brief Gets a Dicom Element inside a SQ Item Entry, by name
+ * \brief Gets a Dicom Element inside a SQ Item Entry, by name
+ * @param name of the element to be found.
* @return
*/
- DocEntry *DocEntrySet::GetDocEntryByName(std::string const & name)
- {
+DocEntry* DocEntrySet::GetDocEntryByName( TagName const & name )
+{
Dict *pubDict = Global::GetDicts()->GetDefaultPubDict();
DictEntry *dictEntry = pubDict->GetDictEntryByName(name);
if( !dictEntry )
* @param fourth owner group
* @param name english name
*/
-DictEntry* DocEntrySet::NewVirtualDictEntry(uint16_t group,
- uint16_t element,
- std::string const & vr,
- std::string const & fourth,
- std::string const & name)
+DictEntry* DocEntrySet::NewVirtualDictEntry( uint16_t group,
+ uint16_t element,
+ TagName const & vr,
+ TagName const & fourth,
+ TagName const & name )
{
return Global::GetDicts()->NewVirtualDictEntry(group,element,vr,fourth,name);
}
* Creates a new DocEntry (without any 'value' ...)
* @param group group number of the underlying DictEntry
* @param elem elem number of the underlying DictEntry
- * @param VR V(alue) R(epresentation) of the Entry -if private Entry-
-
+ * @param vr V(alue) R(epresentation) of the Entry -if private Entry-
*/
DocEntry* DocEntrySet::NewDocEntryByNumber(uint16_t group, uint16_t elem,
TagName const & vr)
// Find out if the tag we encountered is in the dictionaries:
Dict *pubDict = Global::GetDicts()->GetDefaultPubDict();
DictEntry *dictEntry = pubDict->GetDictEntryByNumber(group, elem);
- if (!dictEntry)
+ std::string goodVR = vr;
+ DictEntry *goodDict = dictEntry;
+
+ // Check if the would VR is good
+ if (elem==0x0000)
+ goodVR="UL";
+
+ // Check if the DictEntry VR corresponds with the would VR
+ if (goodDict)
+ if (goodDict->GetVR() != goodVR && goodVR!=GDCM_UNKNOWN)
+ goodDict=NULL;
+
+ // Create a new virtual DictEntry if necessary
+ if (!goodDict)
{
- dictEntry = NewVirtualDictEntry(group, elem, vr);
+ if (dictEntry)
+ goodDict = NewVirtualDictEntry(group, elem, goodVR,"FIXME",dictEntry->GetName());
+ else
+ goodDict = NewVirtualDictEntry(group, elem, goodVR);
}
- DocEntry *newEntry = new DocEntry(dictEntry);
+ // Create the DocEntry
+ DocEntry *newEntry = new DocEntry(goodDict);
if (!newEntry)
{
dbg.Verbose(1, "SQItem::NewDocEntryByNumber",
}
return newEntry;
}
+
/* \brief
* Probabely move, as is, to DocEntrySet, as a non virtual method
* and remove Document::NewDocEntryByName
DictEntry *newTag = pubDict->GetDictEntryByName(name);
if (!newTag)
{
- newTag = NewVirtualDictEntry(0xffff, 0xffff, "LO", "unkn", name);
+ newTag = NewVirtualDictEntry(0xffff, 0xffff, "LO", GDCM_UNKNOWN, name);
}
DocEntry* newEntry = new DocEntry(newTag);