Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

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 "vtkDataSetSource.h"
00029 
00030 class vtkCallbackCommand;
00031 class vtkDataArrayCollection;
00032 class vtkDataArraySelection;
00033 class vtkIdListCollection;
00034 
00035 class VTK_IO_EXPORT vtkGenericEnSightReader : public vtkDataSetSource
00036 {
00037 public:
00038   static vtkGenericEnSightReader *New();
00039   vtkTypeRevisionMacro(vtkGenericEnSightReader, vtkDataSetSource);
00040   void PrintSelf(ostream& os, vtkIndent indent);
00041 
00043 
00044   void SetCaseFileName(const char* fileName);
00045   vtkGetStringMacro(CaseFileName);
00047 
00049 
00050   vtkSetStringMacro(FilePath);
00051   vtkGetStringMacro(FilePath);
00053   
00054   virtual void Update();
00055   virtual void ExecuteInformation();
00056   
00058 
00059   int GetNumberOfVariables() { return this->NumberOfVariables; }
00060   int GetNumberOfComplexVariables() { return this->NumberOfComplexVariables; }
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   char* GetDescription(int n);
00082   
00084   char* GetComplexDescription(int n);
00085   
00094   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   };
00189 //ETX
00190 
00191 protected:
00192   vtkGenericEnSightReader();
00193   ~vtkGenericEnSightReader();
00194 
00195   void Execute();
00196   
00199   int ReadLine(char result[256]);
00200 
00203   int ReadBinaryLine(char result[80]);
00204   
00205   // Internal function that skips blank lines and reads the 1st
00206   // non-blank line it finds (up to 256 characters).
00207   // Returns 0 is there was an error.
00208   int ReadNextDataLine(char result[256]);
00209 
00211 
00212   vtkSetStringMacro(GeometryFileName);
00213   vtkGetStringMacro(GeometryFileName);
00215   
00217 
00218   void AddVariableDescription(char* description);
00219   void AddComplexVariableDescription(char* description);
00221 
00223 
00224   void AddVariableType(int variableType);
00225   void AddComplexVariableType(int variableType);
00227 
00229 
00231   void ReplaceWildcards(char* fileName, int timeSet, int fileSet);
00232   void ReplaceWildcardsHelper(char* fileName, int num);
00234   
00235   // Callback registered with the SelectionObserver.
00236   static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
00237                                         void* clientdata, void* calldata);
00238   void SelectionModified();
00239   
00240   // Utility to create argument for vtkDataArraySelection::SetArrays.
00241   char** CreateStringArray(int numStrings);
00242   void DestroyStringArray(int numStrings, char** strings);
00243 
00244   // Fill the vtkDataArraySelection objects with the current set of
00245   // EnSight variables.
00246   void SetDataArraySelectionSetsFromVariables();
00247   
00248   // Fill the vtkDataArraySelection objects with the current set of
00249   // arrays in the internal EnSight reader.
00250   void SetDataArraySelectionSetsFromReader();
00251   
00252   // Fill the internal EnSight reader's vtkDataArraySelection objects
00253   // from those in this object.
00254   void SetReaderDataArraySelectionSetsFromSelf();
00255   
00256   istream* IS;
00257   FILE *IFile;
00258   vtkGenericEnSightReader *Reader;
00259   
00260   char* CaseFileName;
00261   char* GeometryFileName;
00262   char* FilePath;
00263 
00264   // array of types (one entry per instance of variable type in case file)
00265   int* VariableTypes;
00266   int* ComplexVariableTypes;
00267   
00268   // pointers to lists of descriptions
00269   char** VariableDescriptions;
00270   char** ComplexVariableDescriptions;
00271   
00272   int NumberOfVariables;
00273   int NumberOfComplexVariables;
00274   
00275   // number of file names / descriptions per type
00276   int NumberOfScalarsPerNode;
00277   int NumberOfVectorsPerNode;
00278   int NumberOfTensorsSymmPerNode;
00279   int NumberOfScalarsPerElement;
00280   int NumberOfVectorsPerElement;
00281   int NumberOfTensorsSymmPerElement;
00282   int NumberOfScalarsPerMeasuredNode;
00283   int NumberOfVectorsPerMeasuredNode;
00284   int NumberOfComplexScalarsPerNode;
00285   int NumberOfComplexVectorsPerNode;  
00286   int NumberOfComplexScalarsPerElement;
00287   int NumberOfComplexVectorsPerElement;
00288   
00289   float TimeValue;
00290   float MinimumTimeValue;
00291   float MaximumTimeValue;
00292   
00293   // Flag for whether TimeValue has been set.
00294   int TimeValueInitialized;
00295   
00296   vtkDataArrayCollection *TimeSets;
00297   virtual void SetTimeSets(vtkDataArrayCollection*);
00298 
00299   int ReadAllVariables;
00300 
00301   int ByteOrder;
00302   
00303   // The EnSight file version being read.  Valid after
00304   // UpdateInformation.  Value is -1 for unknown version.
00305   int EnSightVersion;
00306   
00307   // The array selections.  These map over the variables and complex
00308   // variables to hide the details of EnSight behind VTK terminology.
00309   vtkDataArraySelection* PointDataArraySelection;
00310   vtkDataArraySelection* CellDataArraySelection;
00311   
00312   // The observer to modify this object when the array selections are
00313   // modified.
00314   vtkCallbackCommand* SelectionObserver;
00315   
00316   // Whether the SelectionModified callback should invoke Modified.
00317   // This is used when we are copying to/from the internal reader.
00318   int SelectionModifiedDoNotCallModified;
00319   
00320 private:
00321   vtkGenericEnSightReader(const vtkGenericEnSightReader&);  // Not implemented.
00322   void operator=(const vtkGenericEnSightReader&);  // Not implemented.
00323 };
00324 
00325 #endif