]> Creatis software - creaImageIO.git/commitdiff
Set GDCM2 library as available DICOM Reader
authorFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Fri, 12 Mar 2010 11:52:19 +0000 (11:52 +0000)
committerFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Fri, 12 Mar 2010 11:52:19 +0000 (11:52 +0000)
16 files changed:
CMakeLists.txt
src2/CMakeLists.txt
src2/creaImageIODicomImageReader.cpp
src2/creaImageIODicomImageReader2.cpp [new file with mode: 0644]
src2/creaImageIODicomImageReader2.h [new file with mode: 0644]
src2/creaImageIOGimmickView.cpp
src2/creaImageIOImageReader.cpp
src2/creaImageIOImageReader.h
src2/creaImageIOTreeAttributeDescriptor.cpp
src2/creaImageIOUltrasonixImageReader.cpp
src2/creaImageIOWxCustomizeConfigPanel.cpp
src2/creaImageIOWxDescriptorPanel.cpp
src2/creaImageIOWxDumpPanel.cpp
src2/creaImageIOWxDumpPanel.h
src2/creaImageIOWxGimmickPanel.h
src2/creaImageIOWxViewer.h

index 2d592badc6df1926d79fc6a965e5fe97328df9ea..32fc752bd1a4e7bc5a19d9f1ee2f40a06d76583a 100644 (file)
@@ -25,8 +25,9 @@ IF (crea_FOUND)
   INCLUDE(${crea_USE_FILE})
 ENDIF(crea_FOUND)
 
-SET(USE_GDCM ON)
-#SET(USE_GDCM2 ON)
+
+
+
 SET(USE_GDCM_VTK ON)
 
 SET(USE_VTK ON)
@@ -34,6 +35,9 @@ SET(USE_ITK OFF)
 SET(USE_BOOST ON)
 SET(USE_WXWIDGETS ON)
 
+OPTION(USE_GDCM ON)
+OPTION(USE_GDCM2 OFF)
+
 CREA_FIND_AND_USE_LIBRARIES()
 
 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
@@ -50,6 +54,7 @@ LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/win32)
 ENDIF(WIN32)
 
 
+
 OPTION(BUILD_V2 "Build Version 2 ?" ON) 
 
 IF (BUILD_V2)
@@ -68,7 +73,6 @@ ELSE (BUILD_V2)
   SUBDIRS(src)
 ENDIF (BUILD_V2)
 
-
 OPTION(BUILD_CREA_BRUKER "Build creaIRM with creaBruker?" ON)
 
 IF (BUILD_CREA_BRUKER)
@@ -91,3 +95,4 @@ SUBDIRS(appli)
 SUBDIRS(bbtk)
 SUBDIRS(win32)
 SUBDIRS(install)
