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.
147 lines
5.1 KiB
C
147 lines
5.1 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkTemporalDelimitedTextReader.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 vtkTemporalDelimitedTextReader
|
||
|
* @brief reads a delimited ascii or unicode text files and and output a
|
||
|
* temporal vtkTable.
|
||
|
*
|
||
|
* This reader requires that FieldDelimiterCharacters is set before
|
||
|
* the pipeline is executed, otherwise it will produce an empty output.
|
||
|
*
|
||
|
* A column can be selected as time step indicator using the SetTimeColumnName
|
||
|
* or SetTimeColumnId functions. If so, for a given time step 's' only the
|
||
|
* lines where the time step indicator column have the value 's' are present.
|
||
|
* To control if the time step indicator column should be present in the
|
||
|
* output, a RemoveTimeStepColumn option is available. If no time step
|
||
|
* indicator column is given by the user, the whole file it outputted.
|
||
|
*
|
||
|
* This reader assume the time step column is numeric. A warning is
|
||
|
* set otherwise. The DetectNumericColumns field is set to on,
|
||
|
* do not change this field unless you really know what you are
|
||
|
* doing.
|
||
|
*
|
||
|
* @see vtkDelimitedTextReader
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkTemporalDelimitedTextReader_h
|
||
|
#define vtkTemporalDelimitedTextReader_h
|
||
|
|
||
|
#include "vtkDelimitedTextReader.h"
|
||
|
|
||
|
#include "vtkIOInfovisModule.h" // module export
|
||
|
#include "vtkNew.h" // For ReadTable field
|
||
|
|
||
|
#include <map> // To store the TimeMap
|
||
|
#include <vector> // To store the TimeMap
|
||
|
|
||
|
class VTKIOINFOVIS_EXPORT vtkTemporalDelimitedTextReader : public vtkDelimitedTextReader
|
||
|
{
|
||
|
public:
|
||
|
static vtkTemporalDelimitedTextReader* New();
|
||
|
vtkTypeMacro(vtkTemporalDelimitedTextReader, vtkDelimitedTextReader);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the name of the column to use as time indicator.
|
||
|
* Ignored if TimeColumnId is not equal to -1.
|
||
|
* If no column has been chosen using either the TimeColumnId or the
|
||
|
* TimeColumnName the whole input file is outputted.
|
||
|
* Default to empty string.
|
||
|
*/
|
||
|
vtkGetMacro(TimeColumnName, std::string);
|
||
|
void SetTimeColumnName(const std::string name);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the column to use as time indicator.
|
||
|
* It the TimeColumnId is equal to -1, the TimeColumnName will be used
|
||
|
* instead.
|
||
|
* If no column has been chosen using either the TimeColumnId or the
|
||
|
* TimeColumnName the whole input file is outputted.
|
||
|
* Default to -1.
|
||
|
*/
|
||
|
vtkGetMacro(TimeColumnId, int);
|
||
|
void SetTimeColumnId(const int idx);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the RemoveTimeStepColumn flag
|
||
|
* If this boolean is true, the output will not contain the Time step column.
|
||
|
* Default to true.
|
||
|
*/
|
||
|
vtkGetMacro(RemoveTimeStepColumn, bool);
|
||
|
void SetRemoveTimeStepColumn(bool rts);
|
||
|
//@}
|
||
|
|
||
|
/** Internal fields of this reader use a specific MTime (InternalMTime).
|
||
|
* This mechamism ensure the actual data is only re-read when necessary.
|
||
|
* Here, we ensure the GetMTime of this reader stay consistent by returning
|
||
|
* the latest between the MTime of this reader and the internal one.
|
||
|
*
|
||
|
* @see InternalModified
|
||
|
*/
|
||
|
vtkMTimeType GetMTime() override;
|
||
|
|
||
|
protected:
|
||
|
vtkTemporalDelimitedTextReader();
|
||
|
~vtkTemporalDelimitedTextReader() override = default;
|
||
|
|
||
|
/**
|
||
|
* In order to fill the TIME_STEPS and TIME_RANGE keys, this method call the
|
||
|
* ReadData function that actually read the full input file content (may be
|
||
|
* slow!). Custom MTime management is used to ensure we do not re-read the
|
||
|
* input file uselessly.
|
||
|
*/
|
||
|
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
|
||
|
vtkInformationVector* outputVector) override;
|
||
|
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
|
||
|
vtkInformationVector* outputVector) override;
|
||
|
|
||
|
/**
|
||
|
* This function checks if a user specified column has been set and check if
|
||
|
* this input is valid. If an invalid input has been detected, return false.
|
||
|
* Otherwise, InternalColumnName will be set to the name of the time column
|
||
|
* or empty if none has been given by the user.
|
||
|
*/
|
||
|
bool EnforceColumnName();
|
||
|
|
||
|
/**
|
||
|
* When parameters specific of this reader are modified, we do not want to
|
||
|
* re-read the input file. Keep an internal time stamp to track them.
|
||
|
*/
|
||
|
void InternalModified();
|
||
|
|
||
|
// Time column fields
|
||
|
std::string TimeColumnName = "";
|
||
|
std::string InternalColumnName = "";
|
||
|
vtkIdType TimeColumnId = -1;
|
||
|
bool RemoveTimeStepColumn = true;
|
||
|
std::map<double, std::vector<vtkIdType> > TimeMap;
|
||
|
|
||
|
// Input file content and update
|
||
|
vtkNew<vtkTable> ReadTable;
|
||
|
vtkMTimeType LastReadTime = 0;
|
||
|
vtkTimeStamp InternalMTime;
|
||
|
|
||
|
private:
|
||
|
vtkTemporalDelimitedTextReader(const vtkTemporalDelimitedTextReader&) = delete;
|
||
|
void operator=(const vtkTemporalDelimitedTextReader&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|