]> Creatis software - clitk.git/commitdiff
Mathieu Malaterre :
authordelmon <delmon>
Thu, 31 Mar 2011 15:24:50 +0000 (15:24 +0000)
committerdelmon <delmon>
Thu, 31 Mar 2011 15:24:50 +0000 (15:24 +0000)
  - From gdcm 1.x to gdcm 2.0
clitk should compile with itk 3.20 and gdcm 2.0

common/clitkDicomRTDoseIO.cxx
common/clitkDicomRT_Contour.cxx
common/clitkDicomRT_Contour.h
common/clitkDicomRT_ROI.cxx
common/clitkDicomRT_ROI.h
common/clitkDicomRT_StructureSet.cxx
vv/vvMeshReader.cxx
vv/vvQDicomSeriesSelector.cxx

index 02d953e3a74eebadba37025b7d510f8257691437..da35bb86b6b417eac99227ccdfacf060a08b2a26 100644 (file)
 
 // itk include
 #if GDCM_MAJOR_VERSION == 2
+// IMPLEMENTATION NOTE:
+// The following has been done without the use of vtkGDCMImageReader which directly
+// handle RTDOSE image. Another approach would have been to use gdcm::ImageReader
+// which also properly recognize RTDOSE
   #include <gdcmReader.h>
   #include <gdcmAttribute.h>
 #else
@@ -278,6 +282,9 @@ void clitk::DicomRTDoseIO::Read(void * buffer)
 #if GDCM_MAJOR_VERSION == 2
   gdcm::Image &i = m_GdcmImageReader.GetImage();
   i.GetBuffer((char*)buffer);
+  // WARNING: GetBuffer return the pixel values as stored on disk not the real pixel value
+  // we still need to multiply by m_DoseScaling
+  // An alternate solution would be to use vtkGDCMImageReader...
 #else
   float *img = (float*) buffer;
 
index 9a98045faf174182f8cd7cc0f23b1c45c4356988..9f63dac8060b2a8ac0e2b97a20ea79a4043cc634 100644 (file)
@@ -48,6 +48,8 @@ void clitk::DicomRT_Contour::Print(std::ostream & os) const
 
 
 //--------------------------------------------------------------------
+#if GDCM_MAJOR_VERSION == 2
+#else
 bool clitk::DicomRT_Contour::Read(gdcm::SQItem * item)
 {
 
@@ -93,6 +95,7 @@ bool clitk::DicomRT_Contour::Read(gdcm::SQItem * item)
 
   return true;
 }
+#endif
 //--------------------------------------------------------------------
 
 
index 88100f4f9ee213d40ce2c7d869c4251fdac77e14..53a18755c61a47cb4b125d4a6adc389ff52fa68a 100644 (file)
 #define CLITKDICOMRT_CONTOUR_H
 
 #include "clitkCommon.h" 
+#include <gdcmFile.h>
+#if GDCM_MAJOR_VERSION == 2
+#else
 #include <gdcm.h>
 #include <gdcmSQItem.h>
+#endif
 #include <vtkPoints.h>
 #include <vtkPolyData.h>
 #include <vtkSmartPointer.h>
@@ -38,7 +42,10 @@ public:
   itkNewMacro(Self);
 
   void Print(std::ostream & os = std::cout) const;
+#if GDCM_MAJOR_VERSION == 2
+#else
   bool Read(gdcm::SQItem * item);
+#endif
   vtkPolyData * GetMesh();
   vtkPoints * GetPoints() {return mData;}
   double GetZ() const {return mZ;}
index 0219b4aea9763c32cf05891630a2162fad38c2ef..67e534108187a743313a373db6a9ef88c99753ba 100644 (file)
@@ -129,6 +129,8 @@ double clitk::DicomRT_ROI::GetForegroundValueLabelImage() const
 
 
 //--------------------------------------------------------------------
+#if GDCM_MAJOR_VERSION == 2
+#else
 void clitk::DicomRT_ROI::Read(std::map<int, std::string> & rois, gdcm::SQItem * item)
 {
 
@@ -167,6 +169,7 @@ void clitk::DicomRT_ROI::Read(std::map<int, std::string> & rois, gdcm::SQItem *
     }
   }
 }
+#endif
 //--------------------------------------------------------------------
 
 
index b05b9d65e9a51bd70a81ecba65683becff3eeccd..8a24b47fc83f45080f2ccb7d327064e873720506 100644 (file)
@@ -35,7 +35,10 @@ public:
   itkNewMacro(Self);
 
   void Print(std::ostream & os = std::cout) const;
+#if GDCM_MAJOR_VERSION == 2
+#else
   void Read(std::map<int, std::string> & rois, gdcm::SQItem * item);
