VTK
dox/IO/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 "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