X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvQDicomSeriesSelector.cxx;h=c1f821516be03f05f697cf00925bbf5040f5d5aa;hb=5a7da4aedae5c204bc55c187717193e5950f9a44;hp=2102ddb73735e74f5a7a76c07b03514abda5f40d;hpb=1e034c70105f0926939acaaa27ddb46e904ae8bf;p=clitk.git diff --git a/vv/vvQDicomSeriesSelector.cxx b/vv/vvQDicomSeriesSelector.cxx index 2102ddb..c1f8215 100644 --- a/vv/vvQDicomSeriesSelector.cxx +++ b/vv/vvQDicomSeriesSelector.cxx @@ -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 @@ -14,13 +14,20 @@ - 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 #include #include +#if GDCM_MAJOR_VERSION == 2 +#include +#include +#include +#include +#else #include +#endif #include "vvQDicomSeriesSelector.h" //#include "vvUserConfig.h" @@ -129,6 +136,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 +178,7 @@ void vvDicomSeriesSelector::SearchButtonRelease() mDicomHeader[seriesUID[i]] = header; +#endif // new item QListWidgetItem *newItem = new QListWidgetItem; @@ -190,6 +202,7 @@ void vvDicomSeriesSelector::itemSelectionChanged() if (mDicomInfo[mCurrentSerie] == "") { // QString m; // m = QString("Patient : %1
").arg(mDicomHeader[s]->GetEntryValue(0x0010,0x0010).c_str()); // Patient's name + mDicomInfo[mCurrentSerie] = MakeDicomInfo(mCurrentSerie, mDicomHeader[mCurrentSerie]); } ui.mDicomInfoPanel->setText(mDicomInfo[mCurrentSerie]); @@ -212,9 +225,37 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged() if (isize()) { 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 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 +266,7 @@ void vvDicomSeriesSelector::itemDetailsSelectionChanged() } e = header->GetNextEntry(); } +#endif mDicomDetails[(*mFilenames)[i]] = l.toStdString(); } @@ -234,6 +276,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 thespacing = gdcm::ImageHelper::GetSpacingValue(f); + std::vector 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 +343,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(header)->GetEntryValue(group, elem)); +#endif } //==================================================================== @@ -285,6 +373,8 @@ QString vvDicomSeriesSelector::AddInfo(std::string n, std::string m) //==================================================================== void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector & filenames) { +#if GDCM_MAJOR_VERSION == 2 +#else gdcm::File *header = new gdcm::File(); header->SetFileName(filenames[0]); header->SetMaxSizeLoadEntry(16384); @@ -303,6 +393,7 @@ void vvDicomSeriesSelector::AddSerieToTheTable(int i, std::vector & DD(ui.mTableWidget->rowCount()); ui.mTableWidget->setItem(i, 0, newItem); */ +#endif } //====================================================================