+
index 8908fc5ac833315be6850cfed3b81b7ac9da86e9..33cbbe1c91d741476039cd97ab7b36e62814b744 100644 (file)
@@ -24,6 +24,8 @@ FILE(GLOB SOURCES_CREAIMAGEIO
   creaImageIOListener.cpp
 )
  
  # Attributed tree data structure
 FILE(GLOB SOURCES_CREAIMAGEIO_TREE
          creaImageIOTree.cpp
@@ -36,15 +38,25 @@ FILE(GLOB SOURCES_CREAIMAGEIO_TREE
          creaImageIOTreeHandlerImageAdder.cpp
          creaImageIOSQLiteTreeHandler.cpp
          )
+IF(USE_GDCM)
+ FILE(GLOB SOURCES_CREAIMAGEIO_IMG_DICOM_READER
+               creaImageIODicomImageReader.cpp)
+ENDIF(USE_GDCM)
+
+         
+IF(USE_GDCM2)
+ FILE(GLOB SOURCES_CREAIMAGEIO_IMG_DICOM_READER
+               creaImageIODicomImageReader2.cpp)
+ENDIF(USE_GDCM2)
+
  # Image Readers
 FILE(GLOB SOURCES_CREAIMAGEIO_IMG_READER
          creaImageIOAbstractImageReader.cpp
-         creaImageIODicomImageReader.cpp
          creaImageIOImageReader.cpp
          creaImageIOUltrasonixImageReader.cpp
          creaImageIOVtkImageReader.cpp
          creaImageIOMultiThreadImageReader.cpp
+         ${SOURCES_CREAIMAGEIO_IMG_DICOM_READER}
          )
 
 
@@ -81,7 +93,8 @@ if(BUILD_CREA_PACS)
        SOURCE_GROUP("Source Files\\PACS" FILES ${SOURCES_CREAIMAGEIO_PACS})
        SOURCE_GROUP("Header Files\\PACS" FILES ${HEADER_CREAIMAGEIO_PACS})
 endif(BUILD_CREA_PACS)
-SOURCE_GROUP("Source Files\\Readers" FILES ${SOURCES_CREAIMAGEIO_IMG_READER})
+SOURCE_GROUP("Source Files\\Readers" FILES ${SOURCES_CREAIMAGEIO_IMG_READER}
+                                                                                       ${SOURCES_CREAIMAGEIO_IMG_DICOM_READER})
 SOURCE_GROUP("Source Files\\Tree" FILES ${SOURCES_CREAIMAGEIO_TREE})
 
 
@@ -89,6 +102,7 @@ SET( PRIMITIVE_SRCS
  ${SOURCES_CREAIMAGEIO}
  ${HEADER_CREAIMAGEIO}
  ${SOURCES_CREAIMAGEIO_IMG_READER}
+ ${SOURCES_CREAIMAGEIO_IMG_DICOM_READER}
  ${SOURCES_CREAIMAGEIO_WX}
  ${SOURCES_CREAIMAGEIO_TREE}
 )
index e12fd0ab2931697555ca48dba4606b4232230291..8ff8b5b102c3fc64e790710e3b95a383b98a909d 100644 (file)
@@ -1,6 +1,9 @@
 #include <creaImageIODicomImageReader.h>
 
 #include <vtkGdcmReader.h>
+
+
+
 #include <creaImageIOSystem.h>
 #include "boost/filesystem/path.hpp"
 
@@ -19,6 +22,7 @@ namespace creaImageIO
     mReader = vtkGdcmReader::New();
 //EED  mReader->SetFlipY(false);
     SetName ( "Dicom" );
+
   };
   //=====================================================================
   
