]> Creatis software - clitk.git/blobdiff - vv/vvQDicomSeriesSelector.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvQDicomSeriesSelector.cxx
index 2102ddb73735e74f5a7a76c07b03514abda5f40d..d5444cdbe5b168317880b97895b8f741f7379045 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
 #ifndef VVDICOMSERIESSELECTOR_CXX
 #define VVDICOMSERIESSELECTOR_CXX
 #include <itkGDCMImageIO.h>
 #include <itkGDCMSeriesFileNames.h>
 #include <gdcmFile.h>
+#if GDCM_MAJOR_VERSION >= 2
+#include <gdcmImageReader.h>
+#include <gdcmDataSetHelper.h>
+#include <gdcmStringFilter.h>
+#include <gdcmImageHelper.h>
+#else
 #include <gdcmDocEntry.h>
+#endif
 
 #include "vvQDicomSeriesSelector.h"
 //#include "vvUserConfig.h"
@@ -51,6 +58,8 @@ vvDicomSeriesSelector::vvDicomSeriesSelector(QWidget* parent)
           this, SLOT(itemSelectionChanged()));
   connect(ui.mDicomDetailsListWidget, SIGNAL(itemSelectionChanged()),
           this, SLOT(itemDetailsSelectionChanged()));
+  connect(ui.mIsMatrixCheckBox, SIGNAL(stateChanged(int)),
+          this, SLOT(itemMatrixSelectionChanged(int)));
 
   // Initialization
   /*   if (config::get_current_path() != QString(0))
@@ -60,6 +69,8 @@ vvDicomSeriesSelector::vvDicomSeriesSelector(QWidget* parent)
 
   mPreviousPath = mFoldername;
   ui.mFolderLineEdit->setText(mFoldername);
+  ui.mIsMatrixCheckBox->setChecked(0);
+  mPatientCoordinateSystem = false;
   //  ui.mTableWidget->setRowCount(0);
 }
 //====================================================================
@@ -87,8 +98,12 @@ void vvDicomSeriesSelector::close()
 void vvDicomSeriesSelector::BrowseButtonRelease()
 {
   QFileDialog dialog(this);
+  QStringList filters;
+  filters << "DICOM files (*.dcm)"
+          << "All files (*)";
   dialog.setFileMode(QFileDialog::AnyFile);
-  dialog.setFilter("DICOM files (*.dcm); All files (*)");
+  dialog.setNameFilters(filters);
+  //dialog.setFilter(tr("DICOM files (*.dcm); All files (*)"));
   mFoldername = dialog.getExistingDirectory(this,
                 "Select a folder to find DICOM image",
                 mPreviousPath);
@@ -129,6 +144,10 @@ void vvDicomSeriesSelector::SearchButtonRelease()
       mListOfSeriesFilenames[seriesUID[i]] = filenames;
 
       // store first header
+#if GDCM_MAJOR_VERSION >= 2
+      mDicomHeader[seriesUID[i]].SetFileName( (*filenames)[0].c_str() );
+      mDicomHeader[seriesUID[i]].Read();
+#else
       gdcm::File *header = new gdcm::File();
       header->SetFileName((*filenames)[0]);
       header->SetMaxSizeLoadEntry(16384);
@@ -167,6 +186,7 @@ void vvDicomSeriesSelector::SearchButtonRelease()
 
 
       mDicomHeader[seriesUID[i]] = header;
+#endif
 
       // new item
       QListWidgetItem *newItem = new QListWidgetItem;
@@ -190,6 +210,7 @@ void vvDicomSeriesSelector::itemSelectionChanged()
   if (mDicomInfo[mCurrentSerie] == "") {
     //         QString m;
     //         m = QString("Patient : <font color=\"blue\">%1</font><br>").arg(mDicomHeader[s]->GetEntryValue(0x0010,0x0010).c_str()); // Patient's name
+
     mDicomInfo[mCurrentSerie] = MakeDicomInfo(mCurrentSerie, mDicomHeader[mCurrentSerie]);
   }
   ui.mDicomInfoPanel->setText(mDicomInfo[mCurrentSerie]);
@@ -212,9 +233,37 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged()
   if (i<mFilenames->size()) {
     if (mDicomDetails[(*mFilenames)[i]] == "") {
       std::ostringstream s;
-      mDicomHeader[mCurrentSerie]->Print(s);
-
       QString l;
+
+#if GDCM_MAJOR_VERSION >= 2
+      mDicomHeader[mCurrentSerie].GetFile().Print(s);
+      const gdcm::File& header = mDicomHeader[mCurrentSerie].GetFile();
+      gdcm::StringFilter sf;
+      sf.SetFile( header );
+      const 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
+      mDicomHeader[mCurrentSerie]->Print(s);
       gdcm::File * header = mDicomHeader[mCurrentSerie];
       gdcm::DocEntry * e = header->GetFirstEntry();
       while (e) {
@@ -225,6 +274,7 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged()
         }
         e = header->GetNextEntry();
       }
+#endif
 
       mDicomDetails[(*mFilenames)[i]] = l.toStdString();
     }
@@ -234,6 +284,43 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged()
 //====================================================================
 
 //====================================================================
+#if GDCM_MAJOR_VERSION >= 2
+QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, const gdcm::Reader& header)
+{
+  QString n = QString("%1").arg(mListOfSeriesFilenames[s]->size());
+  const gdcm::File &f = header.GetFile();
+  std::vector<double> thespacing = gdcm::ImageHelper::GetSpacingValue(f);
+  std::vector<double> theorigin = gdcm::ImageHelper::GetOriginValue(f);
+
+  QString size = QString("%1x%2x%3")
+                 .arg(0)
+                 .arg(0)
+                 .arg(0);
+  QString spacing = QString("%1x%2x%3")
+                    .arg(thespacing[0])
+                    .arg(thespacing[1])
+                    .arg(thespacing[2]);
+  QString origin = QString("%1x%2x%3")
+                   .arg(theorigin[0])
+                   .arg(theorigin[1])
+                   .arg(theorigin[2]);
+
+  QString ss =
+    //AddInfo(        "Serie ID   : ", s)+
+    AddInfo(&header.GetFile(), "Patient : ", 0x0010,0x0010)+
+    AddInfo(        "Folder : ", QFileInfo((*mFilenames)[0].c_str()).canonicalPath().toStdString())+
+    AddInfo(&header.GetFile(), "Series Description : ", 0x0008,0x103e)+
+    AddInfo(&header.GetFile(), "Modality : ", 0x0008,0x0060)+
+    AddInfo(&header.GetFile(), "# images : ", 0x0020,0x0013)+
+    AddInfo(        "# files : ", n.toStdString())+
+    AddInfo(        "Size : ", size.toStdString())+
+    AddInfo(        "Spacing : ", spacing.toStdString())+
+    AddInfo(        "Origin : ", origin.toStdString())+
+    AddInfo(&header.GetFile(), "Pixel size : ", 0x0028,0x0100)+
+    AddInfo(        "Pixel type : ", "");
+  return ss;
+}
+#else
 QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header)
 {
   QString n = QString("%1").arg(mListOfSeriesFilenames[s]->size());
@@ -264,12 +351,21 @@ QString vvDicomSeriesSelector::MakeDicomInfo(std::string & s, gdcm::File *header
     AddInfo(        "Pixel type : ", header->GetPixelType());
   return ss;
 }
+#endif
 //====================================================================
 
 //====================================================================
-QString vvDicomSeriesSelector::AddInfo(gdcm::File *header, QString n, uint16_t group, uint16_t elem)
+QString vvDicomSeriesSelector::AddInfo(const gdcm::File *header, QString n, uint16_t group, uint16_t elem)
 {
-  return AddInfo(n.toStdString(), header->GetEntryValue(group, 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(), const_cast<gdcm::File*>(header)->GetEntryValue(group, elem));
+#endif
 }
 //====================================================================
 
@@ -285,6 +381,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,7 +401,17 @@ void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector<std::string> &
   DD(ui.mTableWidget->rowCount());
   ui.mTableWidget->setItem(i, 0, newItem);
   */
+#endif
 }
 //====================================================================
 
+
+//====================================================================
+void vvDicomSeriesSelector::itemMatrixSelectionChanged(int state)
+{
+  mPatientCoordinateSystem = state;
+}
+//====================================================================
+
+
 #endif // VVDICOMSERIESSELECTOR_CXX