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.

403 lines
13 KiB

2 years ago
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkDataReader.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 vtkDataReader - helper superclass for objects that read vtk data files
// .SECTION Description
// vtkDataReader is a helper superclass that reads the vtk data file header,
// dataset type, and attribute data (point and cell attributes such as
// scalars, vectors, normals, etc.) from a vtk data file. See text for
// the format of the various vtk file types.
//
// .SECTION See Also
// vtkPolyDataReader vtkStructuredPointsReader vtkStructuredGridReader
// vtkUnstructuredGridReader vtkRectilinearGridReader
#ifndef __vtkDataReader_h
#define __vtkDataReader_h
#include "vtkAlgorithm.h"
#define VTK_ASCII 1
#define VTK_BINARY 2
class vtkCharArray;
class vtkDataArray;
class vtkDataSet;
class vtkDataSetAttributes;
class vtkFieldData;
class vtkPointSet;
class vtkRectilinearGrid;
class VTK_IO_EXPORT vtkDataReader : public vtkAlgorithm
{
public:
static vtkDataReader *New();
vtkTypeRevisionMacro(vtkDataReader,vtkAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Specify file name of vtk data file to read.
vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName);
// Description:
// Is the file a valid vtk file of the passed dataset type ?
// The dataset type is passed as a lower case string.
int IsFileValid(const char *dstype);
int IsFileStructuredPoints() {
return this->IsFileValid("structured_points");};
int IsFilePolyData() {
return this->IsFileValid("polydata");};
int IsFileStructuredGrid() {
return this->IsFileValid("structured_grid");};
int IsFileUnstructuredGrid() {
return this->IsFileValid("unstructured_grid");};
int IsFileRectilinearGrid() {
return this->IsFileValid("rectilinear_grid");};
// Description:
// Specify the InputString for use when reading from a character array.
// Optionally include the length for binary strings. Note that a copy
// of the string is made and stored. If this causes exceedingly large
// memory consumption, consider using InputArray instead.
void SetInputString(const char *in);
vtkGetStringMacro(InputString);
void SetInputString(const char *in, int len);
vtkGetMacro(InputStringLength, int);
void SetBinaryInputString(const char *, int len);
// Description:
// Specify the vtkCharArray to be used when reading from a string.
// If set, this array has precendence over InputString.
// Use this instead of InputString to avoid the extra memory copy.
// It should be noted that if the underlying char* is owned by the
// user ( vtkCharArray::SetArray(array, 1); ) and is deleted before
// the reader, bad things will happen during a pipeline update.
virtual void SetInputArray(vtkCharArray*);
vtkGetObjectMacro(InputArray, vtkCharArray);
// Description:
// Get the header from the vtk data file.
vtkGetStringMacro(Header);
// Description:
// Enable reading from an InputString or InputArray instead of the default,
// a file.
vtkSetMacro(ReadFromInputString,int);
vtkGetMacro(ReadFromInputString,int);
vtkBooleanMacro(ReadFromInputString,int);
// Description:
// Get the type of file (ASCII or BINARY). Returned value only valid
// after file has been read.
vtkGetMacro(FileType,int);
// Description:
// How many attributes of various types are in this file? This
// requires reading the file, so the filename must be set prior
// to invoking this operation. (Note: file characteristics are
// cached, so only a single read is necessary to return file
// characteristics.)
int GetNumberOfScalarsInFile()
{this->CharacterizeFile(); return this->NumberOfScalarsInFile;}
int GetNumberOfVectorsInFile()
{this->CharacterizeFile(); return this->NumberOfVectorsInFile;}
int GetNumberOfTensorsInFile()
{this->CharacterizeFile(); return this->NumberOfTensorsInFile;}
int GetNumberOfNormalsInFile()
{this->CharacterizeFile(); return this->NumberOfNormalsInFile;}
int GetNumberOfTCoordsInFile()
{this->CharacterizeFile(); return this->NumberOfTCoordsInFile;}
int GetNumberOfFieldDataInFile()
{this->CharacterizeFile(); return this->NumberOfFieldDataInFile;}
// Description:
// What is the name of the ith attribute of a certain type
// in this file? This requires reading the file, so the filename
// must be set prior to invoking this operation.
const char *GetScalarsNameInFile(int i);
const char *GetVectorsNameInFile(int i);
const char *GetTensorsNameInFile(int i);
const char *GetNormalsNameInFile(int i);
const char *GetTCoordsNameInFile(int i);
const char *GetFieldDataNameInFile(int i);
// Description:
// Set the name of the scalar data to extract. If not specified, first
// scalar data encountered is extracted.
vtkSetStringMacro(ScalarsName);
vtkGetStringMacro(ScalarsName);
// Description:
// Set the name of the vector data to extract. If not specified, first
// vector data encountered is extracted.
vtkSetStringMacro(VectorsName);
vtkGetStringMacro(VectorsName);
// Description:
// Set the name of the tensor data to extract. If not specified, first
// tensor data encountered is extracted.
vtkSetStringMacro(TensorsName);
vtkGetStringMacro(TensorsName);
// Description:
// Set the name of the normal data to extract. If not specified, first
// normal data encountered is extracted.
vtkSetStringMacro(NormalsName);
vtkGetStringMacro(NormalsName);
// Description:
// Set the name of the texture coordinate data to extract. If not specified,
// first texture coordinate data encountered is extracted.
vtkSetStringMacro(TCoordsName);
vtkGetStringMacro(TCoordsName);
// Description:
// Set the name of the lookup table data to extract. If not specified, uses
// lookup table named by scalar. Otherwise, this specification supersedes.
vtkSetStringMacro(LookupTableName);
vtkGetStringMacro(LookupTableName);
// Description:
// Set the name of the field data to extract. If not specified, uses
// first field data encountered in file.
vtkSetStringMacro(FieldDataName);
vtkGetStringMacro(FieldDataName);
// Description:
// Enable reading all scalars.
vtkSetMacro(ReadAllScalars,int);
vtkGetMacro(ReadAllScalars,int);
vtkBooleanMacro(ReadAllScalars,int);
// Description:
// Enable reading all vectors.
vtkSetMacro(ReadAllVectors,int);
vtkGetMacro(ReadAllVectors,int);
vtkBooleanMacro(ReadAllVectors,int);
// Description:
// Enable reading all normals.
vtkSetMacro(ReadAllNormals,int);
vtkGetMacro(ReadAllNormals,int);
vtkBooleanMacro(ReadAllNormals,int);
// Description:
// Enable reading all tensors.
vtkSetMacro(ReadAllTensors,int);
vtkGetMacro(ReadAllTensors,int);
vtkBooleanMacro(ReadAllTensors,int);
// Description:
// Enable reading all color scalars.
vtkSetMacro(ReadAllColorScalars,int);
vtkGetMacro(ReadAllColorScalars,int);
vtkBooleanMacro(ReadAllColorScalars,int);
// Description:
// Enable reading all tcoords.
vtkSetMacro(ReadAllTCoords,int);
vtkGetMacro(ReadAllTCoords,int);
vtkBooleanMacro(ReadAllTCoords,int);
// Description:
// Enable reading all fields.
vtkSetMacro(ReadAllFields,int);
vtkGetMacro(ReadAllFields,int);
vtkBooleanMacro(ReadAllFields,int);
// Description:
// Open a vtk data file. Returns zero if error.
int OpenVTKFile();
// Description:
// Read the header of a vtk data file. Returns 0 if error.
int ReadHeader();
// Description:
// Read the cell data of a vtk data file. The number of cells (from the
// dataset) must match the number of cells defined in cell attributes (unless
// no geometry was defined).
int ReadCellData(vtkDataSet *ds, int numCells);
// Description:
// Read the point data of a vtk data file. The number of points (from the
// dataset) must match the number of points defined in point attributes
// (unless no geometry was defined).
int ReadPointData(vtkDataSet *ds, int numPts);
// Description:
// Read point coordinates. Return 0 if error.
int ReadPoints(vtkPointSet *ps, int numPts);
// Description:
// Read a bunch of "cells". Return 0 if error.
int ReadCells(int size, int *data);
// Description:
// Read a piece of the cells (for streaming compliance)
int ReadCells(int size, int *data, int skip1, int read2, int skip3);
// Description:
// Read the coordinates for a rectilinear grid. The axes parameter specifies
// which coordinate axes (0,1,2) is being read.
int ReadCoordinates(vtkRectilinearGrid *rg, int axes, int numCoords);
// Description:
// Helper functions for reading data.
vtkDataArray *ReadArray(const char *dataType, int numTuples, int numComp);
vtkFieldData *ReadFieldData();
// Description:
// Internal function to read in a value. Returns zero if there was an
// error.
int Read(char *);
int Read(unsigned char *);
int Read(short *);
int Read(unsigned short *);
int Read(int *);
int Read(unsigned int *);
int Read(long *);
int Read(unsigned long *);
int Read(float *);
int Read(double *);
// Description:
// Close the vtk file.
void CloseVTKFile();
//BTX
// Description:
// Internal function to read in a line up to 256 characters.
// Returns zero if there was an error.
int ReadLine(char result[256]);
// Description:
// Internal function to read in a string up to 256 characters.
// Returns zero if there was an error.
int ReadString(char result[256]);
// Description:
// Helper method for reading in data.
char *LowerCase(char *str, const size_t len=256);
// Description:
// Return the istream being used to read in the data.
istream *GetIStream() {return this->IS;};
//ETX
// Description:
// Read the meta information from the file. This needs to be public to it
// can be accessed by vtkDataSetReader.
virtual int ReadMetaData(vtkInformation *) { return 1; }
protected:
vtkDataReader();
~vtkDataReader();
char *FileName;
int FileType;
istream *IS;
char *ScalarsName;
char *VectorsName;
char *TensorsName;
char *TCoordsName;
char *NormalsName;
char *LookupTableName;
char *FieldDataName;
char *ScalarLut;
int ReadFromInputString;
char *InputString;
int InputStringLength;
int InputStringPos;
vtkSetStringMacro(ScalarLut);
vtkGetStringMacro(ScalarLut);
char *Header;
int ReadScalarData(vtkDataSetAttributes *a, int num);
int ReadVectorData(vtkDataSetAttributes *a, int num);
int ReadNormalData(vtkDataSetAttributes *a, int num);
int ReadTensorData(vtkDataSetAttributes *a, int num);
int ReadCoScalarData(vtkDataSetAttributes *a, int num);
int ReadLutData(vtkDataSetAttributes *a);
int ReadTCoordsData(vtkDataSetAttributes *a, int num);
int ReadDataSetData(vtkDataSet *ds);
// This supports getting additional information from vtk files
int NumberOfScalarsInFile;
char **ScalarsNameInFile;
int ScalarsNameAllocSize;
int NumberOfVectorsInFile;
char **VectorsNameInFile;
int VectorsNameAllocSize;
int NumberOfTensorsInFile;
char **TensorsNameInFile;
int TensorsNameAllocSize;
int NumberOfTCoordsInFile;
char **TCoordsNameInFile;
int TCoordsNameAllocSize;
int NumberOfNormalsInFile;
char **NormalsNameInFile;
int NormalsNameAllocSize;
int NumberOfFieldDataInFile;
char **FieldDataNameInFile;
int FieldDataNameAllocSize;
vtkTimeStamp CharacteristicsTime;
int ReadAllScalars;
int ReadAllVectors;
int ReadAllNormals;
int ReadAllTensors;
int ReadAllColorScalars;
int ReadAllTCoords;
int ReadAllFields;
void InitializeCharacteristics();
int CharacterizeFile(); //read entire file, storing important characteristics
void CheckFor(const char* name, char *line, int &num, char** &array,
int& allocSize);
vtkCharArray* InputArray;
// Description:
// Decode the name of array. This method is the inverse of
// vtkWriter::EncodeName.
void DecodeArrayName(char *resname, const char* name);
virtual int ProcessRequest(vtkInformation *, vtkInformationVector **,
vtkInformationVector *);
virtual int RequestData(vtkInformation *, vtkInformationVector **,
vtkInformationVector *)
{ return 1; }
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
vtkInformationVector *)
{ return 1; }
virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
vtkInformationVector *)
{ return 1; }
private:
vtkDataReader(const vtkDataReader&); // Not implemented.
void operator=(const vtkDataReader&); // Not implemented.
};
#endif