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
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
|
||
|
|
||
|
|