Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

IO/vtkDataReader.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkDataReader.h,v $
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00028 #ifndef __vtkDataReader_h
00029 #define __vtkDataReader_h
00030 
00031 #include "vtkSource.h"
00032 
00033 #define VTK_ASCII 1
00034 #define VTK_BINARY 2
00035 
00036 class vtkCharArray;
00037 class vtkDataArray;
00038 class vtkDataSet;
00039 class vtkDataSetAttributes;
00040 class vtkFieldData;
00041 class vtkPointSet;
00042 class vtkRectilinearGrid;
00043 
00044 class VTK_IO_EXPORT vtkDataReader : public vtkSource
00045 {
00046 public:
00047   static vtkDataReader *New();
00048   vtkTypeRevisionMacro(vtkDataReader,vtkSource);
00049   void PrintSelf(ostream& os, vtkIndent indent);
00050 
00052 
00053   vtkSetStringMacro(FileName);
00054   vtkGetStringMacro(FileName);
00056 
00058 
00060   int IsFileValid(const char *dstype);
00061   int IsFileStructuredPoints() {
00062     return this->IsFileValid("structured_points");};  
00063   int IsFilePolyData() {
00064     return this->IsFileValid("polydata");};  
00065   int IsFileStructuredGrid() {
00066     return this->IsFileValid("structured_grid");};  
00067   int IsFileUnstructuredGrid() {
00068     return this->IsFileValid("unstructured_grid");};  
00069   int IsFileRectilinearGrid() {
00070     return this->IsFileValid("rectilinear_grid");};
00072   
00074 
00078   void SetInputString(const char *in);
00079   vtkGetStringMacro(InputString);
00080   void SetInputString(const char *in, int len);
00081   vtkGetMacro(InputStringLength, int);
00082   void SetBinaryInputString(const char *, int len);
00084 
00086 
00092   virtual void SetInputArray(vtkCharArray*);
00093   vtkGetObjectMacro(InputArray, vtkCharArray);
00095     
00097 
00098   vtkGetStringMacro(Header);
00100 
00102 
00104   vtkSetMacro(ReadFromInputString,int);
00105   vtkGetMacro(ReadFromInputString,int);
00106   vtkBooleanMacro(ReadFromInputString,int);
00108 
00110 
00112   vtkGetMacro(FileType,int);
00114 
00116 
00120   int GetNumberOfScalarsInFile()
00121     {this->CharacterizeFile(); return this->NumberOfScalarsInFile;}
00122   int GetNumberOfVectorsInFile()
00123     {this->CharacterizeFile(); return this->NumberOfVectorsInFile;}
00124   int GetNumberOfTensorsInFile()
00125     {this->CharacterizeFile(); return this->NumberOfTensorsInFile;}
00126   int GetNumberOfNormalsInFile()
00127     {this->CharacterizeFile(); return this->NumberOfNormalsInFile;}
00128   int GetNumberOfTCoordsInFile()
00129     {this->CharacterizeFile(); return this->NumberOfTCoordsInFile;}
00130   int GetNumberOfFieldDataInFile()
00131     {this->CharacterizeFile(); return this->NumberOfFieldDataInFile;}
00133   
00135 
00138   const char *GetScalarsNameInFile(int i);
00139   const char *GetVectorsNameInFile(int i);
00140   const char *GetTensorsNameInFile(int i);
00141   const char *GetNormalsNameInFile(int i);
00142   const char *GetTCoordsNameInFile(int i);
00143   const char *GetFieldDataNameInFile(int i);
00145   
00147 
00149   vtkSetStringMacro(ScalarsName);
00150   vtkGetStringMacro(ScalarsName);
00152 
00154 
00156   vtkSetStringMacro(VectorsName);
00157   vtkGetStringMacro(VectorsName);
00159 
00161 
00163   vtkSetStringMacro(TensorsName);
00164   vtkGetStringMacro(TensorsName);
00166 
00168 
00170   vtkSetStringMacro(NormalsName);
00171   vtkGetStringMacro(NormalsName);
00173 
00175 
00177   vtkSetStringMacro(TCoordsName);
00178   vtkGetStringMacro(TCoordsName);
00180 
00182 
00185   vtkSetStringMacro(LookupTableName);
00186   vtkGetStringMacro(LookupTableName);
00188 
00190 
00192   vtkSetStringMacro(FieldDataName);
00193   vtkGetStringMacro(FieldDataName);
00195 
00197   int OpenVTKFile();
00198 
00200   int ReadHeader();
00201 
00205   int ReadCellData(vtkDataSet *ds, int numCells);
00206 
00210   int ReadPointData(vtkDataSet *ds, int numPts);
00211 
00213   int ReadPoints(vtkPointSet *ps, int numPts);
00214 
00216   int ReadCells(int size, int *data);
00217 
00219   int ReadCells(int size, int *data, int skip1, int read2, int skip3);
00220 
00223   int ReadCoordinates(vtkRectilinearGrid *rg, int axes, int numCoords);
00224 
00226 
00227   vtkDataArray *ReadArray(const char *dataType, int numTuples, int numComp);
00228   vtkFieldData *ReadFieldData();
00230 
00232 
00234   int Read(char *);
00235   int Read(unsigned char *);
00236   int Read(short *);
00237   int Read(unsigned short *);
00238   int Read(int *);
00239   int Read(unsigned int *);
00240   int Read(long *);
00241   int Read(unsigned long *);
00242   int Read(float *);
00243   int Read(double *);
00245 
00247   void CloseVTKFile();
00248 
00249 //BTX
00252   int ReadLine(char result[256]);
00253 
00256   int ReadString(char result[256]);
00257 
00259   char *LowerCase(char *str, const size_t len=256);
00260   
00262   istream *GetIStream() {return this->IS;};
00263 //ETX
00264 
00265 protected:
00266   vtkDataReader();
00267   ~vtkDataReader();
00268 
00269   char *FileName;
00270   int FileType;
00271   istream *IS;
00272 
00273   char *ScalarsName;
00274   char *VectorsName;
00275   char *TensorsName;
00276   char *TCoordsName;
00277   char *NormalsName;
00278   char *LookupTableName;
00279   char *FieldDataName;
00280   char *ScalarLut;
00281 
00282   int ReadFromInputString;
00283   char *InputString;
00284   int InputStringLength;
00285   int InputStringPos;
00286 
00287   vtkSetStringMacro(ScalarLut);
00288   vtkGetStringMacro(ScalarLut);
00289 
00290   char *Header;
00291 
00292   int ReadScalarData(vtkDataSetAttributes *a, int num);
00293   int ReadVectorData(vtkDataSetAttributes *a, int num);
00294   int ReadNormalData(vtkDataSetAttributes *a, int num);
00295   int ReadTensorData(vtkDataSetAttributes *a, int num);
00296   int ReadCoScalarData(vtkDataSetAttributes *a, int num);
00297   int ReadLutData(vtkDataSetAttributes *a);
00298   int ReadTCoordsData(vtkDataSetAttributes *a, int num);
00299 
00300   int ReadDataSetData(vtkDataSet *ds);
00301 
00302   // This supports getting additional information from vtk files
00303   int  NumberOfScalarsInFile;
00304   char **ScalarsNameInFile;
00305   int ScalarsNameAllocSize;
00306   int  NumberOfVectorsInFile;
00307   char **VectorsNameInFile;
00308   int VectorsNameAllocSize;
00309   int  NumberOfTensorsInFile;
00310   char **TensorsNameInFile;
00311   int TensorsNameAllocSize;
00312   int  NumberOfTCoordsInFile;
00313   char **TCoordsNameInFile;
00314   int TCoordsNameAllocSize;
00315   int  NumberOfNormalsInFile;
00316   char **NormalsNameInFile;
00317   int NormalsNameAllocSize;
00318   int  NumberOfFieldDataInFile;
00319   char **FieldDataNameInFile;
00320   int FieldDataNameAllocSize;
00321   vtkTimeStamp CharacteristicsTime;
00322 
00323   void InitializeCharacteristics();
00324   int CharacterizeFile(); //read entire file, storing important characteristics
00325   void CheckFor(const char* name, char *line, int &num, char** &array, 
00326                 int& allocSize);
00327 
00328   vtkCharArray* InputArray;
00329 
00332   void DecodeArrayName(char *resname, const char* name);
00333 
00334 private:
00335   vtkDataReader(const vtkDataReader&);  // Not implemented.
00336   void operator=(const vtkDataReader&);  // Not implemented.
00337 };
00338 
00339 #endif
00340 
00341