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"
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))
mPreviousPath = mFoldername;
ui.mFolderLineEdit->setText(mFoldername);
+ ui.mIsMatrixCheckBox->setChecked(0);
+ mPatientCoordinateSystem = false;
// ui.mTableWidget->setRowCount(0);
}
//====================================================================
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);
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);
mDicomHeader[seriesUID[i]] = header;
+#endif
// new item
QListWidgetItem *newItem = new QListWidgetItem;
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]);
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) {
}
e = header->GetNextEntry();
}
+#endif
mDicomDetails[(*mFilenames)[i]] = l.toStdString();
}
//====================================================================
//====================================================================
+#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());
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
}
//====================================================================
//====================================================================
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);
DD(ui.mTableWidget->rowCount());
ui.mTableWidget->setItem(i, 0, newItem);
*/
+#endif
}
//====================================================================
+
+//====================================================================
+void vvDicomSeriesSelector::itemMatrixSelectionChanged(int state)
+{
+ mPatientCoordinateSystem = state;
+}
+//====================================================================
+
+
#endif // VVDICOMSERIESSELECTOR_CXX