VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkOpenFOAMReader.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 =========================================================================*/ 00040 #ifndef __vtkOpenFOAMReader_h 00041 #define __vtkOpenFOAMReader_h 00042 00043 #include "vtkIOGeometryModule.h" // For export macro 00044 #include "vtkMultiBlockDataSetAlgorithm.h" 00045 00046 class vtkCollection; 00047 class vtkCharArray; 00048 class vtkDataArraySelection; 00049 class vtkDoubleArray; 00050 class vtkStdString; 00051 class vtkStringArray; 00052 00053 class vtkOpenFOAMReaderPrivate; 00054 00055 class VTKIOGEOMETRY_EXPORT vtkOpenFOAMReader : public vtkMultiBlockDataSetAlgorithm 00056 { 00057 public: 00058 static vtkOpenFOAMReader *New(); 00059 vtkTypeMacro(vtkOpenFOAMReader, vtkMultiBlockDataSetAlgorithm); 00060 void PrintSelf(ostream &, vtkIndent); 00061 00063 int CanReadFile(const char *); 00064 00066 00067 vtkSetStringMacro(FileName); 00068 vtkGetStringMacro(FileName); 00070 00072 00073 int GetNumberOfCellArrays(void) 00074 { return this->GetNumberOfSelectionArrays(this->CellDataArraySelection); } 00076 00078 00079 int GetCellArrayStatus(const char *name) 00080 { return this->GetSelectionArrayStatus(this->CellDataArraySelection, name); } 00081 void SetCellArrayStatus(const char *name, int status) 00082 { this->SetSelectionArrayStatus(this->CellDataArraySelection, name, status); } 00084 00086 00087 const char *GetCellArrayName(int index) 00088 { return this->GetSelectionArrayName(this->CellDataArraySelection, index); } 00090 00092 00093 void DisableAllCellArrays() 00094 { this->DisableAllSelectionArrays(this->CellDataArraySelection); } 00095 void EnableAllCellArrays() 00096 { this->EnableAllSelectionArrays(this->CellDataArraySelection); } 00098 00100 00101 int GetNumberOfPointArrays(void) 00102 { return this->GetNumberOfSelectionArrays(this->PointDataArraySelection); } 00104 00106 00107 int GetPointArrayStatus(const char *name) 00108 { return this->GetSelectionArrayStatus(this->PointDataArraySelection, name); } 00109 void SetPointArrayStatus(const char *name, int status) 00110 { this->SetSelectionArrayStatus(this->PointDataArraySelection, 00111 name, status); } 00113 00115 00116 const char *GetPointArrayName(int index) 00117 { return this->GetSelectionArrayName(this->PointDataArraySelection, index); } 00119 00121 00122 void DisableAllPointArrays() 00123 { this->DisableAllSelectionArrays(this->PointDataArraySelection); } 00124 void EnableAllPointArrays() 00125 { this->EnableAllSelectionArrays(this->PointDataArraySelection); } 00127 00129 00130 int GetNumberOfLagrangianArrays(void) 00131 { return this->GetNumberOfSelectionArrays( 00132 this->LagrangianDataArraySelection); } 00134 00136 00138 int GetLagrangianArrayStatus(const char *name) 00139 { return this->GetSelectionArrayStatus(this->LagrangianDataArraySelection, 00140 name); } 00141 void SetLagrangianArrayStatus(const char *name, int status) 00142 { this->SetSelectionArrayStatus(this->LagrangianDataArraySelection, name, 00143 status); } 00145 00147 00149 const char* GetLagrangianArrayName(int index) 00150 { return this->GetSelectionArrayName(this->LagrangianDataArraySelection, 00151 index); } 00153 00155 00156 void DisableAllLagrangianArrays() 00157 { this->DisableAllSelectionArrays(this->LagrangianDataArraySelection); } 00158 void EnableAllLagrangianArrays() 00159 { this->EnableAllSelectionArrays(this->LagrangianDataArraySelection); } 00161 00163 00165 int GetNumberOfPatchArrays(void) 00166 { return this->GetNumberOfSelectionArrays(this->PatchDataArraySelection); } 00168 00170 00171 int GetPatchArrayStatus(const char *name) 00172 { return this->GetSelectionArrayStatus(this->PatchDataArraySelection, name); } 00173 void SetPatchArrayStatus(const char *name, int status) 00174 { this->SetSelectionArrayStatus(this->PatchDataArraySelection, name, 00175 status); } 00177 00179 00180 const char *GetPatchArrayName(int index) 00181 { return this->GetSelectionArrayName(this->PatchDataArraySelection, index); } 00183 00185 00186 void DisableAllPatchArrays() 00187 { this->DisableAllSelectionArrays(this->PatchDataArraySelection); } 00188 void EnableAllPatchArrays() 00189 { this->EnableAllSelectionArrays(this->PatchDataArraySelection); } 00191 00193 00195 vtkSetMacro(CreateCellToPoint,int); 00196 vtkGetMacro(CreateCellToPoint,int); 00197 vtkBooleanMacro(CreateCellToPoint, int); 00199 00201 00202 vtkSetMacro(CacheMesh, int); 00203 vtkGetMacro(CacheMesh, int); 00204 vtkBooleanMacro(CacheMesh, int); 00206 00208 00209 vtkSetMacro(DecomposePolyhedra, int); 00210 vtkGetMacro(DecomposePolyhedra, int); 00211 vtkBooleanMacro(DecomposePolyhedra, int); 00213 00214 // Option for reading old binary lagrangian/positions format 00216 00217 vtkSetMacro(PositionsIsIn13Format, int); 00218 vtkGetMacro(PositionsIsIn13Format, int); 00219 vtkBooleanMacro(PositionsIsIn13Format, int); 00221 00223 00225 vtkSetMacro(ListTimeStepsByControlDict, int); 00226 vtkGetMacro(ListTimeStepsByControlDict, int); 00227 vtkBooleanMacro(ListTimeStepsByControlDict, int); 00229 00231 00232 vtkSetMacro(AddDimensionsToArrayNames, int); 00233 vtkGetMacro(AddDimensionsToArrayNames, int); 00234 vtkBooleanMacro(AddDimensionsToArrayNames, int); 00236 00238 00239 vtkSetMacro(ReadZones, int); 00240 vtkGetMacro(ReadZones, int); 00241 vtkBooleanMacro(ReadZones, int); 00243 00244 void SetRefresh() { this->Refresh = true; this->Modified(); } 00245 00246 void SetParent(vtkOpenFOAMReader *parent) { this->Parent = parent; } 00247 int MakeInformationVector(vtkInformationVector *, const vtkStdString &); 00248 bool SetTimeValue(const double); 00249 vtkDoubleArray *GetTimeValues(); 00250 int MakeMetaDataAtTimeStep(const bool); 00251 00252 //BTX 00253 friend class vtkOpenFOAMReaderPrivate; 00254 //ETX 00255 00256 protected: 00257 // refresh flag 00258 bool Refresh; 00259 00260 // for creating cell-to-point translated data 00261 int CreateCellToPoint; 00262 00263 // for caching mesh 00264 int CacheMesh; 00265 00266 // for decomposing polyhedra on-the-fly 00267 int DecomposePolyhedra; 00268 00269 // for reading old binary lagrangian/positions format 00270 int PositionsIsIn13Format; 00271 00272 // for reading point/face/cell-Zones 00273 int ReadZones; 00274 00275 // determine if time directories are listed according to controlDict 00276 int ListTimeStepsByControlDict; 00277 00278 // add dimensions to array names 00279 int AddDimensionsToArrayNames; 00280 00281 char *FileName; 00282 vtkCharArray *CasePath; 00283 vtkCollection *Readers; 00284 00285 // DataArraySelection for Patch / Region Data 00286 vtkDataArraySelection *PatchDataArraySelection; 00287 vtkDataArraySelection *CellDataArraySelection; 00288 vtkDataArraySelection *PointDataArraySelection; 00289 vtkDataArraySelection *LagrangianDataArraySelection; 00290 00291 // old selection status 00292 unsigned long int PatchSelectionMTimeOld; 00293 unsigned long int CellSelectionMTimeOld; 00294 unsigned long int PointSelectionMTimeOld; 00295 unsigned long int LagrangianSelectionMTimeOld; 00296 00297 // preserved old information 00298 vtkStdString *FileNameOld; 00299 int ListTimeStepsByControlDictOld; 00300 int CreateCellToPointOld; 00301 int DecomposePolyhedraOld; 00302 int PositionsIsIn13FormatOld; 00303 int AddDimensionsToArrayNamesOld; 00304 int ReadZonesOld; 00305 00306 // paths to Lagrangians 00307 vtkStringArray *LagrangianPaths; 00308 00309 // number of reader instances 00310 int NumberOfReaders; 00311 // index of the active reader 00312 int CurrentReaderIndex; 00313 00314 vtkOpenFOAMReader(); 00315 ~vtkOpenFOAMReader(); 00316 int RequestInformation(vtkInformation *, vtkInformationVector **, 00317 vtkInformationVector *); 00318 int RequestData(vtkInformation *, vtkInformationVector **, 00319 vtkInformationVector *); 00320 00321 void CreateCasePath(vtkStdString &, vtkStdString &); 00322 void SetTimeInformation(vtkInformationVector *, vtkDoubleArray *); 00323 void CreateCharArrayFromString(vtkCharArray *, const char *, vtkStdString &); 00324 void UpdateStatus(); 00325 void UpdateProgress(double); 00326 00327 private: 00328 vtkOpenFOAMReader *Parent; 00329 00330 vtkOpenFOAMReader(const vtkOpenFOAMReader&); // Not implemented. 00331 void operator=(const vtkOpenFOAMReader&); // Not implemented. 00332 00333 int GetNumberOfSelectionArrays(vtkDataArraySelection *); 00334 int GetSelectionArrayStatus(vtkDataArraySelection *, const char *); 00335 void SetSelectionArrayStatus(vtkDataArraySelection *, const char *, int); 00336 const char *GetSelectionArrayName(vtkDataArraySelection *, int); 00337 void DisableAllSelectionArrays(vtkDataArraySelection *); 00338 void EnableAllSelectionArrays(vtkDataArraySelection *); 00339 00340 void AddSelectionNames(vtkDataArraySelection *, vtkStringArray *); 00341 }; 00342 00343 #endif