diff --git a/src2/creaImageIODicomImageReader2.cpp b/src2/creaImageIODicomImageReader2.cpp
new file mode 100644 (file)
index 0000000..75f5f40
--- /dev/null
@@ -0,0 +1,161 @@
+#include <creaImageIODicomImageReader2.h>
+
+
+
+#include <creaImageIOSystem.h>
+#include "boost/filesystem/path.hpp"
+
+#include <creaImageIOTreeAttributeDescriptor.h>
+#include <vtkStringArray.h>
+#include <creaImageIOGimmick.h>
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+namespace creaImageIO
+{
+
+  //=====================================================================
+  DicomImageReader::DicomImageReader()
+  {
+         mReader =  vtkGDCMImageReader::New();
+    SetName ( "Dicom" );
+
+  };
+  //=====================================================================
+  
+  //=====================================================================
+  DicomImageReader::~DicomImageReader()
+  {
+         mReader->Delete();
+  }
+  //=====================================================================
+
+  //=====================================================================  
+  bool DicomImageReader::CanRead(const std::string& filename)
+  { 
+         gdcm::Reader reader;
+      reader.SetFileName( filename.c_str() );
+      return  reader.Read();
+        
+  }
+  //=====================================================================
+
+  //=====================================================================
+  vtkImageData* DicomImageReader::ReadImage(const std::string& filename)
+  {
+    vtkImageData* im = 0;
+    try
+      {
+       mReader->SetFileName(filename.c_str());
+       mReader->Update();
+       im = vtkImageData::New();
+       im->ShallowCopy(mReader->GetOutput());
+      }
+    catch (...)
+      {
+       if (im!=0) im->Delete();
+         im = 0;
+      }
+    return im;
+  }
+
+  //=====================================================================
+  void DicomImageReader::PushBackExtensions(std::vector<std::string>& v)
+  {
+    v.push_back("dcm");
+    v.push_back("");
+  }
+  //=====================================================================
+  
+  //========================================================================
+  std::string irclean(const std::string& str)
+  {
+         if(str.size() > 0)
+         {
+               if (str == "GDCM::Unfound") 
+                 {
+               return "";
+                 }
+               if (str[str.size()-1]==' ')
+                 {
+               return irclean(str.substr(0,str.size()-1));
+                 }
+               if (str[str.size()-1]==0)
+                 {
+               return irclean(str.substr(0,str.size()-1));
+                 }
+         }
+    
+    return str;
+  }
+  //========================================================================
+  //=====================================================================
+  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
+             {
+               uint16_t el;
+               uint16_t gr;
+               
+               tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
+               if ( ( gr!=0 ) && ( el!=0 ) )
+                 {
+                          gdcm::DataElement de( gdcm::Tag(gr,el) );
+                          std::string val = GetStringValueFromTag(reader.GetFile().GetHeader().GetDataElement(gdcm::Tag(gr,el)));
+                   i->second = irclean(val);
+                 }
+             }
+         }
+      }
+  }
+
+  const std::string DicomImageReader::GetStringValueFromTag(const gdcm::DataElement& de)
+{
+  static std::string buffer;
+  buffer = "";  // cleanup previous call
+
+
+    const gdcm::ByteValue *bv = de.GetByteValue();
+    if( bv ) // Can be Type 2
+      {
+      buffer = std::string( bv->GetPointer(), bv->GetLength() );
+      // Will be padded with at least one \0
+      }
+
+
+  // Since return is a const char* the very first \0 will be considered
+  return buffer.c_str();
+}
+  //=====================================================================
+  
+} // namespace creaImageIO
+
diff --git a/src2/creaImageIODicomImageReader2.h b/src2/creaImageIODicomImageReader2.h
new file mode 100644 (file)
index 0000000..ffcaae5
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __creaImageIODicomImageReader_h_INCLUDED__
+#define __creaImageIODicomImageReader_h_INCLUDED__
+
+
+#include <creaImageIOAbstractImageReader.h>
+#if defined(USE_GDCM2)
+#include <gdcmReader.h>
+#include <vtkGDCMImageReader.h>
+#endif
+
+class vtkGDCMImageReader;
+
+namespace creaImageIO
+{
+
+
+  /**
+   * \ingroup IO
+   */
+  
+  //=====================================================================
+  /// Concrete image reader for DICOM images 
+  class DicomImageReader : virtual public AbstractImageReader
+  {
+  public:
+    DicomImageReader();
+    virtual ~DicomImageReader();
+
+       /// Add file extensions read by the reader
+    virtual void PushBackExtensions(std::vector<std::string>&);
+       /// Test if file is read by this reader
+    virtual bool CanRead(const std::string& filename);
+       /// return for a file a 2D VTkImage
+    virtual vtkImageData* ReadImage(const std::string& filename);
+       /// Read the attributes for a file
+    virtual void ReadAttributes(const std::string& filename, 
+                               tree::AttributeMapType& attr);
+
+  private:
+         const std::string GetStringValueFromTag( const gdcm::DataElement& ds);
+         vtkGDCMImageReader *mReader;
+       struct deleter
+       {
+               void operator()(gdcm::File* p)
+               {
+                       delete p;
+               }
+       };
+       friend struct deleter;
+  };
+  //=====================================================================
+
+
+
+} // namespace creaImageIO
+
+
+
+#endif // #ifndef __creaImageIODicomImageReader_h_INCLUDED__
index 6df7fc0132413e211c5a4c9d9b326a009654dba2..29d22e3c9b8393e2f6d523fd54cddafd3ad91a99 100644 (file)
@@ -1,9 +1,18 @@
 #include <creaImageIOGimmickView.h>
 #include <creaImageIOSystem.h>
 #include "boost/filesystem.hpp"
+
+#if defined(USE_GDCM)
 #include <gdcmGlobal.h>
 #include <gdcmSerieHelper.h>
 #include <vtkGdcmReader.h>
