• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/IO/vtkGenericEnSightReader.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkGenericEnSightReader.h,v $
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 =========================================================================*/
00025 #ifndef __vtkGenericEnSightReader_h
00026 #define __vtkGenericEnSightReader_h
00027 
00028 #include "vtkMultiBlockDataSetAlgorithm.h"
00029 
00030 class vtkCallbackCommand;
00031 class vtkDataArrayCollection;
00032 class vtkDataArraySelection;
00033 class vtkIdListCollection;
00034 //BTX
00035 class TranslationTableType;
00036 //ETX
00037 
00038 class VTK_IO_EXPORT vtkGenericEnSightReader : public vtkMultiBlockDataSetAlgorithm
00039 {
00040 public:
00041   static vtkGenericEnSightReader *New();
00042   vtkTypeRevisionMacro(vtkGenericEnSightReader, vtkMultiBlockDataSetAlgorithm);
00043   void PrintSelf(ostream& os, vtkIndent indent);
00044 
00046 
00047   void SetCaseFileName(const char* fileName);
00048   vtkGetStringMacro(CaseFileName);
00050 
00052 
00053   vtkSetStringMacro(FilePath);
00054   vtkGetStringMacro(FilePath);
00056   
00058 
00059   vtkGetMacro(NumberOfVariables, int);
00060   vtkGetMacro(NumberOfComplexVariables, int);
00062 
00064 
00065   int GetNumberOfVariables(int type); // returns -1 if unknown type specified
00066   vtkGetMacro(NumberOfScalarsPerNode, int);
00067   vtkGetMacro(NumberOfVectorsPerNode, int);
00068   vtkGetMacro(NumberOfTensorsSymmPerNode, int);
00069   vtkGetMacro(NumberOfScalarsPerElement, int);
00070   vtkGetMacro(NumberOfVectorsPerElement, int);
00071   vtkGetMacro(NumberOfTensorsSymmPerElement, int);
00072   vtkGetMacro(NumberOfScalarsPerMeasuredNode, int);
00073   vtkGetMacro(NumberOfVectorsPerMeasuredNode, int);
00074   vtkGetMacro(NumberOfComplexScalarsPerNode, int);
00075   vtkGetMacro(NumberOfComplexVectorsPerNode, int);
00076   vtkGetMacro(NumberOfComplexScalarsPerElement, int);
00077   vtkGetMacro(NumberOfComplexVectorsPerElement, int);
00079 
00081   const char* GetDescription(int n);
00082   
00084   const char* GetComplexDescription(int n);
00085   
00094   const char* GetDescription(int n, int type);
00095   
00097 
00098   int GetVariableType(int n);
00099   int GetComplexVariableType(int n);
00101   
00103 
00104   virtual void SetTimeValue(float value);
00105   vtkGetMacro(TimeValue, float);
00107 
00109 
00110   vtkGetMacro(MinimumTimeValue, float);
00111   vtkGetMacro(MaximumTimeValue, float);
00113   
00115 
00116   vtkGetObjectMacro(TimeSets, vtkDataArrayCollection);
00118 
00123   int DetermineEnSightVersion();
00124 
00126 
00127   vtkBooleanMacro(ReadAllVariables, int);
00128   vtkSetMacro(ReadAllVariables, int);
00129   vtkGetMacro(ReadAllVariables, int);
00131   
00133 
00135   vtkGetObjectMacro(PointDataArraySelection, vtkDataArraySelection);
00136   vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
00138   
00140 
00141   int GetNumberOfPointArrays();
00142   int GetNumberOfCellArrays();
00144   
00146 
00148   const char* GetPointArrayName(int index);
00149   const char* GetCellArrayName(int index);
00151   
00153 
00155   int GetPointArrayStatus(const char* name);
00156   int GetCellArrayStatus(const char* name);
00157   void SetPointArrayStatus(const char* name, int status);  
00158   void SetCellArrayStatus(const char* name, int status);  
00160   
00161   //BTX
00162   enum FileTypes
00163   {
00164     ENSIGHT_6             = 0,
00165     ENSIGHT_6_BINARY      = 1,
00166     ENSIGHT_GOLD          = 2,
00167     ENSIGHT_GOLD_BINARY   = 3,
00168     ENSIGHT_MASTER_SERVER = 4
00169   };
00170   //ETX
00171 
00173 
00176   void SetByteOrderToBigEndian();
00177   void SetByteOrderToLittleEndian();
00178   vtkSetMacro(ByteOrder, int);
00179   vtkGetMacro(ByteOrder, int);
00180   const char *GetByteOrderAsString();
00182 
00183 //BTX
00184   enum 
00185   {
00186     FILE_BIG_ENDIAN=0,
00187     FILE_LITTLE_ENDIAN=1,
00188     FILE_UNKNOWN_ENDIAN=2
00189   };
00190 //ETX
00191 
00193 
00195   vtkGetStringMacro(GeometryFileName);
00197 
00199 
00207   vtkSetMacro(ParticleCoordinatesByIndex, int);
00208   vtkGetMacro(ParticleCoordinatesByIndex, int);
00209   vtkBooleanMacro(ParticleCoordinatesByIndex, int);
00211 
00212 protected:
00213   vtkGenericEnSightReader();
00214   ~vtkGenericEnSightReader();
00215 
00216   virtual int FillOutputPortInformation(int port, vtkInformation* info);
00217   virtual int RequestInformation(vtkInformation*, 
00218                                  vtkInformationVector**, 
00219                                  vtkInformationVector*);
00220   virtual int RequestData(vtkInformation*, 
00221                           vtkInformationVector**, 
00222                           vtkInformationVector*);
00223   
00226   int ReadLine(char result[256]);
00227 
00230   int ReadBinaryLine(char result[80]);
00231   
00232   // Internal function that skips blank lines and reads the 1st
00233   // non-blank line it finds (up to 256 characters).
00234   // Returns 0 is there was an error.
00235   int ReadNextDataLine(char result[256]);
00236 
00238 
00239   vtkSetStringMacro(GeometryFileName);
00241   
00243 
00244   void AddVariableDescription(const char* description);
00245   void AddComplexVariableDescription(const char* description);
00247 
00249 
00250   void AddVariableType(int variableType); 
00251   void AddComplexVariableType(int variableType);
00253 
00255 
00257   int  ReplaceWildcards(char* fileName, int timeSet, int fileSet);    
00258   void ReplaceWildcardsHelper(char* fileName, int num);
00260   
00261   // Callback registered with the SelectionObserver.
00262   static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
00263                                         void* clientdata, void* calldata);
00264   void SelectionModified();
00265   
00266   // Utility to create argument for vtkDataArraySelection::SetArrays.
00267   char** CreateStringArray(int numStrings);
00268   void DestroyStringArray(int numStrings, char** strings);
00269 
00270   // Fill the vtkDataArraySelection objects with the current set of
00271   // EnSight variables.
00272   void SetDataArraySelectionSetsFromVariables();
00273   
00274   // Fill the vtkDataArraySelection objects with the current set of
00275   // arrays in the internal EnSight reader.
00276   void SetDataArraySelectionSetsFromReader();
00277   
00278   // Fill the internal EnSight reader's vtkDataArraySelection objects
00279   // from those in this object.
00280   void SetReaderDataArraySelectionSetsFromSelf();
00281   
00282   istream* IS;
00283   FILE *IFile;
00284   vtkGenericEnSightReader *Reader;
00285   
00286   char* CaseFileName;
00287   char* GeometryFileName;
00288   char* FilePath;
00289 
00290   // array of types (one entry per instance of variable type in case file)
00291   int* VariableTypes;
00292   int* ComplexVariableTypes;
00293   
00294   // pointers to lists of descriptions
00295   char** VariableDescriptions;
00296   char** ComplexVariableDescriptions;
00297   
00298   int NumberOfVariables;
00299   int NumberOfComplexVariables;
00300   
00301   // number of file names / descriptions per type
00302   int NumberOfScalarsPerNode;
00303   int NumberOfVectorsPerNode;
00304   int NumberOfTensorsSymmPerNode;
00305   int NumberOfScalarsPerElement;
00306   int NumberOfVectorsPerElement;
00307   int NumberOfTensorsSymmPerElement;
00308   int NumberOfScalarsPerMeasuredNode;
00309   int NumberOfVectorsPerMeasuredNode;
00310   int NumberOfComplexScalarsPerNode;
00311   int NumberOfComplexVectorsPerNode;  
00312   int NumberOfComplexScalarsPerElement;
00313   int NumberOfComplexVectorsPerElement;
00314   
00315   float TimeValue;
00316   float MinimumTimeValue;
00317   float MaximumTimeValue;
00318   
00319   // Flag for whether TimeValue has been set.
00320   int TimeValueInitialized;
00321   
00322   vtkDataArrayCollection *TimeSets;
00323   virtual void SetTimeSets(vtkDataArrayCollection*);
00324 
00325   int ReadAllVariables;
00326 
00327   int ByteOrder;
00328   int ParticleCoordinatesByIndex;
00329   
00330   // The EnSight file version being read.  Valid after
00331   // UpdateInformation.  Value is -1 for unknown version.
00332   int EnSightVersion;
00333   
00334   // The array selections.  These map over the variables and complex
00335   // variables to hide the details of EnSight behind VTK terminology.
00336   vtkDataArraySelection* PointDataArraySelection;
00337   vtkDataArraySelection* CellDataArraySelection;
00338   
00339   // The observer to modify this object when the array selections are
00340   // modified.
00341   vtkCallbackCommand* SelectionObserver;
00342   
00343   // Whether the SelectionModified callback should invoke Modified.
00344   // This is used when we are copying to/from the internal reader.
00345   int SelectionModifiedDoNotCallModified;
00346 
00347   // Insert a partId and return the 'realId' that should be used.
00348   int InsertNewPartId(int partId);
00349 
00350 //BTX
00351   // Wrapper around an stl map
00352   TranslationTableType *TranslationTable;
00353 //ETX
00354 
00355 private:
00356   vtkGenericEnSightReader(const vtkGenericEnSightReader&);  // Not implemented.
00357   void operator=(const vtkGenericEnSightReader&);  // Not implemented.
00358 };
00359 
00360 #endif

Generated by  doxygen 1.7.1