VTK
dox/IO/Geometry/vtkOpenFOAMReader.h
Go to the documentation of this file.
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