+#endif
+
+#if defined(USE_GDCM2)
+#include <vtkGDCMImageReader.h>
+#endif
+
+
 namespace fs = boost::filesystem;
 namespace creaImageIO
 {
@@ -363,7 +372,9 @@ void GimmickView::ReadImagesNotThreaded(std::vector<vtkImageData*>& s, std::vect
                        double spc[3];
                        first->GetSpacing(spc);
                        spc[2]=OrderTheFileNameVector(im);      
+
                        out->SetSpacing(spc);
+
                        int slice = 0;
                        std::vector<std::string>::iterator it;
 
@@ -382,8 +393,8 @@ void GimmickView::ReadImagesNotThreaded(std::vector<vtkImageData*>& s, std::vect
 }
   //======================================================================
 
-
-double GimmickView::OrderTheFileNameVector(std::vector<std::string> &im)
+#if defined(USE_GDCM)
+       double GimmickView::OrderTheFileNameVector(std::vector<std::string> &im)
 {
        double spacing=1;
        typedef std::vector<GDCM_NAME_SPACE::File* > FileList;
@@ -429,6 +440,15 @@ double GimmickView::OrderTheFileNameVector(std::vector<std::string> &im)
 }
 
 
+#endif
+
+#if defined(USE_GDCM2)
+       // TO DO
+       double GimmickView::OrderTheFileNameVector(std::vector<std::string> &im)
+       {
+               return 1;
+       }
+#endif
 //======================================================================
 
 
index 9fda22674db7677e06378a37f9d10e8fe1c5f617..4b67e04c005f2c37ae91a1dc7fefdc588ef82741 100644 (file)
@@ -3,9 +3,13 @@
 #include <creaImageIOSystem.h>
 
 #include <creaImageIOVtkImageReader.h>
-#include <creaImageIODicomImageReader.h>
+#if defined (USE_GDCM)
+       #include <creaImageIODicomImageReader.h>
+#endif
+#if defined(USE_GDCM2)
+       #include <creaImageIODicomImageReader2.h>
+#endif
 #include <creaImageIOUltrasonixImageReader.h>
-
 #include <vtkPNGReader.h>
 #include <vtkTIFFReader.h>
 #include <vtkJPEGReader.h>
@@ -43,6 +47,7 @@ namespace creaImageIO
     Register(boost::shared_ptr<AbstractImageReader>(new DicomImageReader));
     Register(boost::shared_ptr<AbstractImageReader>(new UltrasonixImageReader));
 
+       UnRegister(".txt");
  
     mUnreadableImage = vtkImageData::New();
     int dim[3];
@@ -87,14 +92,48 @@ namespace creaImageIO
   {
     mReader.push_back(r);
 
+  }
+
+  void ImageReader::UnRegister(const std::string i_val)
+  {
+    mUnReader.push_back(i_val);
+
   }
   //=====================================================================
 
+   //=====================================================================
+  // Returns true iff the file is readable
+  bool ImageReader::ShallNotRead( const std::string& filename ) 
+  {
+    bool ok = true;
+       if(filename != "")
+       {
+               std::vector<std::string >::iterator i ;
+               for (i=mUnReader.begin(); i!=mUnReader.end(); i++)
+               {
+                       
+                       if ( (*i).c_str() == filename) 
+                       {
+                               ok = false;
+                               break;
+                       }
+               }
+       }
+       return ok;
+       
+  }
+
+
   //=====================================================================
   // Returns true iff the file is readable
   bool ImageReader::CanRead( const std::string& filename ) 
   {
     bool ok = false;
+
+       if( !ShallNotRead(filename))
+       {
+               return ok;
+       }
        if(filename != "")
        {
                std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
index f7366428c63e3a340b01456a919b5109964c73c1..ab9fbe70b3bb70b2d02f16ffe1ff4109525fb5af 100644 (file)
@@ -49,6 +49,12 @@ namespace creaImageIO
 
     std::string mLastFilename;
        boost::shared_ptr<AbstractImageReader> mLastReader;
+
+       bool ShallNotRead( const std::string& filename );
+
+       void UnRegister(const std::string i_val);
+
+       std::vector <std::string> mUnReader;
     
   private:
 
index 3d6a0e3dd9a00b9e3be04944de361651bc5c1a96..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>
 
@@ -65,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()
@@ -85,7 +95,33 @@ namespace creaImageIO
          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
+
     }
     //=====================================================================
 
@@ -119,6 +155,7 @@ namespace creaImageIO
                 
                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)
                {
@@ -127,6 +164,21 @@ namespace creaImageIO
                                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;
        }
 
@@ -136,6 +188,7 @@ namespace creaImageIO
        {
                 
                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)
@@ -145,6 +198,22 @@ namespace creaImageIO
                                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;
        }
 
@@ -153,8 +222,8 @@ namespace creaImageIO
        /// 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()
@@ -165,7 +234,16 @@ namespace creaImageIO
                        typ = 2;
                        return;
                }
