X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmSerieHelper.cxx;h=27f6b509bab8d88ba9f3021146f0dab7e6416395;hb=f3cc252fad08c3e8dbc395f2ca7cabf47bf95302;hp=cf592ea3ceb217d9a3ae0d3d4eaa513080e18bf3;hpb=f0e413c2c9e040814d7c8bf4909337d9d7b88714;p=gdcm.git diff --git a/src/gdcmSerieHelper.cxx b/src/gdcmSerieHelper.cxx index cf592ea3..27f6b509 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/29 15:07:16 $ - Version: $Revision: 1.16 $ + Date: $Date: 2005/08/30 14:15:34 $ + Version: $Revision: 1.19 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -29,6 +29,7 @@ namespace gdcm { +//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Constructor / Destructor @@ -37,7 +38,9 @@ namespace gdcm */ SerieHelper::SerieHelper() { - // For all the File lists of the gdcm::Serie + UserLessThanFunction = 0; + + // For all the File lists that may already exist within the gdcm::Serie FileList *l = GetFirstCoherentFileList(); while (l) { @@ -46,10 +49,10 @@ 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; @@ -69,10 +72,10 @@ SerieHelper::~SerieHelper() it != l->end(); ++it) { - delete *it; + delete *it; // remove entry } l->clear(); - delete l; + delete l; // remove the list l = GetNextCoherentFileList(); } } @@ -282,7 +285,13 @@ void SerieHelper::SetDirectory(std::string const &dir, bool recursive) */ void SerieHelper::OrderFileList(FileList *coherentFileList) { - if ( ImagePositionPatientOrdering( coherentFileList ) ) + + if ( SerieHelper::UserLessThanFunction ) + { + UserOrdering( coherentFileList ); + return; + } + else if ( ImagePositionPatientOrdering( coherentFileList ) ) { return ; } @@ -296,6 +305,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 @@ -532,12 +571,12 @@ bool SerieHelper::ImageNumberOrdering(FileList *fileList) bool SerieHelper::FileNameLessThan(File *file1, File *file2) { - return file1->GetFileName() < file2->GetFileName(); + return file1->GetFileName() < file2->GetFileName(); } bool SerieHelper::FileNameGreaterThan(File *file1, File *file2) { - return file1->GetFileName() > file2->GetFileName(); + return file1->GetFileName() > file2->GetFileName(); } /** * \brief sorts the images, according to their File Name @@ -554,6 +593,21 @@ bool SerieHelper::FileNameOrdering(FileList *fileList) return true; } +/** + * \brief sorts the images, according to user supplied function + * @param fileList Coherent File list (same Serie UID) to sort + * @return false only if the header is bugged ! + */ +bool SerieHelper::UserOrdering(FileList *fileList) +{ + std::sort(fileList->begin(), fileList->end(), SerieHelper::UserLessThanFunction); + if (!DirectOrder) + { + std::reverse(fileList->begin(), fileList->end()); + } + return true; +} + //----------------------------------------------------------------------------- // Print /**