]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIODicomImageReader2.cpp
#3185 creaImageIO Feature New Normal - Clean code
[creaImageIO.git] / src / creaImageIODicomImageReader2.cpp
index 713655ba46ea1fda179f5681b4b2e0b9bcb98dbe..5b6861ccf46fc63ce510dfa4f6526c9ba41cbee0 100644 (file)
@@ -1,14 +1,42 @@
-#include <creaImageIODicomImageReader2.h>
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
+#                        pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and 
+#  abiding by the rules of distribution of free software. You can  use, 
+#  modify and/ or redistribute the software under the terms of the CeCILL-B 
+#  license as circulated by CEA, CNRS and INRIA at the following URL 
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability. 
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------
+*/
 
 
-
-#include <creaImageIOSystem.h>
+#include "creaImageIODicomImageReader2.h"
+#include <creaImageIOTreeAttributeDescriptor.h>
+#include "gdcmStringFilter.h"
+#include "gdcmUIDs.h"
 #include "boost/filesystem/path.hpp"
 
-#include <creaImageIOTreeAttributeDescriptor.h>
+#include "vtkGDCMImageReader.h"
 #include <vtkStringArray.h>
-#include <creaImageIOGimmick.h>
-
+#if defined(_WIN32)
+#pragma warning(disable: 4996)
+#endif
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -59,6 +87,16 @@ namespace creaImageIO
          im = 0;
       }
     return im;
+    //gdcm::Tag grouplength(0x0000,0x0000);
+    //gdcm::DataElement de(gdcm::Tag(0x0000, 0x0000));
+    //de.SetByteValue("0",gdcm::VR::UL);
+    //
+    //
+    //gdcm::UIDs::GetUIDString(gdcm::UIDS::uid_1_2_840_10008_1_1),gdcm::VR::UI);
+
+    //std::ostream os;
+    //de.Write(&os);
+
   }
 
   //=====================================================================
@@ -94,7 +132,7 @@ namespace creaImageIO
   
 
        void DicomImageReader::getAttributes(const std::string filename, 
-               std::map <std::string , std::string> &infos,std::vector<std::string> i_attr)
+               std::map <std::string , std::string> &infos, std::vector<std::string> i_attr)
        {
                gdcm::Reader reader;
                reader.SetFileName( filename.c_str() );
@@ -112,54 +150,63 @@ namespace creaImageIO
                                }
                        }
                }
-               
        }
+
   //=====================================================================
   void DicomImageReader::ReadAttributes(const std::string& filename, 
                      std::map<std::string,std::string>& attr)
   {
-    GimmickMessage(2,"Reading attributes from DICOM file '"
-                  <<filename<<"'"<<std::endl);
 
    
       gdcm::Reader reader;
       reader.SetFileName( filename.c_str() );
       if (reader.Read())
       {
-       std::map<std::string,std::string>::iterator i;
-       for (i=attr.begin();i!=attr.end();++i)
-         {
-           if ( i->first == "D0004_1500" )
-             {
-               boost::filesystem::path full_path(filename);
-               std::string f = full_path.leaf();
-               i->second = f;
-             }
-           else if ( i->first == "FullFileName" )
-             {
-               i->second = filename;
-             }
-                 else if ( i->first == "FullFileDirectory" )
-             {
-                         std::string::size_type last_pos = filename.find_last_of("//");
-                         //find first separator
-                         i->second = filename.substr(0, last_pos);
-             }
-           else
+                 gdcm::StringFilter sf;
+                 sf.SetFile(reader.GetFile());
+                 std::map<std::string,std::string>::iterator i;
+                 for (i=attr.begin();i!=attr.end();++i)
              {
-               uint16_t el;
-               uint16_t gr;
-
-               tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
-               if ( ( gr!=0 ) && ( el!=0 ) )
-                 {
-                        
-                          std::string val = GetStringValueFromTag(reader.GetFile().GetDataSet().GetDataElement(gdcm::Tag(gr,el)));
-                   i->second = irclean(val);
+                         if ( i->first == "D0004_1500" )
+                         {
+                                 boost::filesystem::path full_path(filename);
+                                 std::string f = full_path.leaf().string();
+                                 i->second = f;
+                         }
+                         else if ( i->first == "FullFileName" )
+                         {
+                               i->second = filename;
+                         }
+                         else if ( i->first == "FullFileDirectory" )
+                         {
+                                std::string::size_type last_pos = filename.find_last_of("//");
+                                //find first separator
+                                i->second = filename.substr(0, last_pos);
+                         }
+                         else
+                         {
+                                 uint16_t el;
+                                 uint16_t gr;
+                      {
+            gdcm::Attribute<  0x0008,0x103e> at;
+            std::string sr;
+            at.SetValue(sr);
+            
+        }
+                                 tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
+                                 //if ( ( gr!=0 ) && ( el!=0 ) )
+                                 const gdcm::Tag tag(gr, el);
+                                 if( reader.GetFile().GetDataSet().FindDataElement( tag ) )
+                                 {
+                                         i->second = irclean(sf.ToString(tag));
+                                 }
+                                 else
+                                 {
+                                         i->second = "";
+                                 }
+                         }
                  }
-             }
          }
-      }
   }
 
 void DicomImageReader::ReadAttributes2(const std::string& filename, 
@@ -196,7 +243,7 @@ void DicomImageReader::ReadAttributes2(const std::string& filename,
                        if ( i->first == "D0004_1500" )
                        {
                                boost::filesystem::path full_path(filename);
-                               std::string f = full_path.leaf();
+                               std::string f = full_path.leaf().string();
                                i->second = f;
                        }
                        else if ( i->first == "FullFileName" )