-               std::string type = entry->GetVR().str();
+                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" ||
index a8905ccb4f033afe05b4b1ee8f7bd836e11634b2..dde3e4f2655db5867c10d037db6b6ec37ab7f01c 100644 (file)
@@ -3,7 +3,6 @@
 #include "creaImageIOUltrasonixImageReader.h"
 #include <creaVtk.h>
 #include <boost/filesystem/path.hpp>
-
 namespace creaImageIO
 {
 #define HEADER_SIZE    19
@@ -146,7 +145,7 @@ namespace creaImageIO
 
                fclose(Ultrasonix_file);  
 
-               im = crea::NewVtkImageDataFromRaw( dataB8, h.width, h.height, h.frame);
+       im = crea::NewVtkImageDataFromRaw( dataB8, h.width, h.height, h.frame);
        break;
 
        case TYPE_B32:
@@ -164,7 +163,7 @@ namespace creaImageIO
 
                fclose(Ultrasonix_file);  
 
-               im = crea::NewVtkImageDataFromRaw( dataB32, h.width, h.height, h.frame);
+       im = crea::NewVtkImageDataFromRaw( dataB32, h.width, h.height, h.frame);
        break;
     }
 
index f237eaf9f6f6d4dd3715b50fb8343852c3b97c4e..c28a37da9f2b9b8d47028e3b7baf85f347888644 100644 (file)
@@ -1,6 +1,5 @@
 #include <creaImageIOWxCustomizeConfigPanel.h>
 #include <creaImageIOSystem.h>
-
 namespace creaImageIO
 {
   // CTor
index d192534b96c80c305b25d27a3b5d7f78a29c72d3..3b0f78e55dd3dd4918f1bcfcbb14cbfe2239be9d 100644 (file)
@@ -1,7 +1,9 @@
 #include "creaImageIOWxDescriptorPanel.h"
 #include <creaImageIOSystem.h>
+#if defined(USE_GDCM)
 #include <gdcmGlobal.h>
 #include <gdcmDictSet.h>
+#endif
 #include <boost/algorithm/string.hpp>
 
 #include <boost/algorithm/string.hpp>
@@ -243,7 +245,7 @@ namespace creaImageIO
                  val.clear();
                  val <<   std::dec << el ;
                  val >> std::hex >> element;
-                       
+#if defined(USE_GDCM)  
                 // Retrieve the name from gdcm dict
                  GDCM_NAME_SPACE::DictEntry* entry = GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(group, element);
                 // AttributeCombo->Clear();
@@ -257,6 +259,7 @@ namespace creaImageIO
                          AttributeCombo->Delete(0);
                          AttributeCombo->Insert(_T("Unknown Attribute"),0);
                  }
+#endif
                          AttributeCombo->SetSelection(0);
                
          }
@@ -759,11 +762,13 @@ namespace creaImageIO
                                        compose +=  descriptors[1];
                                        compose += "_";
                                        compose +=  descriptors[2];
+#if defined(USE_GDCM)
                                        GDCM_NAME_SPACE::DictEntry* entry = GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(group, element);
                                        if(ilevel>0)
                                        {
                                                onAddAttribute( entry->GetName(),compose, level);
                                        }
