You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
4.2 KiB
125 lines
4.2 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkXMLUnstructuredDataReader.h,v $
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkXMLUnstructuredDataReader - Superclass for unstructured data XML readers.
|
|
// .SECTION Description
|
|
// vtkXMLUnstructuredDataReader provides functionality common to all
|
|
// unstructured data format readers.
|
|
|
|
// .SECTION See Also
|
|
// vtkXMLPolyDataReader vtkXMLUnstructuredGridReader
|
|
|
|
#ifndef __vtkXMLUnstructuredDataReader_h
|
|
#define __vtkXMLUnstructuredDataReader_h
|
|
|
|
#include "vtkXMLDataReader.h"
|
|
|
|
class vtkCellArray;
|
|
class vtkIdTypeArray;
|
|
class vtkPointSet;
|
|
class vtkUnsignedCharArray;
|
|
|
|
class VTK_IO_EXPORT vtkXMLUnstructuredDataReader : public vtkXMLDataReader
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkXMLUnstructuredDataReader,vtkXMLDataReader);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Get the number of points in the output.
|
|
virtual vtkIdType GetNumberOfPoints();
|
|
|
|
// Description:
|
|
// Get the number of cells in the output.
|
|
virtual vtkIdType GetNumberOfCells();
|
|
|
|
// Description:
|
|
// Setup the reader as if the given update extent were requested by
|
|
// its output. This can be used after an UpdateInformation to
|
|
// validate GetNumberOfPoints() and GetNumberOfCells() without
|
|
// actually reading data.
|
|
void SetupUpdateExtent(int piece, int numberOfPieces, int ghostLevel);
|
|
|
|
// For the specified port, copy the information this reader sets up in
|
|
// SetupOutputInformation to outInfo
|
|
virtual void CopyOutputInformation(vtkInformation *outInfo, int port);
|
|
|
|
|
|
protected:
|
|
vtkXMLUnstructuredDataReader();
|
|
~vtkXMLUnstructuredDataReader();
|
|
|
|
vtkPointSet* GetOutputAsPointSet();
|
|
vtkXMLDataElement* FindDataArrayWithName(vtkXMLDataElement* eParent,
|
|
const char* name);
|
|
vtkIdTypeArray* ConvertToIdTypeArray(vtkDataArray* a);
|
|
vtkUnsignedCharArray* ConvertToUnsignedCharArray(vtkDataArray* a);
|
|
|
|
// Pipeline execute data driver. Called by vtkXMLReader.
|
|
void ReadXMLData();
|
|
|
|
virtual void SetupEmptyOutput();
|
|
virtual void GetOutputUpdateExtent(int& piece, int& numberOfPieces,
|
|
int& ghostLevel)=0;
|
|
virtual void SetupOutputTotals();
|
|
virtual void SetupNextPiece();
|
|
void SetupPieces(int numPieces);
|
|
void DestroyPieces();
|
|
|
|
// Setup the output's information.
|
|
void SetupOutputInformation(vtkInformation *outInfo);
|
|
|
|
void SetupOutputData();
|
|
int ReadPiece(vtkXMLDataElement* ePiece);
|
|
int ReadPieceData();
|
|
int ReadCellArray(vtkIdType numberOfCells, vtkIdType totalNumberOfCells,
|
|
vtkXMLDataElement* eCells, vtkCellArray* outCells);
|
|
|
|
// Read a data array whose tuples coorrespond to points.
|
|
int ReadArrayForPoints(vtkXMLDataElement* da, vtkDataArray* outArray);
|
|
|
|
// Get the number of points/cells in the given piece. Valid after
|
|
// UpdateInformation.
|
|
virtual vtkIdType GetNumberOfPointsInPiece(int piece);
|
|
virtual vtkIdType GetNumberOfCellsInPiece(int piece)=0;
|
|
|
|
// The update request.
|
|
int UpdatePiece;
|
|
int UpdateNumberOfPieces;
|
|
int UpdateGhostLevel;
|
|
|
|
// The range of pieces from the file that will form the UpdatePiece.
|
|
int StartPiece;
|
|
int EndPiece;
|
|
vtkIdType TotalNumberOfPoints;
|
|
vtkIdType TotalNumberOfCells;
|
|
vtkIdType StartPoint;
|
|
|
|
// The Points element for each piece.
|
|
vtkXMLDataElement** PointElements;
|
|
vtkIdType* NumberOfPoints;
|
|
|
|
int PointsTimeStep;
|
|
unsigned long PointsOffset;
|
|
int PointsNeedToReadTimeStep(vtkXMLDataElement *eNested);
|
|
int CellsNeedToReadTimeStep(vtkXMLDataElement *eNested, int &cellstimestep,
|
|
unsigned long &cellsoffset);
|
|
|
|
|
|
private:
|
|
vtkXMLUnstructuredDataReader(const vtkXMLUnstructuredDataReader&); // Not implemented.
|
|
void operator=(const vtkXMLUnstructuredDataReader&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|