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

dox/IO/vtkDataReader.h

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