00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifndef __vtkDataReader_h
00054 #define __vtkDataReader_h
00055
00056 #include "vtkSource.h"
00057 #include "vtkDataSetAttributes.h"
00058
00059 #define VTK_ASCII 1
00060 #define VTK_BINARY 2
00061
00062 class vtkDataSet;
00063 class vtkPointSet;
00064 class vtkRectilinearGrid;
00065
00066 class VTK_IO_EXPORT vtkDataReader : public vtkSource
00067 {
00068 public:
00069 static vtkDataReader *New();
00070 vtkTypeMacro(vtkDataReader,vtkObject);
00071 void PrintSelf(ostream& os, vtkIndent indent);
00072
00073
00074
00075 vtkSetStringMacro(FileName);
00076 vtkGetStringMacro(FileName);
00077
00078
00079
00080
00081 int IsFileValid(const char *dstype);
00082 int IsFileStructuredPoints() {
00083 return this->IsFileValid("structured_points");};
00084 int IsFilePolyData() {
00085 return this->IsFileValid("polydata");};
00086 int IsFileStructuredGrid() {
00087 return this->IsFileValid("structured_grid");};
00088 int IsFileUnstructuredGrid() {
00089 return this->IsFileValid("unstructured_grid");};
00090 int IsFileRectilinearGrid() {
00091 return this->IsFileValid("rectilinear_grid");};
00092
00093
00094
00095
00096 void SetInputString(const char *in);
00097 vtkGetStringMacro(InputString);
00098 void SetInputString(const char *in, int len);
00099 vtkGetMacro(InputStringLength, int);
00100 void SetBinaryInputString(const char *, int len);
00101
00102
00103
00104 vtkGetStringMacro(Header);
00105
00106
00107
00108 vtkSetMacro(ReadFromInputString,int);
00109 vtkGetMacro(ReadFromInputString,int);
00110 vtkBooleanMacro(ReadFromInputString,int);
00111
00112
00113
00114
00115 vtkGetMacro(FileType,int);
00116
00117
00118
00119
00120
00121
00122
00123 int GetNumberOfScalarsInFile()
00124 {this->CharacterizeFile(); return this->NumberOfScalarsInFile;}
00125 int GetNumberOfVectorsInFile()
00126 {this->CharacterizeFile(); return this->NumberOfVectorsInFile;}
00127 int GetNumberOfTensorsInFile()
00128 {this->CharacterizeFile(); return this->NumberOfTensorsInFile;}
00129 int GetNumberOfNormalsInFile()
00130 {this->CharacterizeFile(); return this->NumberOfNormalsInFile;}
00131 int GetNumberOfTCoordsInFile()
00132 {this->CharacterizeFile(); return this->NumberOfTCoordsInFile;}
00133 int GetNumberOfFieldDataInFile()
00134 {this->CharacterizeFile(); return this->NumberOfFieldDataInFile;}
00135
00136
00137
00138
00139
00140 const char *GetScalarsNameInFile(int i);
00141 const char *GetVectorsNameInFile(int i);
00142 const char *GetTensorsNameInFile(int i);
00143 const char *GetNormalsNameInFile(int i);
00144 const char *GetTCoordsNameInFile(int i);
00145 const char *GetFieldDataNameInFile(int i);
00146
00147
00148
00149
00150 vtkSetStringMacro(ScalarsName);
00151 vtkGetStringMacro(ScalarsName);
00152
00153
00154
00155
00156 vtkSetStringMacro(VectorsName);
00157 vtkGetStringMacro(VectorsName);
00158
00159
00160
00161
00162 vtkSetStringMacro(TensorsName);
00163 vtkGetStringMacro(TensorsName);
00164
00165
00166
00167
00168 vtkSetStringMacro(NormalsName);
00169 vtkGetStringMacro(NormalsName);
00170
00171
00172
00173
00174 vtkSetStringMacro(TCoordsName);
00175 vtkGetStringMacro(TCoordsName);
00176
00177
00178
00179
00180 vtkSetStringMacro(LookupTableName);
00181 vtkGetStringMacro(LookupTableName);
00182
00183
00184
00185
00186 vtkSetStringMacro(FieldDataName);
00187 vtkGetStringMacro(FieldDataName);
00188
00189
00190
00191 int OpenVTKFile();
00192
00193
00194
00195 int ReadHeader();
00196
00197
00198
00199
00200
00201 int ReadCellData(vtkDataSet *ds, int numCells);
00202
00203
00204
00205
00206
00207 int ReadPointData(vtkDataSet *ds, int numPts);
00208
00209
00210
00211 int ReadPoints(vtkPointSet *ps, int numPts);
00212
00213
00214
00215 int ReadCells(int size, int *data);
00216
00217
00218
00219 int ReadCells(int size, int *data, int skip1, int read2, int skip3);
00220
00221
00222
00223
00224 int ReadCoordinates(vtkRectilinearGrid *rg, int axes, int numCoords);
00225
00226
00227
00228 vtkDataArray *ReadArray(const char *dataType, int numTuples, int numComp);
00229 vtkFieldData *ReadFieldData();
00230
00231
00232
00233
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 *);
00244
00245
00246
00247 void CloseVTKFile();
00248
00249
00250
00251
00252
00253 int ReadLine(char result[256]);
00254
00255
00256
00257
00258 int ReadString(char result[256]);
00259
00260
00261
00262 char *LowerCase(char *str, const size_t len=256);
00263
00264
00265
00266 istream *GetIStream() {return this->IS;};
00267
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
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();
00329 void CheckFor(const char* name, char *line, int &num, char** &array,
00330 int& allocSize);
00331
00332 private:
00333 vtkDataReader(const vtkDataReader&);
00334 void operator=(const vtkDataReader&);
00335 };
00336
00337 #endif
00338
00339