VTK
|
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