00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
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 TranslationTableType;
00036 
00037 
00038 class VTK_IO_EXPORT vtkGenericEnSightReader : public vtkDataSetSource
00039 {
00040 public:
00041   static vtkGenericEnSightReader *New();
00042   vtkTypeRevisionMacro(vtkGenericEnSightReader, vtkDataSetSource);
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   
00057   virtual void Update();
00058   virtual void ExecuteInformation();
00059   
00061 
00062   vtkGetMacro(NumberOfVariables, int);
00063   vtkGetMacro(NumberOfComplexVariables, int);
00065 
00067 
00068   int GetNumberOfVariables(int type); 
00069   vtkGetMacro(NumberOfScalarsPerNode, int);
00070   vtkGetMacro(NumberOfVectorsPerNode, int);
00071   vtkGetMacro(NumberOfTensorsSymmPerNode, int);
00072   vtkGetMacro(NumberOfScalarsPerElement, int);
00073   vtkGetMacro(NumberOfVectorsPerElement, int);
00074   vtkGetMacro(NumberOfTensorsSymmPerElement, int);
00075   vtkGetMacro(NumberOfScalarsPerMeasuredNode, int);
00076   vtkGetMacro(NumberOfVectorsPerMeasuredNode, int);
00077   vtkGetMacro(NumberOfComplexScalarsPerNode, int);
00078   vtkGetMacro(NumberOfComplexVectorsPerNode, int);
00079   vtkGetMacro(NumberOfComplexScalarsPerElement, int);
00080   vtkGetMacro(NumberOfComplexVectorsPerElement, int);
00082 
00084   const char* GetDescription(int n);
00085   
00087   const char* GetComplexDescription(int n);
00088   
00097   const char* GetDescription(int n, int type);
00098   
00100 
00101   int GetVariableType(int n);
00102   int GetComplexVariableType(int n);
00104   
00106 
00107   virtual void SetTimeValue(float value);
00108   vtkGetMacro(TimeValue, float);
00110 
00112 
00113   vtkGetMacro(MinimumTimeValue, float);
00114   vtkGetMacro(MaximumTimeValue, float);
00116   
00118 
00119   vtkGetObjectMacro(TimeSets, vtkDataArrayCollection);
00121 
00126   int DetermineEnSightVersion();
00127 
00129 
00130   vtkBooleanMacro(ReadAllVariables, int);
00131   vtkSetMacro(ReadAllVariables, int);
00132   vtkGetMacro(ReadAllVariables, int);
00134   
00136 
00138   vtkGetObjectMacro(PointDataArraySelection, vtkDataArraySelection);
00139   vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
00141   
00143 
00144   int GetNumberOfPointArrays();
00145   int GetNumberOfCellArrays();
00147   
00149 
00151   const char* GetPointArrayName(int index);
00152   const char* GetCellArrayName(int index);
00154   
00156 
00158   int GetPointArrayStatus(const char* name);
00159   int GetCellArrayStatus(const char* name);
00160   void SetPointArrayStatus(const char* name, int status);  
00161   void SetCellArrayStatus(const char* name, int status);  
00163   
00164   
00165   enum FileTypes
00166   {
00167     ENSIGHT_6             = 0,
00168     ENSIGHT_6_BINARY      = 1,
00169     ENSIGHT_GOLD          = 2,
00170     ENSIGHT_GOLD_BINARY   = 3,
00171     ENSIGHT_MASTER_SERVER = 4
00172   };
00173   
00174 
00176 
00179   void SetByteOrderToBigEndian();
00180   void SetByteOrderToLittleEndian();
00181   vtkSetMacro(ByteOrder, int);
00182   vtkGetMacro(ByteOrder, int);
00183   const char *GetByteOrderAsString();
00185 
00186 
00187   enum 
00188   {
00189     FILE_BIG_ENDIAN=0,
00190     FILE_LITTLE_ENDIAN=1,
00191     FILE_UNKNOWN_ENDIAN=2
00192   };
00193 
00194 
00195 protected:
00196   vtkGenericEnSightReader();
00197   ~vtkGenericEnSightReader();
00198 
00199   void Execute();
00200   
00203   int ReadLine(char result[256]);
00204 
00207   int ReadBinaryLine(char result[80]);
00208   
00209   
00210   
00211   
00212   int ReadNextDataLine(char result[256]);
00213 
00215 
00216   vtkSetStringMacro(GeometryFileName);
00217   vtkGetStringMacro(GeometryFileName);
00219   
00221 
00222   void AddVariableDescription(const char* description);
00223   void AddComplexVariableDescription(const char* description);
00225 
00227 
00228   void AddVariableType(int variableType);
00229   void AddComplexVariableType(int variableType);
00231 
00233 
00235   void ReplaceWildcards(char* fileName, int timeSet, int fileSet);
00236   void ReplaceWildcardsHelper(char* fileName, int num);
00238   
00239   
00240   static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
00241                                         void* clientdata, void* calldata);
00242   void SelectionModified();
00243   
00244   
00245   char** CreateStringArray(int numStrings);
00246   void DestroyStringArray(int numStrings, char** strings);
00247 
00248   
00249   
00250   void SetDataArraySelectionSetsFromVariables();
00251   
00252   
00253   
00254   void SetDataArraySelectionSetsFromReader();
00255   
00256   
00257   
00258   void SetReaderDataArraySelectionSetsFromSelf();
00259   
00260   istream* IS;
00261   FILE *IFile;
00262   vtkGenericEnSightReader *Reader;
00263   
00264   char* CaseFileName;
00265   char* GeometryFileName;
00266   char* FilePath;
00267 
00268   
00269   int* VariableTypes;
00270   int* ComplexVariableTypes;
00271   
00272   
00273   char** VariableDescriptions;
00274   char** ComplexVariableDescriptions;
00275   
00276   int NumberOfVariables;
00277   int NumberOfComplexVariables;
00278   
00279   
00280   int NumberOfScalarsPerNode;
00281   int NumberOfVectorsPerNode;
00282   int NumberOfTensorsSymmPerNode;
00283   int NumberOfScalarsPerElement;
00284   int NumberOfVectorsPerElement;
00285   int NumberOfTensorsSymmPerElement;
00286   int NumberOfScalarsPerMeasuredNode;
00287   int NumberOfVectorsPerMeasuredNode;
00288   int NumberOfComplexScalarsPerNode;
00289   int NumberOfComplexVectorsPerNode;  
00290   int NumberOfComplexScalarsPerElement;
00291   int NumberOfComplexVectorsPerElement;
00292   
00293   float TimeValue;
00294   float MinimumTimeValue;
00295   float MaximumTimeValue;
00296   
00297   
00298   int TimeValueInitialized;
00299   
00300   vtkDataArrayCollection *TimeSets;
00301   virtual void SetTimeSets(vtkDataArrayCollection*);
00302 
00303   int ReadAllVariables;
00304 
00305   int ByteOrder;
00306   
00307   
00308   
00309   int EnSightVersion;
00310   
00311   
00312   
00313   vtkDataArraySelection* PointDataArraySelection;
00314   vtkDataArraySelection* CellDataArraySelection;
00315   
00316   
00317   
00318   vtkCallbackCommand* SelectionObserver;
00319   
00320   
00321   
00322   int SelectionModifiedDoNotCallModified;
00323 
00324   
00325   int InsertNewPartId(int partId);
00326 
00327 
00328   
00329   TranslationTableType *TranslationTable;
00330 
00331 
00332 private:
00333   vtkGenericEnSightReader(const vtkGenericEnSightReader&);  
00334   void operator=(const vtkGenericEnSightReader&);  
00335 };
00336 
00337 #endif