#include <creaImageIOTreeAttributeDescriptor.h>
#include <creaImageIOSystem.h>
+
+#if defined(USE_GDCM)
#include <gdcmGlobal.h>
#include <gdcmDictSet.h>
+#endif
+
+#if defined(USE_GDCM2)
+#include <gdcmGlobal.h>
+#include <gdcmDicts.h>
+#include <gdcmDict.h>
+#endif
#include <boost/algorithm/string/replace.hpp>
//GDCM_NAME_SPACE::TagKey tag(group,element);
char ctag[12];
sprintf(ctag,"D%04x_%04x",group,element);
- std::string tag(ctag);
+ mKey = ctag;
- GimmickDebugMessage(3,"AttributeDescriptor : '"<<tag
+ GimmickDebugMessage(3,"AttributeDescriptor : '"<<mKey
<<"' ["<<flags<<"]"<<std::endl);
- mKey = "D" + tag;
-
+#if defined(USE_GDCM)
// Retrieve the name from gdcm dict
GDCM_NAME_SPACE::DictEntry* entry =
GDCM_NAME_SPACE::Global::GetDicts()
->GetDefaultPubDict()->GetEntry(mGroup,mElement);
-
+
if (entry)
{
mName = entry->GetName();
}
else
{
- GimmickMessage(1,"!! WARNING : tag '"<<tag
+ GimmickMessage(1,"!! WARNING : tag '"<<mKey
<<"' is not in DICOM dictionnary ! "
<<"Considering it as a user attribute"
<< std::endl);
mName = "UNKNOWN";
mGroup = mElement = 0;
}
-
+#endif
+
+
+
+
+#if defined(USE_GDCM2)
+ // Retrieve the name from gdcm dict
+ gdcm::Dicts dicts;
+ gdcm::DictEntry dictentry = dicts.GetDictEntry(gdcm::Tag(mGroup, mElement));
+
+ mName = dictentry.GetName();
+ if(!mName.empty())
+ {
+ CleanName(mName);
+ GimmickDebugMessage(3,"='"<<mName<<"'"<<std::endl);
+ }
+ else
+ {
+ GimmickMessage(1,"!! WARNING : tag '"<<mKey
+ <<"' is not in DICOM dictionnary ! "
+ <<"Considering it as a user attribute"
+ << std::endl);
+ mName = "UNKNOWN";
+ mGroup = mElement = 0;
+ }
+#endif
+
}
//=====================================================================
if ( (key.size()==10) &&
(key[0] == 'D') &&
(key[5] == '_') )
- {
- sscanf(key.c_str(),"D%04x_%04x",&group,&elem);
+ {
+ sscanf(key.c_str(),"D%04hx_%04hx ",&group,&elem);
+ GimmickDebugMessage(3,"GetDicomGroupElementFromKey '"<<key<<"' : " <<group<<"|"<<elem<<std::endl);
+ }
+ else
+ {
+ GimmickMessage(5,"GetDicomGroupElementFromKey '"<<key<<"' : "
+ <<" not a DICOM key format"<<std::endl);
}
return;
}
+
+ //=====================================================================
+ /// test if the type is a date
+ bool AttributeDescriptor::isDateEntry() const
+ {
+
+ bool btest = false;
+ // Retrieve the name from gdcm dict
+#if defined(USE_GDCM)
+ GDCM_NAME_SPACE::DictEntry* entry = GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(GetGroup(),GetElement());
+ if( entry != 0)
+ {
+ if( entry->GetVR().str() == "DA" )
+ {
+ btest = true;
+ }
+ }
+#endif
+#if defined(USE_GDCM2)
+ const gdcm::Global& g = gdcm::Global::GetInstance(); // sum of all knowledge !
+ const gdcm::Dicts &dicts = g.GetDicts();
+ const gdcm::Dict &dict = dicts.GetPublicDict(); // Part 6
+
+ if(mGroup != 0 && mElement != 0)
+ {
+ gdcm::DictEntry dictentry = dict.GetDictEntry(gdcm::Tag(GetGroup(), GetElement()));
+ if( gdcm::VR::GetVRString(dictentry.GetVR()) == "DA")
+ {
+ btest = true;
+ }
+ }
+#endif
+ return btest;
+ }
+
+ //=====================================================================
+ /// test if the type is a time
+ bool AttributeDescriptor::isTimeEntry() const
+ {
+
+ bool btest = false;
+#if defined(USE_GDCM)
+ // Retrieve the name from gdcm dict
+ GDCM_NAME_SPACE::DictEntry* entry = GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(GetGroup(),GetElement());
+ if( entry != 0)
+ {
+ if( entry->GetVR().str() == "TM" )
+ {
+ btest = true;
+ }
+ }
+#endif
+
+#if defined(USE_GDCM2)
+ const gdcm::Global& g = gdcm::Global::GetInstance(); // sum of all knowledge !
+ const gdcm::Dicts &dicts = g.GetDicts();
+ const gdcm::Dict &dict = dicts.GetPublicDict(); // Part 6
+ if(mGroup != 0 && mElement != 0)
+ {
+ gdcm::DictEntry dictentry = dict.GetDictEntry(gdcm::Tag(mGroup, mElement));
+ if(gdcm::VR::GetVRString(dictentry.GetVR()) == "TM")
+ {
+ btest = true;
+ }
+ }
+#endif
+
+ return btest;
+ }
+
+
//=====================================================================
+ /// Decodes the type of the attribute
+ void AttributeDescriptor::DecodeType(unsigned int& typ) const
+ {
+ std::string type="";
+#if defined(USE_GDCM)
+ // Retrieve the name from gdcm dict
+ GDCM_NAME_SPACE::DictEntry* entry =
+ GDCM_NAME_SPACE::Global::GetDicts()
+ ->GetDefaultPubDict()->GetEntry(GetGroup(),GetElement());
+
+ if (entry==0)
+ {
+ typ = 2;
+ return;
+ }
+ type = entry->GetVR().str();
+#endif
+#if defined(USE_GDCM2)
+ const gdcm::Global& g = gdcm::Global::GetInstance(); // sum of all knowledge !
+ const gdcm::Dicts &dicts = g.GetDicts();
+ const gdcm::Dict &dict = dicts.GetPublicDict(); // Part 6
+ gdcm::DictEntry dictentry = dict.GetDictEntry(gdcm::Tag(mGroup, mElement));
+ type = gdcm::VR::GetVRString(dictentry.GetVR());
+#endif
+
+ GimmickDebugMessage(3,"VR Value is "<<type<<"!"<<std::endl);
+ if(type=="AS" ||
+ type=="DA" ||
+ type=="FL" ||
+ type=="FD" ||
+ type=="IS" ||
+ type=="SL" ||
+ type=="SS" ||
+ type=="UI" ||
+ type=="US" ||
+ type=="SH")
+ {
+ // Numerical
+ typ = 1;
+ }
+ else
+ {
+ // String
+ typ = 2;
+ }
+
+ }
+ //=====================================================================
} // EO namespace tree