X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmSerieHelper.cxx;h=19f82fe3e6588ab1784657cad76111030b296bd8;hb=9c9ce3a986149341c8203e9473b3714bdeb1ab39;hp=aad62e48f965f5f25f1324e3a9ca1d5babe26300;hpb=43d3220922f848b2c9b21e2a9c71b3063bff9048;p=gdcm.git diff --git a/src/gdcmSerieHelper.cxx b/src/gdcmSerieHelper.cxx index aad62e48..19f82fe3 100644 --- a/src/gdcmSerieHelper.cxx +++ b/src/gdcmSerieHelper.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmSerieHelper.cxx,v $ Language: C++ - Date: $Date: 2005/07/21 06:39:24 $ - Version: $Revision: 1.15 $ + Date: $Date: 2005/07/30 18:13:24 $ + Version: $Revision: 1.17 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -37,7 +37,7 @@ namespace gdcm */ SerieHelper::SerieHelper() { - // For all the File lists of the gdcm::Serie + // For all the File lists that may already exist within the gdcm::Serie FileList *l = GetFirstCoherentFileList(); while (l) { @@ -46,12 +46,13 @@ SerieHelper::SerieHelper() it != l->end(); ++it) { - delete *it; + delete *it; // remove entry } l->clear(); - delete l;; + delete l; // remove the list l = GetNextCoherentFileList(); } + DirectOrder = true; } /** @@ -68,10 +69,10 @@ SerieHelper::~SerieHelper() it != l->end(); ++it) { - delete *it; + delete *it; // remove entry } l->clear(); - delete l; + delete l; // remove the list l = GetNextCoherentFileList(); } } @@ -219,7 +220,6 @@ void SerieHelper::AddGdcmFile(File *header) // Even if a rule was unmatch we don't deallocate the gdcm::File: } - /** * \brief add a rules for restricting a DICOM file to be in the serie we are * trying to find. For example you can select only the DICOM file from a @@ -296,6 +296,36 @@ void SerieHelper::OrderFileList(FileList *coherentFileList) } } +/** + * \brief Elementary coherence checking of the files with the same Serie UID + * Only sizes and pixel type are checked right now ... + */ +bool SerieHelper::IsCoherent(FileList *coherentFileList) +{ + if(coherentFileList->size() == 1) + return true; + + FileList::const_iterator it = coherentFileList->begin(); + + int nX = (*it)->GetXSize(); + int nY = (*it)->GetYSize(); + int pixelSize = (*it)->GetPixelSize(); + + it ++; + for ( ; + it != coherentFileList->end(); + ++it) + { + if ( (*it)->GetXSize() != nX ) + return false; + if ( (*it)->GetYSize() != nY ) + return false; + if ( (*it)->GetPixelSize() != pixelSize ) + return false; + // probabely more is to be checked (?) + } + return true; +} /** * \brief Get the first List while visiting the CoherentFileListHT * @return The first FileList if found, otherwhise NULL @@ -457,13 +487,26 @@ bool SerieHelper::ImagePositionPatientOrdering( FileList *fileList ) } fileList->clear(); // doesn't delete list elements, only nodes - - //VC++ don't understand what scope is !! it -> it3 - for (FileVector::const_iterator it3 = CoherentFileVector.begin(); - it3 != CoherentFileVector.end(); ++it3) - { - fileList->push_back( *it3 ); + + if (DirectOrder) + { + //VC++ don't understand what scope is !! it -> it3 + for (FileVector::const_iterator it3 = CoherentFileVector.begin(); + it3 != CoherentFileVector.end(); ++it3) + { + fileList->push_back( *it3 ); + } } + else // user asked for reverse order + { + FileVector::const_iterator it4; + it4 = CoherentFileVector.end(); + do + { + it4--; + fileList->push_back( *it4 ); + } while (it4 != CoherentFileVector.begin() ); + } distlist.clear(); CoherentFileVector.clear(); @@ -476,6 +519,10 @@ bool SerieHelper::ImageNumberLessThan(File *file1, File *file2) return file1->GetImageNumber() < file2->GetImageNumber(); } +bool SerieHelper::ImageNumberGreaterThan(File *file1, File *file2) +{ + return file1->GetImageNumber() > file2->GetImageNumber(); +} /** * \brief sorts the images, according to their Image Number * \note Works only on bona fide files (i.e image number is a character string @@ -505,7 +552,10 @@ bool SerieHelper::ImageNumberOrdering(FileList *fileList) gdcmWarningMacro( " 'Image numbers' not coherent. No ImageNumberOrdering sort performed."); return false; } - std::sort(fileList->begin(), fileList->end(), SerieHelper::ImageNumberLessThan ); + if (DirectOrder) + std::sort(fileList->begin(), fileList->end(), SerieHelper::ImageNumberLessThan ); + else + std::sort(fileList->begin(), fileList->end(), SerieHelper::ImageNumberGreaterThan ); return true; } @@ -515,6 +565,10 @@ bool SerieHelper::FileNameLessThan(File *file1, File *file2) return file1->GetFileName() < file2->GetFileName(); } +bool SerieHelper::FileNameGreaterThan(File *file1, File *file2) +{ + return file1->GetFileName() > file2->GetFileName(); +} /** * \brief sorts the images, according to their File Name * @param fileList Coherent File list (same Serie UID) to sort @@ -522,7 +576,11 @@ bool SerieHelper::FileNameLessThan(File *file1, File *file2) */ bool SerieHelper::FileNameOrdering(FileList *fileList) { - std::sort(fileList->begin(), fileList->end(), SerieHelper::FileNameLessThan); + if (DirectOrder) + std::sort(fileList->begin(), fileList->end(), SerieHelper::FileNameLessThan); + else + std::sort(fileList->begin(), fileList->end(), SerieHelper::FileNameGreaterThan); + return true; }