vtkXMLDataReader.h 4.1 KB
Newer Older
1 2 3 4 5
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkXMLDataReader.h

6
  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 8 9
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

10 11
     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// .NAME vtkXMLDataReader - Superclass for VTK XML file readers.
// .SECTION Description
// vtkXMLDataReader provides functionality common to all VTK XML file
// readers.  Concrete subclasses call upon this functionality when
// needed.

// .SECTION See Also
// vtkXMLPDataReader

#ifndef __vtkXMLDataReader_h
#define __vtkXMLDataReader_h

#include "vtkXMLReader.h"

class VTK_IO_EXPORT vtkXMLDataReader : public vtkXMLReader
{
public:
  vtkTypeRevisionMacro(vtkXMLDataReader,vtkXMLReader);
  void PrintSelf(ostream& os, vtkIndent indent);
  
  // Description:
  // Get the number of points in the output.
  virtual vtkIdType GetNumberOfPoints()=0;
  
  // Description:
  // Get the number of cells in the output.
  virtual vtkIdType GetNumberOfCells()=0;
  
43 44 45 46
  // For the specified port, copy the information this reader sets up in
  // SetupOutputInformation to outInfo
  virtual void CopyOutputInformation(vtkInformation *outInfo, int port);

47 48
protected:
  vtkXMLDataReader();
49
  ~vtkXMLDataReader();  
50 51
  
  // Add functionality to methods from superclass.
52 53
  virtual void CreateXMLParser();
  virtual void DestroyXMLParser();
54
  virtual void SetupOutputInformation(vtkInformation *outInfo);
55

56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
  int ReadPrimaryElement(vtkXMLDataElement* ePrimary);
  void SetupOutputData();
  
  // Setup the reader for a given number of pieces.
  virtual void SetupPieces(int numPieces);
  virtual void DestroyPieces();
  
  // Read information from the file for the given piece.
  int ReadPiece(vtkXMLDataElement* ePiece, int piece);
  virtual int ReadPiece(vtkXMLDataElement* ePiece);
  
  // Read data from the file for the given piece.
  int ReadPieceData(int piece);
  virtual int ReadPieceData();
  
71 72
  virtual void ReadXMLData();

73 74 75 76 77 78 79 80
  // Read a data array whose tuples coorrespond to points or cells.
  virtual int ReadArrayForPoints(vtkXMLDataElement* da,
                                 vtkDataArray* outArray);
  virtual int ReadArrayForCells(vtkXMLDataElement* da,
                                vtkDataArray* outArray);
  
  // Read data from a given element.
  int ReadData(vtkXMLDataElement* da, void* data, int wordType, int startWord,
81
               int numWords);  
82
  
83 84 85
  // Callback registered with the DataProgressObserver.
  static void DataProgressCallbackFunction(vtkObject*, unsigned long, void*,
                                           void*);
86 87 88
  // Progress callback from XMLParser.
  virtual void DataProgressCallback();
  
89 90 91 92 93
  // The number of Pieces of data found in the file.
  int NumberOfPieces;
  
  // The PointData and CellData element representations for each piece.
  vtkXMLDataElement** PointDataElements;
94
  vtkXMLDataElement** CellDataElements;
95 96 97 98
  
  // The piece currently being read.
  int Piece;
  
99
  // The number of point/cell data arrays in the output.  Valid after
100
  // SetupOutputData has been called.
101 102 103 104 105 106
  int NumberOfPointArrays;
  int NumberOfCellArrays;  
  
  // Flag for whether DataProgressCallback should actually update
  // progress.
  int InReadData;
107 108 109
  
  // The observer to report progress from reading data from XMLParser.
  vtkCallbackCommand* DataProgressObserver;  
110 111 112 113 114 115 116 117 118 119 120 121

  // Specify the last time step read, usefull to know if we need to rearead data
  // //PointData
  int *PointDataTimeStep;
  unsigned long *PointDataOffset;
  int PointDataNeedToReadTimeStep(vtkXMLDataElement *eNested);

  //CellData
  int *CellDataTimeStep;
  unsigned long *CellDataOffset;
  int CellDataNeedToReadTimeStep(vtkXMLDataElement *eNested);
 
122 123 124 125 126 127
private:
  vtkXMLDataReader(const vtkXMLDataReader&);  // Not implemented.
  void operator=(const vtkXMLDataReader&);  // Not implemented.
};

#endif