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
*/
SerieHelper::SerieHelper()
{
+ UserLessThanFunction = 0;
+
// For all the File lists that may already exist within the gdcm::Serie
FileList *l = GetFirstCoherentFileList();
while (l)
*/
void SerieHelper::OrderFileList(FileList *coherentFileList)
{
- if ( ImagePositionPatientOrdering( coherentFileList ) )
+
+ if ( SerieHelper::UserLessThanFunction )
+ {
+ UserOrdering( coherentFileList );
+ return;
+ }
+ else if ( ImagePositionPatientOrdering( coherentFileList ) )
{
return ;
}
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
/**
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
class File;
typedef std::vector<File* > FileList;
+typedef bool (*BOOL_FUNCTION_PFILE_PFILE_POINTER)(File *, File *);
+
//-----------------------------------------------------------------------------
/**
* \brief
/**
* \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 !
/// 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);
/// \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