00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00028 #ifndef __vtkDataReader_h
00029 #define __vtkDataReader_h
00030
00031 #include "vtkAlgorithm.h"
00032
00033 #define VTK_ASCII 1
00034 #define VTK_BINARY 2
00035
00036 class vtkAbstractArray;
00037 class vtkCharArray;
00038 class vtkDataSet;
00039 class vtkDataSetAttributes;
00040 class vtkFieldData;
00041 class vtkGraph;
00042 class vtkPointSet;
00043 class vtkRectilinearGrid;
00044
00045 class VTK_IO_EXPORT vtkDataReader : public vtkAlgorithm
00046 {
00047 public:
00048 static vtkDataReader *New();
00049 vtkTypeRevisionMacro(vtkDataReader,vtkAlgorithm);
00050 void PrintSelf(ostream& os, vtkIndent indent);
00051
00053
00054 vtkSetStringMacro(FileName);
00055 vtkGetStringMacro(FileName);
00057
00059
00061 int IsFileValid(const char *dstype);
00062 int IsFileStructuredPoints() {
00063 return this->IsFileValid("structured_points");};
00064 int IsFilePolyData() {
00065 return this->IsFileValid("polydata");};
00066 int IsFileStructuredGrid() {
00067 return this->IsFileValid("structured_grid");};
00068 int IsFileUnstructuredGrid() {
00069 return this->IsFileValid("unstructured_grid");};
00070 int IsFileRectilinearGrid() {
00071 return this->IsFileValid("rectilinear_grid");};
00073
00075
00079 void SetInputString(const char *in);
00080 vtkGetStringMacro(InputString);
00081 void SetInputString(const char *in, int len);
00082 vtkGetMacro(InputStringLength, int);
00083 void SetBinaryInputString(const char *, int len);
00085
00087
00093 virtual void SetInputArray(vtkCharArray*);
00094 vtkGetObjectMacro(InputArray, vtkCharArray);
00096
00098
00099 vtkGetStringMacro(Header);
00101
00103
00105 vtkSetMacro(ReadFromInputString,int);
00106 vtkGetMacro(ReadFromInputString,int);
00107 vtkBooleanMacro(ReadFromInputString,int);
00109
00111
00113 vtkGetMacro(FileType,int);
00115
00117
00121 int GetNumberOfScalarsInFile()
00122 {this->CharacterizeFile(); return this->NumberOfScalarsInFile;}
00123 int GetNumberOfVectorsInFile()
00124 {this->CharacterizeFile(); return this->NumberOfVectorsInFile;}
00125 int GetNumberOfTensorsInFile()
00126 {this->CharacterizeFile(); return this->NumberOfTensorsInFile;}
00127 int GetNumberOfNormalsInFile()
00128 {this->CharacterizeFile(); return this->NumberOfNormalsInFile;}
00129 int GetNumberOfTCoordsInFile()
00130 {this->CharacterizeFile(); return this->NumberOfTCoordsInFile;}
00131 int GetNumberOfFieldDataInFile()
00132 {this->CharacterizeFile(); return this->NumberOfFieldDataInFile;}
00134
00136
00139 const char *GetScalarsNameInFile(int i);
00140 const char *GetVectorsNameInFile(int i);
00141 const char *GetTensorsNameInFile(int i);
00142 const char *GetNormalsNameInFile(int i);
00143 const char *GetTCoordsNameInFile(int i);
00144 const char *GetFieldDataNameInFile(int i);
00146
00148
00150 vtkSetStringMacro(ScalarsName);
00151 vtkGetStringMacro(ScalarsName);
00153
00155
00157 vtkSetStringMacro(VectorsName);
00158 vtkGetStringMacro(VectorsName);
00160
00162
00164 vtkSetStringMacro(TensorsName);
00165 vtkGetStringMacro(TensorsName);
00167
00169
00171 vtkSetStringMacro(NormalsName);
00172 vtkGetStringMacro(NormalsName);
00174
00176
00178 vtkSetStringMacro(TCoordsName);
00179 vtkGetStringMacro(TCoordsName);
00181
00183
00186 vtkSetStringMacro(LookupTableName);
00187 vtkGetStringMacro(LookupTableName);
00189
00191
00193 vtkSetStringMacro(FieldDataName);
00194 vtkGetStringMacro(FieldDataName);
00196
00198
00199 vtkSetMacro(ReadAllScalars,int);
00200 vtkGetMacro(ReadAllScalars,int);
00201 vtkBooleanMacro(ReadAllScalars,int);
00203
00205
00206 vtkSetMacro(ReadAllVectors,int);
00207 vtkGetMacro(ReadAllVectors,int);
00208 vtkBooleanMacro(ReadAllVectors,int);
00210
00212
00213 vtkSetMacro(ReadAllNormals,int);
00214 vtkGetMacro(ReadAllNormals,int);
00215 vtkBooleanMacro(ReadAllNormals,int);
00217
00219
00220 vtkSetMacro(ReadAllTensors,int);
00221 vtkGetMacro(ReadAllTensors,int);
00222 vtkBooleanMacro(ReadAllTensors,int);
00224
00226
00227 vtkSetMacro(ReadAllColorScalars,int);
00228 vtkGetMacro(ReadAllColorScalars,int);
00229 vtkBooleanMacro(ReadAllColorScalars,int);
00231
00233
00234 vtkSetMacro(ReadAllTCoords,int);
00235 vtkGetMacro(ReadAllTCoords,int);
00236 vtkBooleanMacro(ReadAllTCoords,int);
00238
00240
00241 vtkSetMacro(ReadAllFields,int);
00242 vtkGetMacro(ReadAllFields,int);
00243 vtkBooleanMacro(ReadAllFields,int);
00245
00247 int OpenVTKFile();
00248
00250 int ReadHeader();
00251
00255 int ReadCellData(vtkDataSet *ds, int numCells);
00256
00260 int ReadPointData(vtkDataSet *ds, int numPts);
00261
00263 int ReadPoints(vtkPointSet *ps, int numPts);
00264
00266 int ReadPoints(vtkGraph *g, int numPts);
00267
00271 int ReadVertexData(vtkGraph *g, int numVertices);
00272
00276 int ReadEdgeData(vtkGraph *g, int numEdges);
00277
00279 int ReadCells(int size, int *data);
00280
00282 int ReadCells(int size, int *data, int skip1, int read2, int skip3);
00283
00286 int ReadCoordinates(vtkRectilinearGrid *rg, int axes, int numCoords);
00287
00289
00290 vtkAbstractArray *ReadArray(const char *dataType, int numTuples, int numComp);
00291 vtkFieldData *ReadFieldData();
00293
00294
00296
00298 int Read(char *);
00299 int Read(unsigned char *);
00300 int Read(short *);
00301 int Read(unsigned short *);
00302 int Read(int *);
00303 int Read(unsigned int *);
00304 int Read(long *);
00305 int Read(unsigned long *);
00306 #if defined(VTK_TYPE_USE___INT64)
00307 int Read(__int64 *result);
00308 int Read(unsigned __int64 *result);
00310 #endif
00311 #if defined(VTK_TYPE_USE_LONG_LONG)
00312 int Read(long long *result);
00313 int Read(unsigned long long *result);
00314 #endif
00315 int Read(float *);
00316 int Read(double *);
00317
00318
00320 void CloseVTKFile();
00321
00322
00325 int ReadLine(char result[256]);
00326
00329 int ReadString(char result[256]);
00330
00332 char *LowerCase(char *str, const size_t len=256);
00333
00335 istream *GetIStream() {return this->IS;};
00336
00337
00340 virtual int ReadMetaData(vtkInformation *) { return 1; }
00341
00342 protected:
00343 vtkDataReader();
00344 ~vtkDataReader();
00345
00346 char *FileName;
00347 int FileType;
00348 istream *IS;
00349
00350 char *ScalarsName;
00351 char *VectorsName;
00352 char *TensorsName;
00353 char *TCoordsName;
00354 char *NormalsName;
00355 char *LookupTableName;
00356 char *FieldDataName;
00357 char *ScalarLut;
00358
00359 int ReadFromInputString;
00360 char *InputString;
00361 int InputStringLength;
00362 int InputStringPos;
00363
00364 void SetScalarLut(const char* lut);
00365 vtkGetStringMacro(ScalarLut);
00366
00367 char *Header;
00368
00369 int ReadScalarData(vtkDataSetAttributes *a, int num);
00370 int ReadVectorData(vtkDataSetAttributes *a, int num);
00371 int ReadNormalData(vtkDataSetAttributes *a, int num);
00372 int ReadTensorData(vtkDataSetAttributes *a, int num);
00373 int ReadCoScalarData(vtkDataSetAttributes *a, int num);
00374 int ReadLutData(vtkDataSetAttributes *a);
00375 int ReadTCoordsData(vtkDataSetAttributes *a, int num);
00376 int ReadGlobalIds(vtkDataSetAttributes *a, int num);
00377 int ReadPedigreeIds(vtkDataSetAttributes *a, int num);
00378
00379 int ReadDataSetData(vtkDataSet *ds);
00380
00381
00382 int NumberOfScalarsInFile;
00383 char **ScalarsNameInFile;
00384 int ScalarsNameAllocSize;
00385 int NumberOfVectorsInFile;
00386 char **VectorsNameInFile;
00387 int VectorsNameAllocSize;
00388 int NumberOfTensorsInFile;
00389 char **TensorsNameInFile;
00390 int TensorsNameAllocSize;
00391 int NumberOfTCoordsInFile;
00392 char **TCoordsNameInFile;
00393 int TCoordsNameAllocSize;
00394 int NumberOfNormalsInFile;
00395 char **NormalsNameInFile;
00396 int NormalsNameAllocSize;
00397 int NumberOfFieldDataInFile;
00398 char **FieldDataNameInFile;
00399 int FieldDataNameAllocSize;
00400 vtkTimeStamp CharacteristicsTime;
00401
00402 int ReadAllScalars;
00403 int ReadAllVectors;
00404 int ReadAllNormals;
00405 int ReadAllTensors;
00406 int ReadAllColorScalars;
00407 int ReadAllTCoords;
00408 int ReadAllFields;
00409
00410 void InitializeCharacteristics();
00411 int CharacterizeFile();
00412 void CheckFor(const char* name, char *line, int &num, char** &array,
00413 int& allocSize);
00414
00415 vtkCharArray* InputArray;
00416
00419 int DecodeString(char *resname, const char* name);
00420
00421 virtual int ProcessRequest(vtkInformation *, vtkInformationVector **,
00422 vtkInformationVector *);
00423 virtual int RequestData(vtkInformation *, vtkInformationVector **,
00424 vtkInformationVector *)
00425 { return 1; }
00426 virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
00427 vtkInformationVector *)
00428 { return 1; }
00429 virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
00430 vtkInformationVector *)
00431 { return 1; }
00432
00433 private:
00434 vtkDataReader(const vtkDataReader&);
00435 void operator=(const vtkDataReader&);
00436 };
00437
00438 #endif
00439
00440