+#endif
   void SetFromBinaryImage(vvImage * image, int n, 
         std::string name, 
         std::vector<double> color, 
index 9d128b80075bf9ded4d9f3f750bf0f464dfd7916..fb2d9a2ce8fcf6e154df8f3e9d6d8cd5ab2056c6 100644 (file)
 
 #include "clitkDicomRT_StructureSet.h"
 #include <vtksys/SystemTools.hxx>
+#include "gdcmFile.h"
+#if GDCM_MAJOR_VERSION == 2
+#include "vtkGDCMPolyDataReader.h"
+#endif
 
 //--------------------------------------------------------------------
 clitk::DicomRT_StructureSet::DicomRT_StructureSet()
@@ -140,6 +144,10 @@ void clitk::DicomRT_StructureSet::Print(std::ostream & os) const
 void clitk::DicomRT_StructureSet::Read(const std::string & filename)
 {
   // Open DICOM
+#if GDCM_MAJOR_VERSION == 2
+  vtkGDCMPolyDataReader * reader = vtkGDCMPolyDataReader::New();
+  reader->SetFileName( filename.c_str() );
+#else
   gdcm::File reader;
   reader.SetFileName(filename.c_str());
   reader.SetMaxSizeLoadEntry(16384); // Needed ...
@@ -205,6 +213,7 @@ void clitk::DicomRT_StructureSet::Read(const std::string & filename)
     n++;
   }
 
+#endif
 }
 //--------------------------------------------------------------------
 
index 92939bdc0d5442ee5cc6eb27df8af9ae9bb9addd..fc420d4a0d887b07243891fd5c7c9d84142f13b4 100644 (file)
 
 #include <QApplication>
 
+#include <gdcmFile.h>
+#if GDCM_MAJOR_VERSION == 2
+#else
 #include <gdcm.h>
 #include <gdcmSQItem.h>
+#endif
 
 #include <vtkSmartPointer.h>
 #include <vtkAppendPolyData.h>
@@ -80,6 +84,9 @@ void vvMeshReader::run()
 std::vector<std::pair<int,std::string> > vvMeshReader::GetROINames()
 {
   assert(filename!="");
+  std::vector<std::pair<int, std::string> > roi_names;
+#if GDCM_MAJOR_VERSION == 2
+#else
   gdcm::File reader;
   reader.SetFileName(filename.c_str());
   reader.SetMaxSizeLoadEntry(16384);
@@ -87,23 +94,25 @@ std::vector<std::pair<int,std::string> > vvMeshReader::GetROINames()
 
   gdcm::SeqEntry * roi_info=reader.GetSeqEntry(0x3006,0x0020);
   assert(roi_info);
-  std::vector<std::pair<int, std::string> > roi_names;
   // DD("ici");
   //int n=0;
   for (gdcm::SQItem* i=roi_info->GetFirstSQItem(); i!=0; i=roi_info->GetNextSQItem())
     if (i->GetEntryValue(0x3006,0x0022)!= gdcm::GDCM_UNFOUND)
       roi_names.push_back(make_pair(atoi(i->GetEntryValue(0x3006,0x0022).c_str()),i->GetEntryValue(0x3006,0x0026)));
+#endif
   return roi_names;
 }
 
 std::vector<vvMesh::Pointer> vvMeshReader::readSelectedContours()
 {
+  std::vector<vvMesh::Pointer> result;
+#if GDCM_MAJOR_VERSION == 2
+#else
   gdcm::File reader;
   reader.SetFileName(filename.c_str());
   reader.SetMaxSizeLoadEntry(16384);
   reader.Load();
 
-  std::vector<vvMesh::Pointer> result;
   gdcm::SeqEntry * rois=reader.GetSeqEntry(0x3006,0x0039);
   ///We need to iterate both on the contours themselves, and on the contour info
   gdcm::SeqEntry * roi_info=reader.GetSeqEntry(0x3006,0x0020);
@@ -160,6 +169,7 @@ std::vector<vvMesh::Pointer> vvMeshReader::readSelectedContours()
     }
     k=roi_info->GetNextSQItem(); //increment the second loop variable
   }
+#endif
   return result;
 }
 
index 2102ddb73735e74f5a7a76c07b03514abda5f40d..2740767574b63cf15e49da3eeb181e96114cdd3a 100644 (file)
 #include <itkGDCMImageIO.h>
 #include <itkGDCMSeriesFileNames.h>
 #include <gdcmFile.h>
+#if GDCM_MAJOR_VERSION == 2
+#include <gdcmImageReader.h>
+#include <gdcmDataSetHelper.h>
+#include <gdcmStringFilter.h>
+#else
 #include <gdcmDocEntry.h>
