mirror of https://gitee.com/openkylin/vtk9.git
201 lines
5.5 KiB
C++
201 lines
5.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkHDFReader.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 vtkHDFReader
|
|
* @brief VTKHDF format reader.
|
|
*
|
|
*/
|
|
|
|
#ifndef vtkHDFReader_h
|
|
#define vtkHDFReader_h
|
|
|
|
#include "vtkDataSetAlgorithm.h"
|
|
#include "vtkIOHDFModule.h" // For export macro
|
|
#include <vector> // For storing list of values
|
|
|
|
class vtkAbstractArray;
|
|
class vtkCallbackCommand;
|
|
class vtkDataArraySelection;
|
|
class vtkDataSet;
|
|
class vtkDataSetAttributes;
|
|
class vtkInformationVector;
|
|
class vtkInformation;
|
|
class vtkCommand;
|
|
|
|
/**
|
|
* @class vtkHDFReader
|
|
* @brief Read VTK HDF files.
|
|
*
|
|
* Reads data saved using the VTK HDF format which supports all
|
|
* vtkDataSet types (image data and unstructured grid are currently
|
|
* implemented) and serial as well as parallel processing. See (@ref
|
|
* VTKHDFFileFormat) for more information about this.
|
|
*
|
|
*/
|
|
class VTKIOHDF_EXPORT vtkHDFReader : public vtkDataSetAlgorithm
|
|
{
|
|
public:
|
|
static vtkHDFReader* New();
|
|
vtkTypeMacro(vtkHDFReader, vtkDataSetAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set the name of the input file.
|
|
*/
|
|
vtkSetFilePathMacro(FileName);
|
|
vtkGetFilePathMacro(FileName);
|
|
//@}
|
|
|
|
/**
|
|
* Test whether the file (type) with the given name can be read by this
|
|
* reader. If the file has a newer version than the reader, we still say
|
|
* we can read the file type and we fail later, when we try to read the file.
|
|
* This enables clients (ParaView) to distinguish between failures when we
|
|
* need to look for another reader and failures when we don't.
|
|
*/
|
|
virtual int CanReadFile(VTK_FILEPATH const char* name);
|
|
|
|
//@{
|
|
/**
|
|
* Get the output as a vtkDataSet pointer.
|
|
*/
|
|
vtkDataSet* GetOutputAsDataSet();
|
|
vtkDataSet* GetOutputAsDataSet(int index);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the data array selection tables used to configure which data
|
|
* arrays are loaded by the reader.
|
|
*/
|
|
virtual vtkDataArraySelection* GetPointDataArraySelection();
|
|
virtual vtkDataArraySelection* GetCellDataArraySelection();
|
|
virtual vtkDataArraySelection* GetFieldDataArraySelection();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the number of point or cell arrays available in the input.
|
|
*/
|
|
int GetNumberOfPointArrays();
|
|
int GetNumberOfCellArrays();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the name of the point or cell array with the given index in
|
|
* the input.
|
|
*/
|
|
const char* GetPointArrayName(int index);
|
|
const char* GetCellArrayName(int index);
|
|
//@}
|
|
|
|
protected:
|
|
vtkHDFReader();
|
|
~vtkHDFReader() override;
|
|
|
|
/**
|
|
* How many attribute types we have. This returns 3: point, cell and field
|
|
* attribute types.
|
|
*/
|
|
constexpr static int GetNumberOfAttributeTypes() { return 3; }
|
|
|
|
/**
|
|
* Test if the reader can read a file with the given version number.
|
|
*/
|
|
int CanReadFileVersion(int major, int minor);
|
|
|
|
//@{
|
|
/**
|
|
* Reads the 'data' requested in 'outInfo' (through extents or
|
|
* pieces). Returns 1 if successfull, 0 otherwise.
|
|
*/
|
|
int Read(vtkInformation* outInfo, vtkImageData* data);
|
|
int Read(vtkInformation* outInfo, vtkUnstructuredGrid* data);
|
|
//@}
|
|
/**
|
|
* Read 'pieceData' specified by 'filePiece' where
|
|
* number of points, cells and connectivity ids
|
|
* store those numbers for all pieces.
|
|
*/
|
|
int Read(const std::vector<vtkIdType>& numberOfPoints,
|
|
const std::vector<vtkIdType>& numberOfCells,
|
|
const std::vector<vtkIdType>& numberOfConnectivityIds, int filePiece,
|
|
vtkUnstructuredGrid* pieceData);
|
|
/**
|
|
* Read the field arrays from the file and add them to the dataset.
|
|
*/
|
|
int AddFieldArrays(vtkDataSet* data);
|
|
|
|
/**
|
|
* Modify this object when an array selection is changed.
|
|
*/
|
|
static void SelectionModifiedCallback(
|
|
vtkObject* caller, unsigned long eid, void* clientdata, void* calldata);
|
|
|
|
//@{
|
|
/**
|
|
* Standard functions to specify the type, information and read the data from
|
|
* the file.
|
|
*/
|
|
int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
//@}
|
|
|
|
/**
|
|
* Print update number of pieces, piece number and ghost levels.
|
|
*/
|
|
void PrintPieceInformation(vtkInformation* outInfo);
|
|
|
|
private:
|
|
vtkHDFReader(const vtkHDFReader&) = delete;
|
|
void operator=(const vtkHDFReader&) = delete;
|
|
|
|
protected:
|
|
/**
|
|
* The input file's name.
|
|
*/
|
|
char* FileName;
|
|
|
|
/**
|
|
* The array selections.
|
|
* in the same order as vtkDataObject::AttributeTypes: POINT, CELL, FIELD
|
|
*/
|
|
vtkDataArraySelection* DataArraySelection[3];
|
|
|
|
/**
|
|
* The observer to modify this object when the array selections are
|
|
* modified.
|
|
*/
|
|
vtkCallbackCommand* SelectionObserver;
|
|
//@{
|
|
/**
|
|
* Image data topology and geometry.
|
|
*/
|
|
int WholeExtent[6];
|
|
double Origin[3];
|
|
double Spacing[3];
|
|
//@}
|
|
class Implementation;
|
|
Implementation* Impl;
|
|
};
|
|
|
|
#endif
|