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.
192 lines
4.8 KiB
C
192 lines
4.8 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkXMLPHyperTreeGridReader.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 vtkXMLPHyperTreeGridReader
|
||
|
* @brief Read PVTK XML HyperTreeGrid files.
|
||
|
*
|
||
|
* vtkXMLPHyperTreeGridReader reads the PVTK XML HyperTreeGrid file format.
|
||
|
* This reader uses vtkXMLHyperTreeGridReader to read data from the
|
||
|
* individual HyperTreeGrid piece files. Streaming is supported.
|
||
|
* The standard extension for this reader's file format is "phtg".
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkXMLHyperTreeGridReader
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkXMLPHyperTreeGridReader_h
|
||
|
#define vtkXMLPHyperTreeGridReader_h
|
||
|
|
||
|
#include "vtkIOXMLModule.h" // For export macro
|
||
|
#include "vtkXMLPDataObjectReader.h"
|
||
|
|
||
|
class vtkHyperTreeCursor;
|
||
|
class vtkHyperTreeGrid;
|
||
|
class vtkHyperTreeGridNonOrientedCursor;
|
||
|
class vtkXMLHyperTreeGridReader;
|
||
|
|
||
|
class VTKIOXML_EXPORT vtkXMLPHyperTreeGridReader : public vtkXMLPDataObjectReader
|
||
|
{
|
||
|
public:
|
||
|
vtkTypeMacro(vtkXMLPHyperTreeGridReader, vtkXMLPDataObjectReader);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
static vtkXMLPHyperTreeGridReader* New();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get the reader's output.
|
||
|
*/
|
||
|
vtkHyperTreeGrid* GetOutput();
|
||
|
vtkHyperTreeGrid* 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;
|
||
|
|
||
|
protected:
|
||
|
vtkXMLPHyperTreeGridReader();
|
||
|
~vtkXMLPHyperTreeGridReader() override;
|
||
|
|
||
|
/**
|
||
|
* Return the type of the dataset being read
|
||
|
*/
|
||
|
const char* GetDataSetName() override;
|
||
|
|
||
|
/**
|
||
|
* Get the number of vertices available in the input.
|
||
|
*/
|
||
|
vtkIdType GetNumberOfPoints();
|
||
|
vtkIdType GetNumberOfPointsInPiece(int piece);
|
||
|
|
||
|
vtkHyperTreeGrid* GetOutputAsHyperTreeGrid();
|
||
|
vtkHyperTreeGrid* GetPieceInputAsHyperTreeGrid(int piece);
|
||
|
|
||
|
/**
|
||
|
* Get the current piece index and the total number of pieces in the dataset
|
||
|
* Here let's consider a piece to be one hypertreegrid file
|
||
|
*/
|
||
|
void GetOutputUpdateExtent(int& piece, int& numberOfPieces);
|
||
|
|
||
|
/**
|
||
|
* Initialize current output
|
||
|
*/
|
||
|
void SetupEmptyOutput() override;
|
||
|
|
||
|
/**
|
||
|
* Initialize current output data
|
||
|
*/
|
||
|
void SetupOutputData() override;
|
||
|
|
||
|
/**
|
||
|
* Setup the output's information.
|
||
|
*/
|
||
|
void SetupOutputInformation(vtkInformation* outInfo) override;
|
||
|
|
||
|
/**
|
||
|
* Initialize the number of vertices from all the pieces
|
||
|
*/
|
||
|
void SetupOutputTotals();
|
||
|
|
||
|
/**
|
||
|
* no-op
|
||
|
*/
|
||
|
void SetupNextPiece();
|
||
|
|
||
|
/**
|
||
|
* Setup the number of pieces to be read
|
||
|
*/
|
||
|
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;
|
||
|
|
||
|
/**
|
||
|
* Actually read the current piece data
|
||
|
*/
|
||
|
int ReadPieceData(int index);
|
||
|
int ReadPieceData();
|
||
|
void RecursivelyProcessTree(
|
||
|
vtkHyperTreeGridNonOrientedCursor* inCursor, vtkHyperTreeGridNonOrientedCursor* outCursor);
|
||
|
|
||
|
/**
|
||
|
* Create a reader according to the data to read
|
||
|
*/
|
||
|
vtkXMLHyperTreeGridReader* CreatePieceReader();
|
||
|
|
||
|
int FillOutputPortInformation(int, vtkInformation*) override;
|
||
|
|
||
|
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
|
||
|
vtkInformationVector* outputVector) override;
|
||
|
|
||
|
/**
|
||
|
* Callback registered with the PieceProgressObserver.
|
||
|
*/
|
||
|
void PieceProgressCallback() override;
|
||
|
|
||
|
/**
|
||
|
* The update request.
|
||
|
*/
|
||
|
int UpdatePiece;
|
||
|
int UpdateNumberOfPieces;
|
||
|
|
||
|
/**
|
||
|
* The range of pieces from the file that will form the UpdatePiece.
|
||
|
*/
|
||
|
int StartPiece;
|
||
|
int EndPiece;
|
||
|
|
||
|
vtkIdType TotalNumberOfPoints;
|
||
|
vtkIdType PieceStartIndex;
|
||
|
|
||
|
vtkXMLHyperTreeGridReader** PieceReaders;
|
||
|
|
||
|
private:
|
||
|
vtkXMLPHyperTreeGridReader(const vtkXMLPHyperTreeGridReader&) = delete;
|
||
|
void operator=(const vtkXMLPHyperTreeGridReader&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|