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 "vtkMultiBlockDataSetAlgorithm.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 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); 
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   
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   
00171 
00173 
00176   void SetByteOrderToBigEndian();
00177   void SetByteOrderToLittleEndian();
00178   vtkSetMacro(ByteOrder, int);
00179   vtkGetMacro(ByteOrder, int);
00180   const char *GetByteOrderAsString();
00182 
00183 
00184   enum 
00185   {
00186     FILE_BIG_ENDIAN=0,
00187     FILE_LITTLE_ENDIAN=1,
00188     FILE_UNKNOWN_ENDIAN=2
00189   };
00190 
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   
00233   
00234   
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   void ReplaceWildcards(char* fileName, int timeSet, int fileSet);
00258   void ReplaceWildcardsHelper(char* fileName, int num);
00260   
00261   
00262   static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
00263                                         void* clientdata, void* calldata);
00264   void SelectionModified();
00265   
00266   
00267   char** CreateStringArray(int numStrings);
00268   void DestroyStringArray(int numStrings, char** strings);
00269 
00270   
00271   
00272   void SetDataArraySelectionSetsFromVariables();
00273   
00274   
00275   
00276   void SetDataArraySelectionSetsFromReader();
00277   
00278   
00279   
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   
00291   int* VariableTypes;
00292   int* ComplexVariableTypes;
00293   
00294   
00295   char** VariableDescriptions;
00296   char** ComplexVariableDescriptions;
00297   
00298   int NumberOfVariables;
00299   int NumberOfComplexVariables;
00300   
00301   
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   
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   
00331   
00332   int EnSightVersion;
00333   
00334   
00335   
00336   vtkDataArraySelection* PointDataArraySelection;
00337   vtkDataArraySelection* CellDataArraySelection;
00338   
00339   
00340   
00341   vtkCallbackCommand* SelectionObserver;
00342   
00343   
00344   
00345   int SelectionModifiedDoNotCallModified;
00346 
00347   
00348   int InsertNewPartId(int partId);
00349 
00350 
00351   
00352   TranslationTableType *TranslationTable;
00353 
00354 
00355 private:
00356   vtkGenericEnSightReader(const vtkGenericEnSightReader&);  
00357   void operator=(const vtkGenericEnSightReader&);  
00358 };
00359 
00360 #endif