Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.
 
 
 
 
 
 

265 lines
9.3 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkXMLReader.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 vtkXMLReader - Superclass for VTK's XML format readers.
// .SECTION Description
// vtkXMLReader uses vtkXMLDataParser to parse a VTK XML input file.
// Concrete subclasses then traverse the parsed file structure and
// extract data.
#ifndef __vtkXMLReader_h
#define __vtkXMLReader_h
#include "vtkAlgorithm.h"
class vtkCallbackCommand;
class vtkDataArray;
class vtkDataArraySelection;
class vtkDataSet;
class vtkDataSetAttributes;
class vtkXMLDataElement;
class vtkXMLDataParser;
class vtkInformationVector;
class VTK_IO_EXPORT vtkXMLReader : public vtkAlgorithm
{
public:
vtkTypeRevisionMacro(vtkXMLReader,vtkAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Get/Set the name of the input file.
vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName);
// Description:
// Test whether the file with the given name can be read by this
// reader.
virtual int CanReadFile(const char* name);
// Description:
// Get the output as a vtkDataSet pointer.
vtkDataSet* GetOutputAsDataSet();
vtkDataSet* GetOutputAsDataSet(int index);
// Description:
// Get the data array selection tables used to configure which data
// arrays are loaded by the reader.
vtkGetObjectMacro(PointDataArraySelection, vtkDataArraySelection);
vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
// Description:
// Get the number of point or cell arrays available in the input.
int GetNumberOfPointArrays();
int GetNumberOfCellArrays();
// Description:
// 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);
// Description:
// Get/Set whether the point or cell array with the given name is to
// be read.
int GetPointArrayStatus(const char* name);
int GetCellArrayStatus(const char* name);
void SetPointArrayStatus(const char* name, int status);
void SetCellArrayStatus(const char* name, int status);
// For the specified port, copy the information this reader sets up in
// SetupOutputInformation to outInfo
virtual void CopyOutputInformation(vtkInformation *vtkNotUsed(outInfo),
int vtkNotUsed(port)) {}
// Description:
// Which TimeStep to read.
vtkSetMacro(TimeStep, int);
vtkGetMacro(TimeStep, int);
vtkGetMacro(NumberOfTimeSteps, int);
// Description:
// Which TimeStepRange to read
vtkGetVector2Macro(TimeStepRange, int);
vtkSetVector2Macro(TimeStepRange, int);
protected:
vtkXMLReader();
~vtkXMLReader();
// Pipeline execution methods to be defined by subclass. Called by
// corresponding RequestData methods after appropriate setup has been
// done.
virtual int ReadXMLInformation();
virtual void ReadXMLData();
// Get the name of the data set being read.
virtual const char* GetDataSetName()=0;
// Test if the reader can read a file with the given version number.
virtual int CanReadFileVersion(int major, int minor);
// Setup the output with no data available. Used in error cases.
virtual void SetupEmptyOutput()=0;
// Setup the output's information.
virtual void SetupOutputInformation(vtkInformation *vtkNotUsed(outInfo)) {}
// Setup the output's data with allocation.
virtual void SetupOutputData();
// Read the primary element from the file. This is the element
// whose name is the value returned by GetDataSetName().
virtual int ReadPrimaryElement(vtkXMLDataElement* ePrimary);
// Read the top-level element from the file. This is always the
// VTKFile element.
int ReadVTKFile(vtkXMLDataElement* eVTKFile);
// Create a vtkDataArray from its cooresponding XML representation.
// Does not allocate.
vtkDataArray* CreateDataArray(vtkXMLDataElement* da);
// Internal utility methods.
int OpenVTKFile();
void CloseVTKFile();
virtual void CreateXMLParser();
virtual void DestroyXMLParser();
void SetupCompressor(const char* type);
int CanReadFileVersionString(const char* version);
// Utility methods for subclasses.
int IntersectExtents(int* extent1, int* extent2, int* result);
int Min(int a, int b);
int Max(int a, int b);
void ComputePointDimensions(int* extent, int* dimensions);
void ComputePointIncrements(int* extent, vtkIdType* increments);
void ComputeCellDimensions(int* extent, int* dimensions);
void ComputeCellIncrements(int* extent, vtkIdType* increments);
vtkIdType GetStartTuple(int* extent, vtkIdType* increments,
int i, int j, int k);
void ReadAttributeIndices(vtkXMLDataElement* eDSA,
vtkDataSetAttributes* dsa);
char** CreateStringArray(int numStrings);
void DestroyStringArray(int numStrings, char** strings);
// Setup the data array selections for the input's set of arrays.
void SetDataArraySelections(vtkXMLDataElement* eDSA,
vtkDataArraySelection* sel);
//BTX
int SetFieldDataInfo(vtkXMLDataElement *eDSA, int association,
int numTuples, vtkInformationVector *(&infoVector));
//ETX
// Check whether the given array element is an enabled array.
int PointDataArrayIsEnabled(vtkXMLDataElement* ePDA);
int CellDataArrayIsEnabled(vtkXMLDataElement* eCDA);
// Callback registered with the SelectionObserver.
static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
void* clientdata, void* calldata);
// The vtkXMLDataParser instance used to hide XML reading details.
vtkXMLDataParser* XMLParser;
// The FieldData element representation.
vtkXMLDataElement* FieldDataElement;
// The input file's name.
char* FileName;
// The stream used to read the input.
istream* Stream;
// The array selections.
vtkDataArraySelection* PointDataArraySelection;
vtkDataArraySelection* CellDataArraySelection;
// The observer to modify this object when the array selections are
// modified.
vtkCallbackCommand* SelectionObserver;
// Whether there was an error reading the file in RequestInformation.
int InformationError;
// Whether there was an error reading the file in RequestData.
int DataError;
// The index of the output on which ExecuteData is currently
// running.
int CurrentOutput;
// The current range over which progress is moving. This allows for
// incrementally fine-tuned progress updates.
virtual void GetProgressRange(float* range);
virtual void SetProgressRange(float* range, int curStep, int numSteps);
virtual void SetProgressRange(float* range, int curStep, float* fractions);
virtual void UpdateProgressDiscrete(float progress);
float ProgressRange[2];
virtual int ProcessRequest(vtkInformation *request,
vtkInformationVector **inputVector,
vtkInformationVector *outputVector);
virtual int RequestData(vtkInformation *request,
vtkInformationVector **inputVector,
vtkInformationVector *outputVector);
virtual int RequestDataObject(vtkInformation *vtkNotUsed(request),
vtkInformationVector **vtkNotUsed(inputVector),
vtkInformationVector *vtkNotUsed(outputVector))
{ return 1; }
virtual int RequestInformation(vtkInformation *request,
vtkInformationVector **inputVector,
vtkInformationVector *outputVector);
vtkTimeStamp ReadMTime;
// Whether there was an error reading the XML.
int ReadError;
// For structured data keep track of dimensions empty of cells. For
// unstructured data these are always zero. This is used to support
// 1-D and 2-D cell data.
int AxesEmpty[3];
// The timestep currently being read.
int TimeStep;
int CurrentTimeStep;
int NumberOfTimeSteps;
void SetNumberOfTimeSteps(int num);
// buffer for reading timestep from the XML file the lenght is of
// NumberOfTimeSteps and therefore is always long enough
int *TimeSteps;
// Store the range of time steps
int TimeStepRange[2];
// Now we need to save what was the last time read for each kind of
// data to avoid rereading it that is to say we need a var for
// e.g. PointData/CellData/Points/Cells...
// See SubClass for details with member vars like PointsTimeStep/PointsOffset
// Helper function usefull to know if a timestep is found in an array of timestep
static int IsTimeStepInArray(int timestep, int* timesteps, int length);
private:
// The stream used to read the input if it is in a file.
ifstream* FileStream;
int TimeStepWasReadOnce;
private:
vtkXMLReader(const vtkXMLReader&); // Not implemented.
void operator=(const vtkXMLReader&); // Not implemented.
};
#endif