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