+#endif
                                }
                                else if(descriptors[0].find("#") != -1)
                                {
index 1d1a3765c037dca77de9dfdc6f813b7065cc3f62..843db487dd5a3485e7cbe02576e1e6c765e6d5a5 100644 (file)
@@ -1,11 +1,13 @@
 #include <creaImageIOWxDumpPanel.h>
 #include <creaImageIOSystem.h>
 #include <creaImageIOGimmick.h>
+#if defined(USE_GDCM)
 #include <gdcmGlobal.h>
 #include <gdcmDictSet.h>
 #include "gdcmFile.h"
 #include "gdcmDocument.h"
 #include "gdcmFileHelper.h"
+#endif
 #include "icons/save.xpm"
 
 namespace creaImageIO
@@ -36,25 +38,64 @@ namespace creaImageIO
           std::stringstream os;
           if ( !filename.empty()) // ====== Deal with a single file ======
           {
-                  GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New();
+       /*         GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New();
                   f->SetLoadMode(GDCM_NAME_SPACE::LD_ALL);
                   f->SetFileName( filename );
                   f->SetMaxSizeLoadEntry(0xffff);
                   f->Load();
                   GDCM_NAME_SPACE::FileHelper *fh = GDCM_NAME_SPACE::FileHelper::New(f);
+                     f->SetLoadMode(GDCM_NAME_SPACE::LD_NOSEQ |GDCM_NAME_SPACE::LD_NOSHADOW); 
                   fh->SetPrintLevel( 0 );
                   fh->Print(os);
                   std::string result;
                   std::string line;
                   while(std::getline(os, line))
                   {
-                         result +=line;
+                         result +=clean(line.c_str());
                          result += "\n";
                   }
                   DumpText->SetValue(crea::std2wx(result));
+               
+                  std::string pixelType =f->GetPixelType();
+                       int nX,nY,nZ,nT,sPP,planarConfig;
+    
+      nX=f->GetXSize();
+      nY=f->GetYSize();
+      nZ=f->GetZSize();
+      nT=f->GetTSize();*/
                }
        }
 
+
+       const std::string WxDumpPanel::clean(const std::string &i_line)
+       {
+               
+                 if (i_line.substr(4,1) == "|")
+                          {
+                                  std::string tag;
+                                  std::string line;
+                                  std:string signification;
+                                  std::string value;
+                                  std::string resultat;
+
+                                  tag = "(" + i_line.substr(0,9) + ")";
+                                  line = i_line.substr(14,i_line.size()-10);
+                                  int pos1 = line.find_first_of("[");
+                                  int pos2 = line.find_first_of("]");
+                                  signification = line.substr(pos1+1, pos2-pos1-1);
+                                  line = line.substr(pos2+1);
+                                   pos1 = line.find_first_of("[");
+                                   pos2 = line.find_first_of("]");
+                                  value = line.substr(pos1+1, pos2-pos1-1);
+                                  resultat = tag + " " + signification + ": " +value;
+                                 return resultat;
+                          }
+                  else
+                  {
+                          return i_line;
+                  }
+       }
+
 ///////////////////////////////////////////////////    
 /// wxEvent to save Dicom Tags in a text file   //
 ///////////////////////////////////////////////////
index 891a4d3075a64ccb23e64fda44867a940ef9625b..474892cd1ed58403d72198d62f0da681ca9921f9 100644 (file)
@@ -29,6 +29,7 @@ namespace creaImageIO
        
   private :
 
+        const std::string clean(const std::string &i_line);
     /// Display in a control Text all dicom tags
        void Print();
 
index 040a859ac251d109959c1d6921c532bc128d2870..ad776ddb2662ade85979b8f2469d80a4110bfd05 100644 (file)
@@ -17,7 +17,7 @@ namespace creaImageIO
    */
   //=====================================================================
  //=====================================================================
-  class CREAIMAGEIO_EXPORT WxGimmickPanel : public wxPanel
+  class  CREAIMAGEIO_EXPORT WxGimmickPanel : public wxPanel
   {
   public:
     WxGimmickPanel();    
index b807f7cc68aba7b9d74809cf7c717e4263eb7325..1e4e2f20bddf0f630361687dfe0e2e62f61e00b1 100644 (file)
@@ -70,7 +70,7 @@ namespace creaImageIO
        wxCheckBox  *mcheck;
 
     /// Associated wxvtk interactor
-    crea::creawxVTKRenderWindowInteractor  *mInteractor;
+       crea::creawxVTKRenderWindowInteractor  *mInteractor;
        
     /// Current extent 
     int mx1,mx2,my1,my2,mz1,mz2;