00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00080 #ifndef __vtkPLOT3DReader_h
00081 #define __vtkPLOT3DReader_h
00082
00083 #include "vtkStructuredGridSource.h"
00084 #include "vtkIdList.h"
00085
00086 class vtkUnsignedCharArray;
00087 class vtkIntArray;
00088 class vtkFloatArray;
00089 class vtkStructuredGrid;
00090
00091 class VTK_IO_EXPORT vtkPLOT3DReader : public vtkStructuredGridSource
00092 {
00093 public:
00094 static vtkPLOT3DReader *New();
00095 vtkTypeRevisionMacro(vtkPLOT3DReader,vtkStructuredGridSource);
00096 void PrintSelf(ostream& os, vtkIndent indent);
00097
00099
00100 void SetFileName(const char* name) { this->SetXYZFileName(name); }
00101 const char* GetFileName() { return this->GetXYZFileName(); }
00102 virtual void SetXYZFileName( const char* );
00103 vtkGetStringMacro(XYZFileName);
00105
00107
00108 vtkSetStringMacro(QFileName);
00109 vtkGetStringMacro(QFileName);
00111
00113
00114 vtkSetStringMacro(FunctionFileName);
00115 vtkGetStringMacro(FunctionFileName);
00117
00119
00125 int GetNumberOfOutputs();
00126 int GetNumberOfGrids() { return this->GetNumberOfOutputs(); }
00128
00130 void SetOutput(int idx, vtkStructuredGrid *output);
00131
00133
00135 vtkSetMacro(BinaryFile, int);
00136 vtkGetMacro(BinaryFile, int);
00137 vtkBooleanMacro(BinaryFile, int);
00139
00141
00144 vtkSetMacro(MultiGrid, int);
00145 vtkGetMacro(MultiGrid, int);
00146 vtkBooleanMacro(MultiGrid, int);
00148
00150
00153 vtkSetMacro(HasByteCount, int);
00154 vtkGetMacro(HasByteCount, int);
00155 vtkBooleanMacro(HasByteCount, int);
00157
00159
00162 vtkSetMacro(IBlanking, int);
00163 vtkGetMacro(IBlanking, int);
00164 vtkBooleanMacro(IBlanking, int);
00166
00168
00169 vtkSetMacro(TwoDimensionalGeometry, int);
00170 vtkGetMacro(TwoDimensionalGeometry, int);
00171 vtkBooleanMacro(TwoDimensionalGeometry, int);
00173
00175
00179 vtkSetMacro(ForceRead, int);
00180 vtkGetMacro(ForceRead, int);
00181 vtkBooleanMacro(ForceRead, int);
00183
00185
00190 vtkSetMacro(DoNotReduceNumberOfOutputs, int);
00191 vtkGetMacro(DoNotReduceNumberOfOutputs, int);
00192 vtkBooleanMacro(DoNotReduceNumberOfOutputs, int);
00194
00196
00199 void SetByteOrderToBigEndian();
00200 void SetByteOrderToLittleEndian();
00201 vtkSetMacro(ByteOrder, int);
00202 vtkGetMacro(ByteOrder, int);
00203 const char *GetByteOrderAsString();
00205
00207
00208 vtkSetMacro(R,double);
00209 vtkGetMacro(R,double);
00211
00213
00214 vtkSetMacro(Gamma,double);
00215 vtkGetMacro(Gamma,double);
00217
00219
00220 vtkSetMacro(Uvinf,double);
00221 vtkGetMacro(Uvinf,double);
00223
00225
00226 vtkSetMacro(Vvinf,double);
00227 vtkGetMacro(Vvinf,double);
00229
00231
00232 vtkSetMacro(Wvinf,double);
00233 vtkGetMacro(Wvinf,double);
00235
00237
00239 void SetScalarFunctionNumber(int num);
00240 vtkGetMacro(ScalarFunctionNumber,int);
00242
00244
00246 void SetVectorFunctionNumber(int num);
00247 vtkGetMacro(VectorFunctionNumber,int);
00249
00251
00254 void AddFunction(int functionNumber);
00255 void RemoveFunction(int);
00256 void RemoveAllFunctions();
00258
00261 virtual int CanReadBinaryFile(const char* fname);
00262
00263
00264 enum
00265 {
00266 FILE_BIG_ENDIAN=0,
00267 FILE_LITTLE_ENDIAN=1
00268 };
00269
00270
00271 protected:
00272 vtkPLOT3DReader();
00273 ~vtkPLOT3DReader();
00274
00275 void ExecuteInformation();
00276 void Execute();
00277
00278 int CheckFile(FILE*& fp, const char* fname);
00279 int CheckGeometryFile(FILE*& xyzFp);
00280 int CheckSolutionFile(FILE*& qFp);
00281 int CheckFunctionFile(FILE*& fFp);
00282
00283 void SkipByteCount (FILE* fp);
00284 int ReadIntBlock (FILE* fp, int n, int* block);
00285 int ReadFloatBlock(FILE* fp, int n, float* block);
00286
00287 int GetNumberOfOutputsInternal(FILE* xyzFp, int verify=1);
00288
00289 int ReadGeometryHeader(FILE* fp);
00290 int ReadQHeader(FILE* fp);
00291 int ReadFunctionHeader(FILE *fp, vtkIdList*& counts);
00292
00293 void CalculateFileSize(FILE* fp);
00294 long EstimateSize(int ni, int nj, int nk);
00295
00296 void AssignAttribute(int fNumber, vtkStructuredGrid* output,
00297 int attributeType);
00298 void MapFunction(int fNumber, vtkStructuredGrid* output);
00299 void ComputeTemperature(vtkStructuredGrid* output);
00300 void ComputePressure(vtkStructuredGrid* output);
00301 void ComputeEnthalpy(vtkStructuredGrid* output);
00302 void ComputeKineticEnergy(vtkStructuredGrid* output);
00303 void ComputeVelocityMagnitude(vtkStructuredGrid* output);
00304 void ComputeEntropy(vtkStructuredGrid* output);
00305 void ComputeSwirl(vtkStructuredGrid* output);
00306 void ComputeVelocity(vtkStructuredGrid* output);
00307 void ComputeVorticity(vtkStructuredGrid* output);
00308 void ComputePressureGradient(vtkStructuredGrid* output);
00309
00310
00311
00312
00313 void ClearGeometryCache();
00314
00315
00316 char *XYZFileName;
00317 char *QFileName;
00318 char *FunctionFileName;
00319
00320 int BinaryFile;
00321 int HasByteCount;
00322 int TwoDimensionalGeometry;
00323 int MultiGrid;
00324 int ForceRead;
00325 int ByteOrder;
00326 int IBlanking;
00327 int DoNotReduceNumberOfOutputs;
00328
00329 long FileSize;
00330
00331
00332 double R;
00333 double Gamma;
00334 double Uvinf;
00335 double Vvinf;
00336 double Wvinf;
00337
00338
00339 vtkIntArray *FunctionList;
00340
00341 int ScalarFunctionNumber;
00342 int VectorFunctionNumber;
00343
00344
00345 vtkFloatArray** PointCache;
00346 vtkUnsignedCharArray** IBlankCache;
00347
00348 void ReadIntBlockV(char** buf, int n, int* block);
00349 void SkipByteCountV(char** buf);
00350
00351
00352 private:
00353 vtkPLOT3DReader(const vtkPLOT3DReader&);
00354 void operator=(const vtkPLOT3DReader&);
00355 };
00356
00357 #endif
00358
00359