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 //BTX 00247 int MakeInformationVector(vtkInformationVector *, const vtkStdString &); 00248 //ETX 00249 bool SetTimeValue(const double); 00250 vtkDoubleArray *GetTimeValues(); 00251 int MakeMetaDataAtTimeStep(const bool); 00252 00253 //BTX 00254 friend class vtkOpenFOAMReaderPrivate; 00255 //ETX 00256 00257 protected: 00258 // refresh flag 00259 bool Refresh; 00260 00261 // for creating cell-to-point translated data 00262 int CreateCellToPoint; 00263 00264 // for caching mesh 00265 int CacheMesh; 00266 00267 // for decomposing polyhedra on-the-fly 00268 int DecomposePolyhedra; 00269 00270 // for reading old binary lagrangian/positions format 00271 int PositionsIsIn13Format; 00272 00273 // for reading point/face/cell-Zones 00274 int ReadZones; 00275 00276 // determine if time directories are listed according to controlDict 00277 int ListTimeStepsByControlDict; 00278 00279 // add dimensions to array names 00280 int AddDimensionsToArrayNames; 00281 00282 char *FileName; 00283 vtkCharArray *CasePath; 00284 vtkCollection *Readers; 00285 00286 // DataArraySelection for Patch / Region Data 00287 vtkDataArraySelection *PatchDataArraySelection; 00288 vtkDataArraySelection *CellDataArraySelection; 00289 vtkDataArraySelection *PointDataArraySelection; 00290 vtkDataArraySelection *LagrangianDataArraySelection; 00291 00292 // old selection status 00293 unsigned long int PatchSelectionMTimeOld; 00294 unsigned long int CellSelectionMTimeOld; 00295 unsigned long int PointSelectionMTimeOld; 00296 unsigned long int LagrangianSelectionMTimeOld; 00297 00298 // preserved old information 00299 vtkStdString *FileNameOld; 00300 int ListTimeStepsByControlDictOld; 00301 int CreateCellToPointOld; 00302 int DecomposePolyhedraOld; 00303 int PositionsIsIn13FormatOld; 00304 int AddDimensionsToArrayNamesOld; 00305 int ReadZonesOld; 00306 00307 // paths to Lagrangians 00308 vtkStringArray *LagrangianPaths; 00309 00310 // number of reader instances 00311 int NumberOfReaders; 00312 // index of the active reader 00313 int CurrentReaderIndex; 00314 00315 vtkOpenFOAMReader(); 00316 ~vtkOpenFOAMReader(); 00317 int RequestInformation(vtkInformation *, vtkInformationVector **, 00318 vtkInformationVector *); 00319 int RequestData(vtkInformation *, vtkInformationVector **, 00320 vtkInformationVector *); 00321 00322 void CreateCasePath(vtkStdString &, vtkStdString &); 00323 void SetTimeInformation(vtkInformationVector *, vtkDoubleArray *); 00324 void CreateCharArrayFromString(vtkCharArray *, const char *, vtkStdString &); 00325 void UpdateStatus(); 00326 void UpdateProgress(double); 00327 00328 private: 00329 vtkOpenFOAMReader *Parent; 00330 00331 vtkOpenFOAMReader(const vtkOpenFOAMReader&); // Not implemented. 00332 void operator=(const vtkOpenFOAMReader&); // Not implemented. 00333 00334 int GetNumberOfSelectionArrays(vtkDataArraySelection *); 00335 int GetSelectionArrayStatus(vtkDataArraySelection *, const char *); 00336 void SetSelectionArrayStatus(vtkDataArraySelection *, const char *, int); 00337 const char *GetSelectionArrayName(vtkDataArraySelection *, int); 00338 void DisableAllSelectionArrays(vtkDataArraySelection *); 00339 void EnableAllSelectionArrays(vtkDataArraySelection *); 00340 00341 void AddSelectionNames(vtkDataArraySelection *, vtkStringArray *); 00342 }; 00343 00344 #endif