+#endif
 
 #include "vvQDicomSeriesSelector.h"
 //#include "vvUserConfig.h"
@@ -129,6 +135,12 @@ void vvDicomSeriesSelector::SearchButtonRelease()
       mListOfSeriesFilenames[seriesUID[i]] = filenames;
 
       // store first header
+#if GDCM_MAJOR_VERSION == 2
+      gdcm::ImageReader reader;
+      reader.SetFileName( (*filenames)[0].c_str() );
+      reader.Read();
+      mDicomHeader[seriesUID[i]] = &reader.GetFile();
+#else
       gdcm::File *header = new gdcm::File();
       header->SetFileName((*filenames)[0]);
       header->SetMaxSizeLoadEntry(16384);
@@ -167,6 +179,7 @@ void vvDicomSeriesSelector::SearchButtonRelease()
 
 
       mDicomHeader[seriesUID[i]] = header;
+#endif
 
       // new item
       QListWidgetItem *newItem = new QListWidgetItem;
@@ -216,6 +229,32 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged()
 
       QString l;
       gdcm::File * header = mDicomHeader[mCurrentSerie];
+#if GDCM_MAJOR_VERSION == 2
+      gdcm::StringFilter sf;
+      sf.SetFile( *header );
+      gdcm::DataSet &ds = header->GetDataSet();
+      gdcm::DataSet::ConstIterator it = ds.Begin();
+      for (; it != ds.End(); ++it )
+        {
+        const gdcm::DataElement & ref = *it;
+        const gdcm::Tag &         tag = ref.GetTag();
+        gdcm::VR vr = gdcm::DataSetHelper::ComputeVR(*header, ds, tag);
+        if ( vr & ( gdcm::VR::OB | gdcm::VR::OF | gdcm::VR::OW | gdcm::VR::SQ | gdcm::VR::UN ) )
+          {
+          // What is the behavior for binary stuff ?
+          }
+        else /* if ( vr & gdcm::VR::VRASCII ) */
+          {
+          if ( tag.IsPublic() )
+            {
+            std::pair<std::string, std::string> p = sf.ToStringPair(tag);
+            l += QString("%1 : %2\n")
+              .arg( p.first.c_str() )
+              .arg( p.second.c_str() );
+            }
+          }
+        }
+#else
       gdcm::DocEntry * e = header->GetFirstEntry();
       while (e) {
         if (e->GetName() != "gdcm::Unknown") {
@@ -225,6 +264,7 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged()
         }
         e = header->GetNextEntry();
       }
+#endif
 
       mDicomDetails[(*mFilenames)[i]] = l.toStdString();
     }
@@ -237,6 +277,9 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged()
 QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header)
 {
   QString n = QString("%1").arg(mListOfSeriesFilenames[s]->size());
+#if GDCM_MAJOR_VERSION == 2
+  QString ss;
+#else
   QString size = QString("%1x%2x%3")
                  .arg(header->GetXSize())
                  .arg(header->GetYSize())
@@ -262,6 +305,7 @@ QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header
     AddInfo(        "Origin : ", origin.toStdString())+
     AddInfo(header, "Pixel size : ", 0x0028,0x0100)+
     AddInfo(        "Pixel type : ", header->GetPixelType());
+#endif
   return ss;
 }
 //====================================================================
@@ -269,7 +313,15 @@ QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header
 //====================================================================
 QString vvDicomSeriesSelector::AddInfo(gdcm::File *header, QString n, uint16_t group, uint16_t elem)
 {
+#if GDCM_MAJOR_VERSION == 2
+  gdcm::StringFilter sf;
+  sf.SetFile( *header );
+  gdcm::Tag t( group, elem );
+  std::string s = sf.ToString( t );
+  return AddInfo(n.toStdString(), s);
+#else
   return AddInfo(n.toStdString(), header->GetEntryValue(group, elem));
+#endif
 }
 //====================================================================
 
@@ -285,6 +337,8 @@ QString vvDicomSeriesSelector::AddInfo(std::string n, std::string m)
 //====================================================================
 void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector<std::string> & filenames)
 {
+#if GDCM_MAJOR_VERSION == 2
+#else
   gdcm::File *header = new gdcm::File();
   header->SetFileName(filenames[0]);
   header->SetMaxSizeLoadEntry(16384);
@@ -303,6 +357,7 @@ void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector<std::string> &
   DD(ui.mTableWidget->rowCount());
   ui.mTableWidget->setItem(i, 0, newItem);
   */
+#endif
 }
 //====================================================================