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.

238 lines
5.6 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkXMLPTableReader.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 vtkXMLPTableReader
* @brief Read PVTK XML Table files.
*
* vtkXMLPTableReader reads the PVTK XML Table
* file format. This reads the parallel format's summary file and
* then uses vtkXMLTableReader to read data from the
* individual Table piece files. Streaming is supported.
* The standard extension for this reader's file format is "pvtt".
*
* @sa
* vtkXMLTableReader
*/
#ifndef vtkXMLPTableReader_h
#define vtkXMLPTableReader_h
#include "vtkIOXMLModule.h" // For export macro
#include "vtkXMLPDataObjectReader.h"
class vtkTable;
class vtkXMLTableReader;
class VTKIOXML_EXPORT vtkXMLPTableReader : public vtkXMLPDataObjectReader
{
public:
vtkTypeMacro(vtkXMLPTableReader, vtkXMLPDataObjectReader);
void PrintSelf(ostream& os, vtkIndent indent) override;
static vtkXMLPTableReader* New();
//@{
/**
* Get the reader's output.
*/
vtkTable* GetOutput();
vtkTable* GetOutput(int idx);
//@}
/**
* For the specified port, copy the information this reader sets up in
* SetupOutputInformation to outInfo
*/
void CopyOutputInformation(vtkInformation* outInfo, int port) override;
/**
* Get the number of columns arrays available in the input.
*/
int GetNumberOfColumnArrays();
/**
* Get the name of the column with the given index in
* the input.
*/
const char* GetColumnArrayName(int index);
//@{
/**
* Get/Set whether the column array with the given name is to
* be read.
*/
int GetColumnArrayStatus(const char* name);
void SetColumnArrayStatus(const char* name, int status);
//@}
/**
* Get the data array selection tables used to configure which data
* arrays are loaded by the reader.
*/
vtkGetObjectMacro(ColumnSelection, vtkDataArraySelection);
protected:
vtkXMLPTableReader();
~vtkXMLPTableReader() override;
/**
* Return the type of the dataset being read
*/
const char* GetDataSetName() override;
/**
* Get the number of rows of the table
*/
vtkIdType GetNumberOfRows();
/**
* Get the number of rows in the given piece. Valid after
* UpdateInformation.
*/
virtual vtkIdType GetNumberOfRowsInPiece(int piece);
vtkTable* GetOutputAsTable();
vtkTable* GetPieceInputAsTable(int piece);
/**
* Get the current piece index and the total number of piece in the dataset
*/
void GetOutputUpdateExtent(int& piece, int& numberOfPieces);
/**
* Initialize current output
*/
void SetupEmptyOutput() override;
/**
* Initialize current output data: allocate arrays for RowData
*/
void SetupOutputData() override;
/**
* Setup the output's information.
*/
void SetupOutputInformation(vtkInformation* outInfo) override;
/**
* Initialize the total number of rows to be read.
*/
void SetupOutputTotals();
/**
* Initialize the index of the first row to be read in the next piece
*/
void SetupNextPiece();
/**
* Setup the number of pieces to be read and allocate space accordingly
*/
void SetupPieces(int numPieces) override;
/**
* Setup the extent for the parallel reader and the piece readers.
*/
void SetupUpdateExtent(int piece, int numberOfPieces);
/**
* Setup the readers and then read the input data
*/
void ReadXMLData() override;
/**
* Whether or not the current reader can read the current piece
*/
int CanReadPiece(int index) override;
/**
* Pipeline execute data driver. Called by vtkXMLReader.
*/
int ReadPrimaryElement(vtkXMLDataElement* ePrimary) override;
/**
* Delete all piece readers and related information
*/
void DestroyPieces() override;
using vtkXMLPDataObjectReader::ReadPiece;
/**
* Setup the current piece reader.
*/
int ReadPiece(vtkXMLDataElement* ePiece) override;
/**
* Read piece at the given index RowData
*/
int ReadPieceData(int index);
/**
* Actually read the current piece data
*/
int ReadPieceData();
/**
* Create a reader according to the data to read
*/
vtkXMLTableReader* CreatePieceReader();
int FillOutputPortInformation(int, vtkInformation*) override;
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) override;
/**
* Callback registered with the PieceProgressObserver.
*/
void PieceProgressCallback() override;
/**
* Check whether the given array element is an enabled array.
*/
int ColumnIsEnabled(vtkXMLDataElement* elementRowData);
int GetNumberOfRowArrays();
const char* GetRowArrayName(int index);
/**
* The update request.
*/
int UpdatePieceId;
int UpdateNumberOfPieces;
/**
* The range of pieces from the file that will form the UpdatePiece.
*/
int StartPiece;
int EndPiece;
vtkIdType TotalNumberOfRows;
vtkIdType StartRow;
vtkXMLTableReader** PieceReaders;
/**
* The PRowData element representations.
*/
vtkXMLDataElement* PRowElement;
vtkDataArraySelection* ColumnSelection;
private:
vtkXMLPTableReader(const vtkXMLPTableReader&) = delete;
void operator=(const vtkXMLPTableReader&) = delete;
};
#endif