From 02e5b298070faff881e584dd818d85bfc05e92bf Mon Sep 17 00:00:00 2001 From: jpr Date: Tue, 30 Aug 2005 08:12:40 +0000 Subject: [PATCH] According to some requierements, if user knows more about his images than gdcm does, he may supply his own comparison function. void SerieHelper::SetUserLessThanFunction(UserLessThanFunction); with bool UserLessThanFunction(File *, File*); --- src/gdcmSerieHelper.cxx | 29 ++++++++++++++++++++++++++--- src/gdcmSerieHelper.h | 16 +++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/gdcmSerieHelper.cxx b/src/gdcmSerieHelper.cxx index 19f82fe3..1c18682f 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/30 18:13:24 $ - Version: $Revision: 1.17 $ + Date: $Date: 2005/08/30 08:12:40 $ + Version: $Revision: 1.18 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -37,6 +37,8 @@ namespace gdcm */ SerieHelper::SerieHelper() { + UserLessThanFunction = 0; + // For all the File lists that may already exist within the gdcm::Serie FileList *l = GetFirstCoherentFileList(); while (l) @@ -282,7 +284,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 ; } @@ -584,6 +592,21 @@ bool SerieHelper::FileNameOrdering(FileList *fileList) return true; } +/** + * \brief sorts the images, according to user supplied function + * \note Only Direct ordering is allowed + * @param fileList Coherent File list (same Serie UID) to sort + * @return false only if the header is bugged ! + */ +bool SerieHelper::UserOrdering(FileList *fileList) +{ + if (DirectOrder) + std::sort(fileList->begin(), fileList->end(), SerieHelper::UserLessThanFunction); + else + gdcmWarningMacro( " Only Direct ordering allowed " + << "when user function is supplied"); + return true; +} //----------------------------------------------------------------------------- // Print /** diff --git a/src/gdcmSerieHelper.h b/src/gdcmSerieHelper.h index 6921df6a..e30b08fa 100644 --- a/src/gdcmSerieHelper.h +++ b/src/gdcmSerieHelper.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmSerieHelper.h,v $ Language: C++ - Date: $Date: 2005/07/30 18:13:24 $ - Version: $Revision: 1.16 $ + Date: $Date: 2005/08/30 08:12:40 $ + 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 @@ -31,6 +31,8 @@ namespace gdcm class File; typedef std::vector FileList; +typedef bool (*BOOL_FUNCTION_PFILE_PFILE_POINTER)(File *, File *); + //----------------------------------------------------------------------------- /** * \brief @@ -76,7 +78,7 @@ public: /** * \brief Sets the LoadMode as a boolean string. * NO_SEQ, NO_SHADOW, NO_SHADOWSEQ - ... (nothing more, right now) + * (nothing more, right now) * WARNING : before using NO_SHADOW, be sure *all* your files * contain accurate values in the 0x0000 element (if any) * of *each* Shadow Group. The parser will fail if the size is wrong ! @@ -90,7 +92,11 @@ public: /// Brief User wants the files to be sorted Reverse Order void SetSortOrderToReverse() { DirectOrder = false; } + /// to allow user to give is own comparison function + void SetUserLessThanFunction( BOOL_FUNCTION_PFILE_PFILE_POINTER userFunc ) + { UserLessThanFunction = userFunc; } private: + bool UserOrdering(FileList *coherentFileList); bool ImagePositionPatientOrdering(FileList *coherentFileList); bool ImageNumberOrdering(FileList *coherentFileList); bool FileNameOrdering(FileList *coherentFileList); @@ -127,6 +133,10 @@ private: /// \brief whether we want to sort in direct order or not (reverse order). /// To be used by aware user only bool DirectOrder; + + /// \brief If user knows more about his images than gdcm does, + /// he may supply his own comparison function. + /*static*/ BOOL_FUNCTION_PFILE_PFILE_POINTER UserLessThanFunction; }; } // end namespace gdcm -- 2.45.1