#include "gdcmUtil.h"
#include "gdcmElValSet.h"
+#define DEBUG 0
+
TagElValueHT & gdcmElValSet::GetTagHt(void) {
return tagHt;
NameHt[newElValue->GetName()] = newElValue;
}
-// TODO : faire un gdcmElValSet::ReplaceOrCreate qui remplace si ça existe, qui cree sinon
-
-void gdcmElValSet::ReplaceOrCreate(gdcmElValue * newElValue) {
-
- TagKey key = newElValue->GetKey();
-
- if (tagHt.count(key) > 1)
- dbg.Verbose(0, "gdcmElValSet::GetElValueByNumber",
- "multiple entries for this key (FIXME) !");
-
- if (tagHt.count(key)) {
- tagHt.erase(key);
- tagHt.erase(newElValue->GetName());
- }
-
- tagHt [key] = newElValue;
- NameHt[newElValue->GetName()] = newElValue;
-}
-
-
void gdcmElValSet::Print(ostream & os) {
for (TagElValueHT::iterator tag = tagHt.begin();
tag != tagHt.end();
os << "[" << tag->second->GetName() << "]";
os << "[" << tag->second->GetVR() << "]";
os << " lgr : " << tag->second->GetLength();
- os << endl;
+ os << endl;
}
}
return NameHt.find(TagName)->second->GetValue();
}
+
int gdcmElValSet::SetElValueByNumber(string content,
guint32 group, guint32 element) {
+
+// TODO : comprendre pourquoi ils sont déclares comme des guint32, alors que c'est des guint16
+
TagKey key = gdcmDictEntry::TranslateToKey(group, element);
if ( ! tagHt.count(key))
return 0;
dbg.Verbose(0, "gdcmElValSet::SetElValueByNumber",
"multiple entries for this key (FIXME) !");
return (0);
- }
+ }
+
tagHt[key]->SetValue(content);
// Question : m à j LgrElem ?
}
// Sorry for the DEBUG's, but tomorow is gonna be hoter than today
-#define DEBUG 0
int gdcmElValSet::Write(FILE * _fp) {
-// ATTENTION : fonction non terminée (commitée a titre de precaution)
-
guint16 gr, el;
guint32 lgr;
const char * val;
string vr;
guint32 val_uint32;
- gint32 val_int32;
guint16 val_uint16;
- gint16 val_int16;;
vector<string> tokens;
void *ptr;
- char str_lgrCalcGroupe[10];
-
string implicitVRTransfertSyntax = "1.2.840.10008.1.2";
// Utilisées pour le calcul Group Length
- int deja = 0, prem=0;
guint32 lgrCalcGroupe=0;
gdcmElValue *elem, *elemZ, *elemZPrec;
guint16 grCourant = 0;
// dans l'image native
//
// cf : code IdDcmWriteFile dans libido/src/dcmwrite.c
-
-if (1) { // Risque de pb dans le calcul des lgr de chaque groupe. On le saute pour le moment!
-
+
// On fait de l'implicit VR little Endian
// (pour moins se fairche sur processeur INTEL)
// On force le TRANSFERT SYNTAX UID
if(DEBUG)printf("ajout elem OOOO pour gr %04x\n",gr);
} else {
elemZ=elem;
- if(DEBUG)printf("maj elmeZ\n");
+ if(DEBUG)printf("maj elemZ\n");
}
- ostringstream fock;
- fock << lgrCalcGroupe;
+ ostringstream f;
+ f << lgrCalcGroupe;
//sprintf(str_lgrCalcGroupe,"%d",lgrCalcGroupe);
- elemZPrec->SetValue(fock.str());
- if(DEBUG)printf("ecriture lgr (%d, %s) pour gr %04x\n",lgrCalcGroupe, fock.str().c_str(), grCourant);
+ elemZPrec->SetValue(f.str());
+ if(DEBUG)printf("ecriture lgr (%d, %s) pour gr %04x\n",lgrCalcGroupe, f.str().c_str(), grCourant);
if(DEBUG)printf ("%04x %04x [%s]\n",elemZPrec->GetGroup(), elemZPrec->GetElement(),elemZPrec->GetValue().c_str());
if(DEBUG)cout << "Addresse elemZPrec " << elemZPrec<< endl;
elemZPrec=elemZ;
}
}
-} // fin if (1)
-
-
// restent à tester les echecs en écriture (apres chaque fwrite)
for (TagElValueHT::iterator tag2 = tagHt.begin();
}
-
-
int gdcmElValSet::WriteAcr(FILE * _fp) {
-
-
-// ATTENTION : fonction non terminée (commitée a titre de precaution)
-// ATTENTION : fusioner le code avec celui de lValSet::Write
-
+//
+// ATTENTION : fusioner le code avec celui de gdcmElValSet::Write
+//
guint16 gr, el;
guint32 lgr;
const char * val;
string vr;
guint32 val_uint32;
- gint32 val_int32;
guint16 val_uint16;
- gint16 val_int16;
vector<string> tokens;
void *ptr;
- char str_lgrCalcGroupe[10];
//string implicitVRTransfertSyntax = "1.2.840.10008.1.2"; // supprime par rapport à Write
// Utilisées pour le calcul Group Length
- int deja = 0;
+
guint32 lgrCalcGroupe=0;
gdcmElValue *elem, *elemZ, *elemZPrec;
guint16 grCourant = 0;
- // Question :
- // Comment pourrait-on tester si on est TrueDicom ou non ,
- // (FileType est un champ de gdcmHeader ...)
- //
-
// On parcourt la table pour recalculer la longueur des 'elements 0x0000'
// au cas ou un tag ai été ajouté par rapport à ce qui a été lu
// dans l'image native
//
// cf : code IdDcmWriteFile dans libido/src/dcmwrite.c
-
-
-
+
TagElValueHT::iterator tag = tagHt.begin();
elem = tag->second;
elem = tag->second;
gr = elem->GetGroup();
el = elem->GetElement();
+ vr = elem->GetVR();
+
+ if (vr == "SQ") continue; // pas SEQUENCE en ACR-NEMA
+ // WARNING : risque de pb
+ // si on est descendu 'a l'interieur' des SQ
if ( (gr != grCourant) /*&& // On arrive sur un nv Groupe
(el != 0xfffe) */ ) {
if(DEBUG)printf("maj elmeZ\n");
}
- ostringstream fock;
- fock << lgrCalcGroupe;
- //sprintf(str_lgrCalcGroupe,"%d",lgrCalcGroupe);
- elemZPrec->SetValue(fock.str());
- if(DEBUG)printf("ecriture lgr (%d, %s) pour gr %04x\n",lgrCalcGroupe, fock.str().c_str(), grCourant);
+ ostringstream f;
+ f << lgrCalcGroupe;
+ elemZPrec->SetValue(f.str());
+ if(DEBUG)printf("ecriture lgr (%d, %s) pour gr %04x\n",lgrCalcGroupe, f.str().c_str(), grCourant);
if(DEBUG)printf ("%04x %04x [%s]\n",elemZPrec->GetGroup(), elemZPrec->GetElement(),elemZPrec->GetValue().c_str());
if(DEBUG)cout << "Addresse elemZPrec " << elemZPrec<< endl;
elemZPrec=elemZ;
return(1);
}
+
+// Sorry for the DEBUG's, but tomorow is gonna be hoter than today
+
+int gdcmElValSet::WriteExplVR(FILE * _fp) {
+
+//
+// ATTENTION : fusioner le code avec celui de gdcmElValSet::Write
+//
+
+ guint16 gr, el;
+ guint32 lgr;
+ const char * val;
+ string vr;
+ guint32 val_uint32;
+ guint16 val_uint16;
+ guint16 z=0, shortLgr;
+
+ vector<string> tokens;
+
+ void *ptr;
+
+ string explicitVRTransfertSyntax = "1.2.840.10008.1.2.1";
+
+ // Utilisées pour le calcul Group Length
+ guint32 lgrCalcGroupe=0;
+ gdcmElValue *elem, *elemZ, *elemZPrec;
+ guint16 grCourant = 0;
+
+ // Question :
+ // Comment pourrait-on tester si on est TrueDicom ou non ,
+ // (FileType est un champ de gdcmHeader ...)
+ //
+
+ // On parcourt la table pour recalculer la longueur des 'elements 0x0000'
+ // au cas ou un tag ai été ajouté par rapport à ce qui a été lu
+ // dans l'image native
+ //
+ // cf : code IdDcmWriteFile dans libido/src/dcmwrite.c
+
+
+ // On fait de l'Explicit VR little Endian
+
+
+ SetElValueByNumber(explicitVRTransfertSyntax, 0x0002, 0x0010);
+ SetElValueLengthByNumber(20, 0x0002, 0x0010); // Le 0 de fin de chaine doit etre stocké, dans ce cas // ???
+
+ TagElValueHT::iterator tag = tagHt.begin();
+
+ elem = tag->second;
+ gr = elem->GetGroup();
+ el = elem->GetElement();
+
+ if (el != 0x0000) {
+ if(DEBUG)printf("ajout elem OOOO premiere fois\n");
+ gdcmDictEntry * tagZ = new gdcmDictEntry(gr, 0x0000, "UL");
+ elemZPrec = new gdcmElValue(tagZ); // on le cree
+ elemZPrec->SetLength(4);
+ Add(elemZPrec); // On l'accroche à sa place
+ } else {
+ elemZPrec = elem;
+ if(DEBUG)printf("Pas d'ajout elem OOOO premiere fois\n");
+ }
+ lgrCalcGroupe = 0;
+ if(DEBUG)printf("init-1 lgr (%d) pour gr %04x\n",lgrCalcGroupe, gr);
+ grCourant = gr;
+
+ for (tag = ++tagHt.begin();
+ tag != tagHt.end();
+ ++tag){
+
+ elem = tag->second;
+ gr = elem->GetGroup();
+ el = elem->GetElement();
+
+ if ( (gr != grCourant) /*&& // On arrive sur un nv Groupe
+ (el != 0xfffe) */ ) {
+
+ if (el != 0x0000) {
+ gdcmDictEntry * tagZ = new gdcmDictEntry(gr, 0x0000, "UL");
+ elemZ = new gdcmElValue(tagZ); // on le cree
+ elemZ->SetLength(4);
+ Add(elemZ); // On l'accroche à sa place
+ if(DEBUG)printf("ajout elem OOOO pour gr %04x\n",gr);
+ } else {
+ elemZ=elem;
+ if(DEBUG)printf("maj elemZ\n");
+ }
+
+ ostringstream f;
+ f << lgrCalcGroupe;
+ //sprintf(str_lgrCalcGroupe,"%d",lgrCalcGroupe);
+ elemZPrec->SetValue(f.str());
+ if(DEBUG)printf("ecriture lgr (%d, %s) pour gr %04x\n",lgrCalcGroupe, f.str().c_str(), grCourant);
+ if(DEBUG)printf ("%04x %04x [%s]\n",elemZPrec->GetGroup(), elemZPrec->GetElement(),elemZPrec->GetValue().c_str());
+ if(DEBUG)cout << "Addresse elemZPrec " << elemZPrec<< endl;
+ elemZPrec=elemZ;
+ lgrCalcGroupe = 0;
+ grCourant = gr;
+ if(DEBUG)printf("init-2 lgr (%d) pour gr %04x\n",lgrCalcGroupe, gr);
+ } else { // On n'EST PAS sur un nv Groupe
+ lgrCalcGroupe += 2 + 2 + 4 + elem->GetLength(); // Gr + Num + Lgr + LgrElem
+ if(DEBUG)printf("increment (%d) el %04x-->lgr (%d) pour gr %04x\n",elem->GetLength(), el, lgrCalcGroupe, gr);
+ }
+ }
+
+ // restent à tester les echecs en écriture (apres chaque fwrite)
+
+ for (TagElValueHT::iterator tag2 = tagHt.begin();
+ tag2 != tagHt.end();
+ ++tag2){
+
+ gr = tag2->second->GetGroup();
+ el = tag2->second->GetElement();
+ lgr = tag2->second->GetLength();
+ val = tag2->second->GetValue().c_str();
+ vr = tag2->second->GetVR();
+ if(DEBUG)printf ("%04x %04x [%s] : [%s]\n",gr, el, vr.c_str(), val);
+
+ fwrite ( &gr,(size_t)2 ,(size_t)1 ,_fp); //group
+ fwrite ( &el,(size_t)2 ,(size_t)1 ,_fp); //element
+
+ // On est en EXPLICIT VR
+ if (gr == 0x0002) {
+ fwrite (vr.c_str(),(size_t)2 ,(size_t)1 ,_fp);
+
+ if ( (vr == "OB") || (vr == "OW") || (vr == "SQ") ) {
+ fwrite ( &z, (size_t)2 ,(size_t)1 ,_fp);
+ fwrite ( &lgr,(size_t)4 ,(size_t)1 ,_fp);
+
+ } else {
+ shortLgr=lgr;
+ fwrite ( &shortLgr,(size_t)2 ,(size_t)1 ,_fp);
+ }
+ } else {
+ fwrite ( &lgr,(size_t)4 ,(size_t)1 ,_fp);
+ }
+
+ tokens.erase(tokens.begin(),tokens.end());
+ Tokenize (tag2->second->GetValue(), tokens, "\\");
+
+ if (vr == "US" || vr == "SS") {
+ for (unsigned int i=0; i<tokens.size();i++) {
+ val_uint16 = atoi(tokens[i].c_str());
+ ptr = &val_uint16;
+ fwrite ( ptr,(size_t)2 ,(size_t)1 ,_fp);
+ }
+ continue;
+ }
+ if (vr == "UL" || vr == "SL") {
+ for (unsigned int i=0; i<tokens.size();i++) {
+ val_uint32 = atoi(tokens[i].c_str());
+ ptr = &val_uint32;
+ fwrite ( ptr,(size_t)4 ,(size_t)1 ,_fp);
+ }
+ continue;
+ }
+
+ // Les pixels ne sont pas chargés dans l'element !
+ if ((gr == 0x7fe0) && (el == 0x0010) ) break;
+
+ fwrite ( val,(size_t)lgr ,(size_t)1 ,_fp); //valeur Elem
+ }
+
+ return(1);
+}
+
+
+
-// $Header: /cvs/public/gdcm/src/Attic/gdcmElValSet.h,v 1.5 2003/03/24 13:11:28 frog Exp $
+// $Header: /cvs/public/gdcm/src/Attic/gdcmElValSet.h,v 1.6 2003/04/01 14:07:40 jpr Exp $
#ifndef GDCMELVALSET_H
#define GDCMELVALSET_H
TagElValueNameHT NameHt; // the DictEntry.Name are required.
public:
void Add(gdcmElValue*);
- void ReplaceOrCreate(gdcmElValue*);
+ // TODO
+ //void ReplaceOrCreate(gdcmElValue*);
void Print(ostream &);
void PrintByName(ostream &);
int Write(FILE *fp);
int WriteAcr(FILE *fp);
+ int WriteExplVR(FILE *fp);
+
gdcmElValue* GetElementByNumber(guint32 group, guint32 element);
gdcmElValue* GetElementByName (string);
string GetElValueByNumber(guint32 group, guint32 element);
int SetElValueLengthByNumber(guint32 l, guint32 group, guint32 element);
int SetElValueLengthByName (guint32 l, string TagName);
+
guint32 GenerateFreeTagKeyInGroup(guint32 group);
};
string content2;
char car[20];
+ // suppose que le ElValue (0x7fe0, 0x0010) existe ...
+
sprintf(car,"%d",ImageDataSize);
content2=car;
SetPubElValByNumber(content2, 0x7fe0, 0x0010);
// pourtant le gdcmElValSet contenu dans le gdcmHeader
// ne devrait pas être visible par l'utilisateur final (?)
- GetPubElVals().Write(fp1);
+ GetPubElValSet().Write(fp1);
+
+ fwrite(Pixels, lgrTotale, 1, fp1);
+
+ fclose (fp1);
+ return(1);
+}
+
+
+/////////////////////////////////////////////////////////////////
+/**
+ * \ingroup gdcmFile
+ * \ TODO
+ *
+ * @param
+ *
+ * @return
+ */
+
+int gdcmFile::WriteDcmExplVR (string nomFichier) {
+
+// ATTENTION : fonction non terminée (commitée a titre de precaution)
+
+ FILE * fp1;
+ char* filePreamble;
+ fp1 = fopen(nomFichier.c_str(),"wb");
+ if (fp1 == NULL) {
+ printf("Echec ouverture (ecriture) Fichier [%s] \n",nomFichier.c_str());
+ return (0);
+ }
+
+ // Ecriture Dicom File Preamble
+ filePreamble=(char*)calloc(128,1);
+ fwrite(filePreamble,128,1,fp1);
+ fwrite("DICM",4,1,fp1);
+
+ // un accesseur de + est obligatoire ???
+ // pourtant le gdcmElValSet contenu dans le gdcmHeader
+ // ne devrait pas être visible par l'utilisateur final (?)
+
+ GetPubElValSet().WriteExplVR(fp1);
fwrite(Pixels, lgrTotale, 1, fp1);
// pourtant le gdcmElValSet contenu dans le gdcmHeader
// ne devrait pas être visible par l'utilisateur final (?)
- GetPubElVals().WriteAcr(fp1);
+ GetPubElValSet().WriteAcr(fp1);
fwrite(Pixels, lgrTotale, 1, fp1);
// Aucun test n'est fait sur l'"Endiannerie" du processeur.
// Ca sera à l'utilisateur d'appeler son Reader correctement
- int WriteRawData (string nomFichier);
- int WriteDcm (string nomFichier);
- int WriteAcr (string nomFichier);
+ int WriteRawData (string nomFichier);
+ int WriteDcm (string nomFichier);
+ int WriteDcmExplVR (string nomFichier);
+ int WriteAcr (string nomFichier);
};
#endif
* @return True when ImplicitVRLittleEndian found. False in all other cases.
*/
bool gdcmHeader::IsImplicitVRLittleEndianTransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* @return True when ExplicitVRLittleEndian found. False in all other cases.
*/
bool gdcmHeader::IsExplicitVRLittleEndianTransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* @return True when DeflatedExplicitVRLittleEndian found. False in all other cases.
*/
bool gdcmHeader::IsDeflatedExplicitVRLittleEndianTransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* @return True when big endian found. False in all other cases.
*/
bool gdcmHeader::IsExplicitVRBigEndianTransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* @return True when JPEGBaseLineProcess1found. False in all other cases.
*/
bool gdcmHeader::IsJPEGBaseLineProcess1TransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
// faire qq chose d'intelligent a la place de ça
bool gdcmHeader::IsJPEGLossless(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* @return True when JPEGExtendedProcess2-4 found. False in all other cases.
*/
bool gdcmHeader::IsJPEGExtendedProcess2_4TransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* @return True when JPEGExtendedProcess3-5 found. False in all other cases.
*/
bool gdcmHeader::IsJPEGExtendedProcess3_5TransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
* other cases.
*/
bool gdcmHeader::IsJPEGSpectralSelectionProcess6_8TransferSyntax(void) {
- gdcmElValue* Element = PubElVals.GetElementByNumber(0x0002, 0x0010);
+ gdcmElValue* Element = PubElValSet.GetElementByNumber(0x0002, 0x0010);
if ( !Element )
return false;
LoadElementValueSafe(Element);
return NewElVal;
}
+/**
+ * \ingroup gdcmHeader
+ * \brief TODO
+ * @param
+ */
+int gdcmHeader::ReplaceOrCreateByNumber(guint16 Group, guint16 Elem, string Value) {
+
+ gdcmElValue* nvElValue=NewElValueByKey(Group, Elem);
+ PubElValSet.Add(nvElValue);
+ PubElValSet.SetElValueByNumber(Value, Group, Elem);
+ return(1);
+}
+
+
/**
* \ingroup gdcmHeader
* \brief Build a new Element Value from all the low level arguments.
* @return On succes the newly created ElValue, NULL on failure.
*/
gdcmElValue * gdcmHeader::ReadNextElement(void) {
- guint16 g;
- guint16 n;
+
+ guint16 g,n;
gdcmElValue * NewElVal;
g = ReadInt16();
numPixel = 0x1010;
else
numPixel = 0x0010;
- gdcmElValue* PixelElement = PubElVals.GetElementByNumber(grPixel, numPixel);
+ gdcmElValue* PixelElement = PubElValSet.GetElementByNumber(grPixel, numPixel);
if (PixelElement)
return PixelElement->GetOffset();
else
* "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetPubElValByNumber(guint16 group, guint16 element) {
- return PubElVals.GetElValueByNumber(group, element);
+ return PubElValSet.GetElValueByNumber(group, element);
}
/**
* and the string "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetPubElValRepByNumber(guint16 group, guint16 element) {
- gdcmElValue* elem = PubElVals.GetElementByNumber(group, element);
+ gdcmElValue* elem = PubElValSet.GetElementByNumber(group, element);
if ( !elem )
return "gdcm::Unfound";
return elem->GetVR();
* "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetPubElValByName(string TagName) {
- return PubElVals.GetElValueByName(TagName);
+ return PubElValSet.GetElValueByName(TagName);
}
/**
* and the string "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetPubElValRepByName(string TagName) {
- gdcmElValue* elem = PubElVals.GetElementByName(TagName);
+ gdcmElValue* elem = PubElValSet.GetElementByName(TagName);
if ( !elem )
return "gdcm::Unfound";
return elem->GetVR();
* and the string "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetShaElValByNumber(guint16 group, guint16 element) {
- return ShaElVals.GetElValueByNumber(group, element);
+ return ShaElValSet.GetElValueByNumber(group, element);
}
/**
* and the string "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetShaElValRepByNumber(guint16 group, guint16 element) {
- gdcmElValue* elem = ShaElVals.GetElementByNumber(group, element);
+ gdcmElValue* elem = ShaElValSet.GetElementByNumber(group, element);
if ( !elem )
return "gdcm::Unfound";
return elem->GetVR();
* "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetShaElValByName(string TagName) {
- return ShaElVals.GetElValueByName(TagName);
+ return ShaElValSet.GetElValueByName(TagName);
}
/**
* and the string "gdcm::Unfound" otherwise.
*/
string gdcmHeader::GetShaElValRepByName(string TagName) {
- gdcmElValue* elem = ShaElVals.GetElementByName(TagName);
+ gdcmElValue* elem = ShaElValSet.GetElementByName(TagName);
if ( !elem )
return "gdcm::Unfound";
return elem->GetVR();
/**
* \ingroup gdcmHeader
- * \brief Accesses an existing gdcmElValue in the PubElVals of this instance
+ * \brief Accesses an existing gdcmElValue in the PubElValSet of this instance
* through it's (group, element) and modifies it's content with
* the given value.
* @param content new value to substitute with
int gdcmHeader::SetPubElValByNumber(string content, guint16 group,
guint16 element)
{
- return ( PubElVals.SetElValueByNumber (content, group, element) );
+ return ( PubElValSet.SetElValueByNumber (content, group, element) );
}
/**
* \ingroup gdcmHeader
- * \brief Accesses an existing gdcmElValue in the PubElVals of this instance
+ * \brief Accesses an existing gdcmElValue in the PubElValSet of this instance
* through tag name and modifies it's content with the given value.
* @param content new value to substitute with
* @param TagName name of the tag to be modified
*/
int gdcmHeader::SetPubElValByName(string content, string TagName) {
- return ( PubElVals.SetElValueByName (content, TagName) );
+ return ( PubElValSet.SetElValueByName (content, TagName) );
}
/**
* \ingroup gdcmHeader
- * \brief Accesses an existing gdcmElValue in the PubElVals of this instance
+ * \brief Accesses an existing gdcmElValue in the PubElValSet of this instance
* through it's (group, element) and modifies it's length with
* the given value.
* \warning Use with extreme caution.
* @param element element of the ElVal to modify
* @return 1 on success, 0 otherwise.
*/
+
int gdcmHeader::SetPubElValLengthByNumber(guint32 length, guint16 group,
- guint16 element)
-{
- return ( PubElVals.SetElValueLengthByNumber (length, group, element) );
+ guint16 element) {
+ return ( PubElValSet.SetElValueLengthByNumber (length, group, element) );
}
/**
* \ingroup gdcmHeader
- * \brief Accesses an existing gdcmElValue in the ShaElVals of this instance
+ * \brief Accesses an existing gdcmElValue in the ShaElValSet of this instance
* through it's (group, element) and modifies it's content with
* the given value.
* @param content new value to substitute with
* @return 1 on success, 0 otherwise.
*/
int gdcmHeader::SetShaElValByNumber(string content,
- guint16 group, guint16 element)
-{
- return ( ShaElVals.SetElValueByNumber (content, group, element) );
+ guint16 group, guint16 element) {
+ return ( ShaElValSet.SetElValueByNumber (content, group, element) );
}
/**
* \ingroup gdcmHeader
- * \brief Accesses an existing gdcmElValue in the ShaElVals of this instance
+ * \brief Accesses an existing gdcmElValue in the ShaElValSet of this instance
* through tag name and modifies it's content with the given value.
* @param content new value to substitute with
* @param TagName name of the tag to be modified
*/
int gdcmHeader::SetShaElValByName(string content, string TagName) {
- return ( ShaElVals.SetElValueByName (content, TagName) );
+ return ( ShaElValSet.SetElValueByName (content, TagName) );
}
/**
CheckSwap();
while ( (newElValue = ReadNextElement()) ) {
SkipElementValue(newElValue);
- PubElVals.Add(newElValue);
+ PubElValSet.Add(newElValue);
}
}
else
NewElVal->SetValue("0");
-
NewElVal = NewManualElValToPubDict("gdcmYSize", "US");
if (!NewElVal) return;
NewVal = GetElValByName("Columns");
guint32 FreeElem = 0;
gdcmDictEntry* NewEntry = (gdcmDictEntry*)0;
- FreeElem = PubElVals.GenerateFreeTagKeyInGroup(StuffGroup);
+ FreeElem = PubElValSet.GenerateFreeTagKeyInGroup(StuffGroup);
if (FreeElem == UINT32_MAX) {
dbg.Verbose(1, "gdcmHeader::NewManualElValToPubDict",
"Group 0xffff in Public Dict is full");
NewEntry = new gdcmDictEntry(StuffGroup, FreeElem,
VR, "GDCM", NewTagName);
NewElVal = new gdcmElValue(NewEntry);
- PubElVals.Add(NewElVal);
+ PubElValSet.Add(NewElVal);
return NewElVal;
+
}
/**
*/
void gdcmHeader::LoadElements(void) {
rewind(fp);
- TagElValueHT ht = PubElVals.GetTagHt();
+ TagElValueHT ht = PubElValSet.GetTagHt();
for (TagElValueHT::iterator tag = ht.begin(); tag != ht.end(); ++tag) {
LoadElementValue(tag->second);
}
}
void gdcmHeader::PrintPubElVal(ostream & os) {
- PubElVals.Print(os);
+ PubElValSet.Print(os);
}
void gdcmHeader::PrintPubDict(ostream & os) {
gdcmDict* RefShaDict;
/// ELement VALueS parsed with the PUBlic dictionary.
- gdcmElValSet PubElVals;
+ gdcmElValSet PubElValSet;
/// ELement VALueS parsed with the SHAdow dictionary.
- gdcmElValSet ShaElVals;
+ gdcmElValSet ShaElValSet;
/// Refering underlying filename.
string filename;
FILE * fp;
string GetPubElValRepByName(string TagName);
string GetPubElValRepByNumber(guint16 group, guint16 element);
- TagElValueHT & GetPubElVal(void) { return PubElVals.GetTagHt(); };
+ TagElValueHT & GetPubElVal(void) { return PubElValSet.GetTagHt(); };
void PrintPubElVal(ostream & os = cout);
- void PrintPubDict(ostream & os = cout);
+ void PrintPubDict (ostream & os = cout);
// TODO Swig string* GetShaTagNames();
string GetShaElValByName(string TagName);
int SetShaElValByName(string content, string ShadowTagName);
int SetShaElValByNumber(string content, guint16 group, guint16 element);
- int SetPubElValLengthByNumber(guint32 lgr, guint16 group, guint16 element);
+ int SetPubElValLengthByNumber(guint32 lgr, guint16 group, guint16 element);
+ int ReplaceOrCreateByNumber(guint16 Group, guint16 Elem, string Value);
- gdcmElValSet GetPubElVals() { return(PubElVals); }
+ gdcmElValSet GetPubElValSet() { return(PubElValSet); }
};
#endif