You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.9 KiB
C
169 lines
4.9 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkSortFileNames.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkSortFileNames
|
||
|
* @brief Group and sort a set of filenames
|
||
|
*
|
||
|
* vtkSortFileNames will take a list of filenames (e.g. from
|
||
|
* a file load dialog) and sort them into one or more series. If
|
||
|
* the input list of filenames contains any directories, these can
|
||
|
* be removed before sorting using the SkipDirectories flag. This
|
||
|
* class should be used where information about the series groupings
|
||
|
* can be determined by the filenames, but it might not be successful
|
||
|
* in cases where the information about the series groupings is
|
||
|
* stored in the files themselves (e.g DICOM).
|
||
|
* @sa
|
||
|
* vtkImageReader2
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkSortFileNames_h
|
||
|
#define vtkSortFileNames_h
|
||
|
|
||
|
#include "vtkIOCoreModule.h" // For export macro
|
||
|
#include "vtkObject.h"
|
||
|
|
||
|
class vtkStringArray;
|
||
|
|
||
|
// this is a helper class defined in the .cxx file
|
||
|
class vtkStringArrayVector;
|
||
|
|
||
|
class VTKIOCORE_EXPORT vtkSortFileNames : public vtkObject
|
||
|
{
|
||
|
public:
|
||
|
vtkTypeMacro(vtkSortFileNames, vtkObject);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
static vtkSortFileNames* New();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Sort the file names into groups, according to similarity in
|
||
|
* filename name and path. Files in different directories,
|
||
|
* or with different extensions, or which do not fit into the same
|
||
|
* numbered series will be placed into different groups. This is
|
||
|
* off by default.
|
||
|
*/
|
||
|
vtkSetMacro(Grouping, vtkTypeBool);
|
||
|
vtkGetMacro(Grouping, vtkTypeBool);
|
||
|
vtkBooleanMacro(Grouping, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Sort the files numerically, rather than lexicographically.
|
||
|
* For filenames that contain numbers, this means the order will be
|
||
|
* ["file8.dat", "file9.dat", "file10.dat"]
|
||
|
* instead of the usual alphabetic sorting order
|
||
|
* ["file10.dat" "file8.dat", "file9.dat"].
|
||
|
* NumericSort is off by default.
|
||
|
*/
|
||
|
vtkSetMacro(NumericSort, vtkTypeBool);
|
||
|
vtkGetMacro(NumericSort, vtkTypeBool);
|
||
|
vtkBooleanMacro(NumericSort, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Ignore case when sorting. This flag is honored by both
|
||
|
* the sorting and the grouping. This is off by default.
|
||
|
*/
|
||
|
vtkSetMacro(IgnoreCase, vtkTypeBool);
|
||
|
vtkGetMacro(IgnoreCase, vtkTypeBool);
|
||
|
vtkBooleanMacro(IgnoreCase, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Skip directories. If this flag is set, any input item that
|
||
|
* is a directory rather than a file will not be included in
|
||
|
* the output. This is off by default.
|
||
|
*/
|
||
|
vtkSetMacro(SkipDirectories, vtkTypeBool);
|
||
|
vtkGetMacro(SkipDirectories, vtkTypeBool);
|
||
|
vtkBooleanMacro(SkipDirectories, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set a list of file names to group and sort.
|
||
|
*/
|
||
|
void SetInputFileNames(vtkStringArray* input);
|
||
|
vtkGetObjectMacro(InputFileNames, vtkStringArray);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Get the full list of sorted filenames.
|
||
|
*/
|
||
|
virtual vtkStringArray* GetFileNames();
|
||
|
|
||
|
/**
|
||
|
* Get the number of groups that the names were split into, if
|
||
|
* grouping is on. The filenames are automatically split into
|
||
|
* groups, where the filenames in each group will be identical
|
||
|
* except for their series numbers. If grouping is not on, this
|
||
|
* method will return zero.
|
||
|
*/
|
||
|
virtual int GetNumberOfGroups();
|
||
|
|
||
|
/**
|
||
|
* Get the Nth group of file names. This method should only
|
||
|
* be used if grouping is on. If grouping is off, it will always
|
||
|
* return null.
|
||
|
*/
|
||
|
virtual vtkStringArray* GetNthGroup(int i);
|
||
|
|
||
|
/**
|
||
|
* Update the output filenames from the input filenames.
|
||
|
* This method is called automatically by GetFileNames()
|
||
|
* and GetNumberOfGroups() if the input names have changed.
|
||
|
*/
|
||
|
virtual void Update();
|
||
|
|
||
|
protected:
|
||
|
vtkSortFileNames();
|
||
|
~vtkSortFileNames() override;
|
||
|
|
||
|
vtkTypeBool NumericSort;
|
||
|
vtkTypeBool IgnoreCase;
|
||
|
vtkTypeBool Grouping;
|
||
|
vtkTypeBool SkipDirectories;
|
||
|
|
||
|
vtkTimeStamp UpdateTime;
|
||
|
|
||
|
vtkStringArray* InputFileNames;
|
||
|
vtkStringArray* FileNames;
|
||
|
vtkStringArrayVector* Groups;
|
||
|
|
||
|
/**
|
||
|
* Fill the output.
|
||
|
*/
|
||
|
virtual void Execute();
|
||
|
|
||
|
/**
|
||
|
* Sort the input string array, and append the results to the output.
|
||
|
*/
|
||
|
virtual void SortFileNames(vtkStringArray* input, vtkStringArray* output);
|
||
|
|
||
|
/**
|
||
|
* Separate a string array into groups and append them to the output.
|
||
|
*/
|
||
|
virtual void GroupFileNames(vtkStringArray* input, vtkStringArrayVector* output);
|
||
|
|
||
|
private:
|
||
|
vtkSortFileNames(const vtkSortFileNames&) = delete;
|
||
|
void operator=(const vtkSortFileNames&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|