]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOTreeAttributeDescriptor.cpp
Set GDCM2 library as available DICOM Reader
[creaImageIO.git] / src2 / creaImageIOTreeAttributeDescriptor.cpp
index 799cb12cc2210b357912d40d78e805234f53f1d9..3d3ffb1df97c5e17788e582b7f6c63db459e7f31 100644 (file)
@@ -1,8 +1,17 @@
 #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>
 
@@ -43,7 +52,6 @@ namespace creaImageIO
       GimmickDebugMessage(3,"AttributeDescriptor : '"<<key
                          <<"' ["<<flags<<"]"<<std::endl);
       GimmickDebugMessage(3,"='"<<mName<<"'"<<std::endl);
-         DecodeType();
     }
 
     //=====================================================================
@@ -66,6 +74,7 @@ namespace creaImageIO
       GimmickDebugMessage(3,"AttributeDescriptor : '"<<mKey
                          <<"' ["<<flags<<"]"<<std::endl);
 
+#if defined(USE_GDCM)
       // Retrieve the name from gdcm dict
       GDCM_NAME_SPACE::DictEntry* entry =
        GDCM_NAME_SPACE::Global::GetDicts()
@@ -75,7 +84,6 @@ namespace creaImageIO
        {
          mName = entry->GetName();
          CleanName(mName);
-         DecodeType();
          GimmickDebugMessage(3,"='"<<mName<<"'"<<std::endl);
        }
       else
@@ -85,10 +93,35 @@ namespace creaImageIO
                         <<"Considering it as a user attribute"
                         << std::endl);
          mName = "UNKNOWN";
-         mGroup = mElement = mType = 0;
-         DecodeType();
+         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
+
     }
     //=====================================================================
 
@@ -103,12 +136,9 @@ namespace creaImageIO
       if ( (key.size()==10) &&
           (key[0] == 'D') &&
           (key[5] == '_') )
-       {
-         std::string g = key.substr(1,4);
-         sscanf(key.c_str(),"D %04x _ %04x ",&group,&elem);  
-         sscanf(g.c_str(),"%04x",&group);
-         GimmickDebugMessage(3,"GetDicomGroupElementFromKey '"<<g<<"' : "
-                        <<group<<"|"<<elem<<std::endl);
+         {
+        sscanf(key.c_str(),"D%04hx_%04hx ",&group,&elem);  
+         GimmickDebugMessage(3,"GetDicomGroupElementFromKey '"<<key<<"' : "                     <<group<<"|"<<elem<<std::endl);
        }
       else 
        { 
@@ -117,17 +147,103 @@ namespace creaImageIO
        }
       return;
     }
-    //=====================================================================
-       ///Decodes the type of attribute into the valid groups
-       void AttributeDescriptor::DecodeType()
+
+       //=====================================================================
+       /// 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(mGroup,mElement);
+               ->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
 
-               std::string type = entry->GetVR().str();
-               CleanName(type);
                GimmickDebugMessage(3,"VR Value is "<<type<<"!"<<std::endl);
                if(type=="AS" ||
                type=="DA" ||
@@ -140,14 +256,17 @@ namespace creaImageIO
                type=="US" ||
                type=="SH")
                {
-                       mType=1;
+                       // Numerical 
+                       typ = 1;
                }
                else
                {
-                       mType=2;
+                       // String
+                       typ = 2;
                }
-
-       }
+               
+         }
+         //=====================================================================
 
   } // EO namespace tree