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 "vtkMultiBlockDataSetAlgorithm.h" 00044 00045 class vtkCollection; 00046 class vtkCharArray; 00047 class vtkDataArraySelection; 00048 class vtkDoubleArray; 00049 class vtkStdString; 00050 class vtkStringArray; 00051 00052 class vtkOpenFOAMReaderPrivate; 00053 00054 class VTK_IO_EXPORT vtkOpenFOAMReader : public vtkMultiBlockDataSetAlgorithm 00055 { 00056 public: 00057 static vtkOpenFOAMReader *New(); 00058 vtkTypeMacro(vtkOpenFOAMReader, vtkMultiBlockDataSetAlgorithm); 00059 void PrintSelf(ostream &, vtkIndent); 00060 00062 int CanReadFile(const char *); 00063 00065 00066 vtkSetStringMacro(FileName); 00067 vtkGetStringMacro(FileName); 00069 00071 00072 int GetNumberOfCellArrays(void) 00073 { return this->GetNumberOfSelectionArrays(this->CellDataArraySelection); } 00075 00077 00078 int GetCellArrayStatus(const char *name) 00079 { return this->GetSelectionArrayStatus(this->CellDataArraySelection, name); } 00080 void SetCellArrayStatus(const char *name, int status) 00081 { this->SetSelectionArrayStatus(this->CellDataArraySelection, name, status); } 00083 00085 00086 const char *GetCellArrayName(int index) 00087 { return this->GetSelectionArrayName(this->CellDataArraySelection, index); } 00089 00091 00092 void DisableAllCellArrays() 00093 { this->DisableAllSelectionArrays(this->CellDataArraySelection); } 00094 void EnableAllCellArrays() 00095 { this->EnableAllSelectionArrays(this->CellDataArraySelection); } 00097 00099 00100 int GetNumberOfPointArrays(void) 00101 { return this->GetNumberOfSelectionArrays(this->PointDataArraySelection); } 00103 00105 00106 int GetPointArrayStatus(const char *name) 00107 { return this->GetSelectionArrayStatus(this->PointDataArraySelection, name); } 00108 void SetPointArrayStatus(const char *name, int status) 00109 { this->SetSelectionArrayStatus(this->PointDataArraySelection, 00110 name, status); } 00112 00114 00115 const char *GetPointArrayName(int index) 00116 { return this->GetSelectionArrayName(this->PointDataArraySelection, index); } 00118 00120 00121 void DisableAllPointArrays() 00122 { this->DisableAllSelectionArrays(this->PointDataArraySelection); } 00123 void EnableAllPointArrays() 00124 { this->EnableAllSelectionArrays(this->PointDataArraySelection); } 00126 00128 00129 int GetNumberOfLagrangianArrays(void) 00130 { return this->GetNumberOfSelectionArrays( 00131 this->LagrangianDataArraySelection); } 00133 00135 00137 int GetLagrangianArrayStatus(const char *name) 00138 { return this->GetSelectionArrayStatus(this->LagrangianDataArraySelection, 00139 name); } 00140 void SetLagrangianArrayStatus(const char *name, int status) 00141 { this->SetSelectionArrayStatus(this->LagrangianDataArraySelection, name, 00142 status); } 00144 00146 00148 const char* GetLagrangianArrayName(int index) 00149 { return this->GetSelectionArrayName(this->LagrangianDataArraySelection, 00150 index); } 00152 00154 00155 void DisableAllLagrangianArrays() 00156 { this->DisableAllSelectionArrays(this->LagrangianDataArraySelection); } 00157 void EnableAllLagrangianArrays() 00158 { this->EnableAllSelectionArrays(this->LagrangianDataArraySelection); } 00160 00162 00164 int GetNumberOfPatchArrays(void) 00165 { return this->GetNumberOfSelectionArrays(this->PatchDataArraySelection); } 00167 00169 00170 int GetPatchArrayStatus(const char *name) 00171 { return this->GetSelectionArrayStatus(this->PatchDataArraySelection, name); } 00172 void SetPatchArrayStatus(const char *name, int status) 00173 { this->SetSelectionArrayStatus(this->PatchDataArraySelection, name, 00174 status); } 00176 00178 00179 const char *GetPatchArrayName(int index) 00180 { return this->GetSelectionArrayName(this->PatchDataArraySelection, index); } 00182 00184 00185 void DisableAllPatchArrays() 00186 { this->DisableAllSelectionArrays(this->PatchDataArraySelection); } 00187 void EnableAllPatchArrays() 00188 { this->EnableAllSelectionArrays(this->PatchDataArraySelection); } 00190 00192 00194 vtkSetMacro(CreateCellToPoint,int); 00195 vtkGetMacro(CreateCellToPoint,int); 00196 vtkBooleanMacro(CreateCellToPoint, int); 00198 00200 00201 vtkSetMacro(CacheMesh, int); 00202 vtkGetMacro(CacheMesh, int); 00203 vtkBooleanMacro(CacheMesh, int); 00205 00207 00208 vtkSetMacro(DecomposePolyhedra, int); 00209 vtkGetMacro(DecomposePolyhedra, int); 00210 vtkBooleanMacro(DecomposePolyhedra, int); 00212 00213 // Option for reading old binary lagrangian/positions format 00215 00216 vtkSetMacro(PositionsIsIn13Format, int); 00217 vtkGetMacro(PositionsIsIn13Format, int); 00218 vtkBooleanMacro(PositionsIsIn13Format, int); 00220 00222 00224 vtkSetMacro(ListTimeStepsByControlDict, int); 00225 vtkGetMacro(ListTimeStepsByControlDict, int); 00226 vtkBooleanMacro(ListTimeStepsByControlDict, int); 00228 00230 00231 vtkSetMacro(AddDimensionsToArrayNames, int); 00232 vtkGetMacro(AddDimensionsToArrayNames, int); 00233 vtkBooleanMacro(AddDimensionsToArrayNames, int); 00235 00237 00238 vtkSetMacro(ReadZones, int); 00239 vtkGetMacro(ReadZones, int); 00240 vtkBooleanMacro(ReadZones, int); 00242 00243 void SetRefresh() { this->Refresh = true; this->Modified(); } 00244 00245 void SetParent(vtkOpenFOAMReader *parent) { this->Parent = parent; } 00246 int MakeInformationVector(vtkInformationVector *, const vtkStdString &); 00247 bool SetTimeValue(const double); 00248 vtkDoubleArray *GetTimeValues(); 00249 int MakeMetaDataAtTimeStep(const bool); 00250 00251 //BTX 00252 friend class vtkOpenFOAMReaderPrivate; 00253 //ETX 00254 00255 protected: 00256 // refresh flag 00257 bool Refresh; 00258 00259 // for creating cell-to-point translated data 00260 int CreateCellToPoint; 00261 00262 // for caching mesh 00263 int CacheMesh; 00264 00265 // for decomposing polyhedra on-the-fly 00266 int DecomposePolyhedra; 00267 00268 // for reading old binary lagrangian/positions format 00269 int PositionsIsIn13Format; 00270 00271 // for reading point/face/cell-Zones 00272 int ReadZones; 00273 00274 // determine if time directories are listed according to controlDict 00275 int ListTimeStepsByControlDict; 00276 00277 // add dimensions to array names 00278 int AddDimensionsToArrayNames; 00279 00280 char *FileName; 00281 vtkCharArray *CasePath; 00282 vtkCollection *Readers; 00283 00284 // DataArraySelection for Patch / Region Data 00285 vtkDataArraySelection *PatchDataArraySelection; 00286 vtkDataArraySelection *CellDataArraySelection; 00287 vtkDataArraySelection *PointDataArraySelection; 00288 vtkDataArraySelection *LagrangianDataArraySelection; 00289 00290 // old selection status 00291 unsigned long int PatchSelectionMTimeOld; 00292 unsigned long int CellSelectionMTimeOld; 00293 unsigned long int PointSelectionMTimeOld; 00294 unsigned long int LagrangianSelectionMTimeOld; 00295 00296 // preserved old information 00297 vtkStdString *FileNameOld; 00298 int ListTimeStepsByControlDictOld; 00299 int CreateCellToPointOld; 00300 int DecomposePolyhedraOld; 00301 int PositionsIsIn13FormatOld; 00302 int AddDimensionsToArrayNamesOld; 00303 int ReadZonesOld; 00304 00305 // paths to Lagrangians 00306 vtkStringArray *LagrangianPaths; 00307 00308 // number of reader instances 00309 int NumberOfReaders; 00310 // index of the active reader 00311 int CurrentReaderIndex; 00312 00313 vtkOpenFOAMReader(); 00314 ~vtkOpenFOAMReader(); 00315 int RequestInformation(vtkInformation *, vtkInformationVector **, 00316 vtkInformationVector *); 00317 int RequestData(vtkInformation *, vtkInformationVector **, 00318 vtkInformationVector *); 00319 00320 void CreateCasePath(vtkStdString &, vtkStdString &); 00321 void SetTimeInformation(vtkInformationVector *, vtkDoubleArray *); 00322 void CreateCharArrayFromString(vtkCharArray *, const char *, vtkStdString &); 00323 void UpdateStatus(); 00324 void UpdateProgress(double); 00325 00326 private: 00327 vtkOpenFOAMReader *Parent; 00328 00329 vtkOpenFOAMReader(const vtkOpenFOAMReader&); // Not implemented. 00330 void operator=(const vtkOpenFOAMReader&); // Not implemented. 00331 00332 int GetNumberOfSelectionArrays(vtkDataArraySelection *); 00333 int GetSelectionArrayStatus(vtkDataArraySelection *, const char *); 00334 void SetSelectionArrayStatus(vtkDataArraySelection *, const char *, int); 00335 const char *GetSelectionArrayName(vtkDataArraySelection *, int); 00336 void DisableAllSelectionArrays(vtkDataArraySelection *); 00337 void EnableAllSelectionArrays(vtkDataArraySelection *); 00338 00339 void AddSelectionNames(vtkDataArraySelection *, vtkStringArray *); 00340 }; 00341 00342 #endif