VTK
dox/IO/vtkDataReader.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkDataReader.h
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 "vtkAlgorithm.h"
00032 #include "vtkStdString.h" // For API using strings
00033 
00034 #define VTK_ASCII 1
00035 #define VTK_BINARY 2
00036 
00037 class vtkAbstractArray;
00038 class vtkCharArray;
00039 class vtkDataSet;
00040 class vtkDataSetAttributes;
00041 class vtkFieldData;
00042 class vtkGraph;
00043 class vtkPointSet;
00044 class vtkRectilinearGrid;
00045 class vtkTable;
00046 
00047 class VTK_IO_EXPORT vtkDataReader : public vtkAlgorithm
00048 {
00049 public:
00050   static vtkDataReader *New();
00051   vtkTypeMacro(vtkDataReader,vtkAlgorithm);
00052   void PrintSelf(ostream& os, vtkIndent indent);
00053 
00055 
00056   vtkSetStringMacro(FileName);
00057   vtkGetStringMacro(FileName);
00059 
00061 
00063   int IsFileValid(const char *dstype);
00064   int IsFileStructuredPoints() {
00065     return this->IsFileValid("structured_points");};  
00066   int IsFilePolyData() {
00067     return this->IsFileValid("polydata");};  
00068   int IsFileStructuredGrid() {
00069     return this->IsFileValid("structured_grid");};  
00070   int IsFileUnstructuredGrid() {
00071     return this->IsFileValid("unstructured_grid");};  
00072   int IsFileRectilinearGrid() {
00073     return this->IsFileValid("rectilinear_grid");};
00075   
00077 
00081   void SetInputString(const char *in);
00082   vtkGetStringMacro(InputString);
00083   void SetInputString(const char *in, int len);
00084   vtkGetMacro(InputStringLength, int);
00085   void SetBinaryInputString(const char *, int len);
00086   void SetInputString(const vtkStdString& input)
00087     { this->SetBinaryInputString(input.c_str(), static_cast<int>(input.length())); }
00089 
00091 
00097   virtual void SetInputArray(vtkCharArray*);
00098   vtkGetObjectMacro(InputArray, vtkCharArray);
00100     
00102 
00103   vtkGetStringMacro(Header);
00105 
00107 
00109   vtkSetMacro(ReadFromInputString,int);
00110   vtkGetMacro(ReadFromInputString,int);
00111   vtkBooleanMacro(ReadFromInputString,int);
00113 
00115 
00117   vtkGetMacro(FileType,int);
00119 
00121 
00125   int GetNumberOfScalarsInFile()
00126     {this->CharacterizeFile(); return this->NumberOfScalarsInFile;}
00127   int GetNumberOfVectorsInFile()
00128     {this->CharacterizeFile(); return this->NumberOfVectorsInFile;}
00129   int GetNumberOfTensorsInFile()
00130     {this->CharacterizeFile(); return this->NumberOfTensorsInFile;}
00131   int GetNumberOfNormalsInFile()
00132     {this->CharacterizeFile(); return this->NumberOfNormalsInFile;}
00133   int GetNumberOfTCoordsInFile()
00134     {this->CharacterizeFile(); return this->NumberOfTCoordsInFile;}
00135   int GetNumberOfFieldDataInFile()
00136     {this->CharacterizeFile(); return this->NumberOfFieldDataInFile;}
00138   
00140 
00143   const char *GetScalarsNameInFile(int i);
00144   const char *GetVectorsNameInFile(int i);
00145   const char *GetTensorsNameInFile(int i);
00146   const char *GetNormalsNameInFile(int i);
00147   const char *GetTCoordsNameInFile(int i);
00148   const char *GetFieldDataNameInFile(int i);
00150   
00152 
00154   vtkSetStringMacro(ScalarsName);
00155   vtkGetStringMacro(ScalarsName);
00157 
00159 
00161   vtkSetStringMacro(VectorsName);
00162   vtkGetStringMacro(VectorsName);
00164 
00166 
00168   vtkSetStringMacro(TensorsName);
00169   vtkGetStringMacro(TensorsName);
00171 
00173 
00175   vtkSetStringMacro(NormalsName);
00176   vtkGetStringMacro(NormalsName);
00178 
00180 
00182   vtkSetStringMacro(TCoordsName);
00183   vtkGetStringMacro(TCoordsName);
00185 
00187 
00190   vtkSetStringMacro(LookupTableName);
00191   vtkGetStringMacro(LookupTableName);
00193 
00195 
00197   vtkSetStringMacro(FieldDataName);
00198   vtkGetStringMacro(FieldDataName);
00200 
00202 
00203   vtkSetMacro(ReadAllScalars,int);
00204   vtkGetMacro(ReadAllScalars,int);
00205   vtkBooleanMacro(ReadAllScalars,int);
00207 
00209 
00210   vtkSetMacro(ReadAllVectors,int);
00211   vtkGetMacro(ReadAllVectors,int);
00212   vtkBooleanMacro(ReadAllVectors,int);
00214 
00216 
00217   vtkSetMacro(ReadAllNormals,int);
00218   vtkGetMacro(ReadAllNormals,int);
00219   vtkBooleanMacro(ReadAllNormals,int);
00221 
00223 
00224   vtkSetMacro(ReadAllTensors,int);
00225   vtkGetMacro(ReadAllTensors,int);
00226   vtkBooleanMacro(ReadAllTensors,int);
00228 
00230 
00231   vtkSetMacro(ReadAllColorScalars,int);
00232   vtkGetMacro(ReadAllColorScalars,int);
00233   vtkBooleanMacro(ReadAllColorScalars,int);
00235 
00237 
00238   vtkSetMacro(ReadAllTCoords,int);
00239   vtkGetMacro(ReadAllTCoords,int);
00240   vtkBooleanMacro(ReadAllTCoords,int);
00242 
00244 
00245   vtkSetMacro(ReadAllFields,int);
00246   vtkGetMacro(ReadAllFields,int);
00247   vtkBooleanMacro(ReadAllFields,int);
00249 
00251   int OpenVTKFile();
00252 
00254   int ReadHeader();
00255 
00259   int ReadCellData(vtkDataSet *ds, int numCells);
00260 
00264   int ReadPointData(vtkDataSet *ds, int numPts);
00265 
00267   int ReadPoints(vtkPointSet *ps, int numPts);
00268 
00270   int ReadPoints(vtkGraph *g, int numPts);
00271 
00275   int ReadVertexData(vtkGraph *g, int numVertices);
00276 
00280   int ReadEdgeData(vtkGraph *g, int numEdges);
00281 
00283   int ReadRowData(vtkTable *t, int numEdges);
00284 
00286   int ReadCells(int size, int *data);
00287 
00289   int ReadCells(int size, int *data, int skip1, int read2, int skip3);
00290 
00293   int ReadCoordinates(vtkRectilinearGrid *rg, int axes, int numCoords);
00294 
00296 
00297   vtkAbstractArray *ReadArray(const char *dataType, int numTuples, int numComp);
00298   vtkFieldData *ReadFieldData();
00300 
00301 //BTX  
00303 
00305   int Read(char *);
00306   int Read(unsigned char *);
00307   int Read(short *);
00308   int Read(unsigned short *);
00309   int Read(int *);
00310   int Read(unsigned int *);
00311   int Read(long *);
00312   int Read(unsigned long *);
00313 #if defined(VTK_TYPE_USE___INT64)
00314   int Read(__int64 *result);
00315   int Read(unsigned __int64 *result);
00316 #endif
00317 #if defined(VTK_TYPE_USE_LONG_LONG)
00318   int Read(long long *result);
00319   int Read(unsigned long long *result);
00320 #endif
00321   int Read(float *);
00322   int Read(double *);  
00323 //ETX
00325 
00327   void CloseVTKFile();
00328 
00329 //BTX
00332   int ReadLine(char result[256]);
00333 
00336   int ReadString(char result[256]);
00337 
00339   char *LowerCase(char *str, const size_t len=256);
00340   
00342 
00343   istream *GetIStream() {return this->IS;};
00344 //ETX
00346 
00349   virtual int ReadMetaData(vtkInformation *) { return 1; }
00350 
00351 protected:
00352   vtkDataReader();
00353   ~vtkDataReader();
00354 
00355   char *FileName;
00356   int FileType;
00357   istream *IS;
00358 
00359   char *ScalarsName;
00360   char *VectorsName;
00361   char *TensorsName;
00362   char *TCoordsName;
00363   char *NormalsName;
00364   char *LookupTableName;
00365   char *FieldDataName;
00366   char *ScalarLut;
00367 
00368   int ReadFromInputString;
00369   char *InputString;
00370   int InputStringLength;
00371   int InputStringPos;
00372 
00373   void SetScalarLut(const char* lut);
00374   vtkGetStringMacro(ScalarLut);
00375 
00376   char *Header;
00377 
00378   int ReadScalarData(vtkDataSetAttributes *a, int num);
00379   int ReadVectorData(vtkDataSetAttributes *a, int num);
00380   int ReadNormalData(vtkDataSetAttributes *a, int num);
00381   int ReadTensorData(vtkDataSetAttributes *a, int num);
00382   int ReadCoScalarData(vtkDataSetAttributes *a, int num);
00383   int ReadLutData(vtkDataSetAttributes *a);
00384   int ReadTCoordsData(vtkDataSetAttributes *a, int num);
00385   int ReadGlobalIds(vtkDataSetAttributes *a, int num);
00386   int ReadPedigreeIds(vtkDataSetAttributes *a, int num);
00387 
00388   int ReadDataSetData(vtkDataSet *ds);
00389 
00390   // This supports getting additional information from vtk files
00391   int  NumberOfScalarsInFile;
00392   char **ScalarsNameInFile;
00393   int ScalarsNameAllocSize;
00394   int  NumberOfVectorsInFile;
00395   char **VectorsNameInFile;
00396   int VectorsNameAllocSize;
00397   int  NumberOfTensorsInFile;
00398   char **TensorsNameInFile;
00399   int TensorsNameAllocSize;
00400   int  NumberOfTCoordsInFile;
00401   char **TCoordsNameInFile;
00402   int TCoordsNameAllocSize;
00403   int  NumberOfNormalsInFile;
00404   char **NormalsNameInFile;
00405   int NormalsNameAllocSize;
00406   int  NumberOfFieldDataInFile;
00407   char **FieldDataNameInFile;
00408   int FieldDataNameAllocSize;
00409   vtkTimeStamp CharacteristicsTime;
00410  
00411   int ReadAllScalars;
00412   int ReadAllVectors;
00413   int ReadAllNormals;
00414   int ReadAllTensors;
00415   int ReadAllColorScalars;
00416   int ReadAllTCoords;
00417   int ReadAllFields;
00418 
00419   void InitializeCharacteristics();
00420   int CharacterizeFile(); //read entire file, storing important characteristics
00421   void CheckFor(const char* name, char *line, int &num, char** &array, 
00422                 int& allocSize);
00423 
00424   vtkCharArray* InputArray;
00425 
00428   int DecodeString(char *resname, const char* name);
00429 
00430   virtual int ProcessRequest(vtkInformation *, vtkInformationVector **,
00431                              vtkInformationVector *);
00432   virtual int RequestData(vtkInformation *, vtkInformationVector **,
00433                           vtkInformationVector *)
00434     { return 1; }
00435   virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
00436                                   vtkInformationVector *)
00437     { return 1; }
00438   virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
00439                                  vtkInformationVector *)
00440     { return 1; }
00441 
00442 private:
00443   vtkDataReader(const vtkDataReader&);  // Not implemented.
00444   void operator=(const vtkDataReader&);  // Not implemented.
00445 };
00446 
00447 #endif
00448 
00449