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

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 //BTX
00035 class TranslationTableType;
00036 //ETX
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); // returns -1 if unknown type specified
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   //BTX
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   //ETX
00174 
00176 
00179   void SetByteOrderToBigEndian();
00180   void SetByteOrderToLittleEndian();
00181   vtkSetMacro(ByteOrder, int);
00182   vtkGetMacro(ByteOrder, int);
00183   const char *GetByteOrderAsString();
00185 
00186 //BTX
00187   enum 
00188   {
00189     FILE_BIG_ENDIAN=0,
00190     FILE_LITTLE_ENDIAN=1,
00191     FILE_UNKNOWN_ENDIAN=2
00192   };
00193 //ETX
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   // Internal function that skips blank lines and reads the 1st
00210   // non-blank line it finds (up to 256 characters).
00211   // Returns 0 is there was an error.
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   // Callback registered with the SelectionObserver.
00240   static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
00241                                         void* clientdata, void* calldata);
00242   void SelectionModified();
00243   
00244   // Utility to create argument for vtkDataArraySelection::SetArrays.
00245   char** CreateStringArray(int numStrings);
00246   void DestroyStringArray(int numStrings, char** strings);
00247 
00248   // Fill the vtkDataArraySelection objects with the current set of
00249   // EnSight variables.
00250   void SetDataArraySelectionSetsFromVariables();
00251   
00252   // Fill the vtkDataArraySelection objects with the current set of
00253   // arrays in the internal EnSight reader.
00254   void SetDataArraySelectionSetsFromReader();
00255   
00256   // Fill the internal EnSight reader's vtkDataArraySelection objects
00257   // from those in this object.
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   // array of types (one entry per instance of variable type in case file)
00269   int* VariableTypes;
00270   int* ComplexVariableTypes;
00271   
00272   // pointers to lists of descriptions
00273   char** VariableDescriptions;
00274   char** ComplexVariableDescriptions;
00275   
00276   int NumberOfVariables;
00277   int NumberOfComplexVariables;
00278   
00279   // number of file names / descriptions per type
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   // Flag for whether TimeValue has been set.
00298   int TimeValueInitialized;
00299   
00300   vtkDataArrayCollection *TimeSets;
00301   virtual void SetTimeSets(vtkDataArrayCollection*);
00302 
00303   int ReadAllVariables;
00304 
00305   int ByteOrder;
00306   
00307   // The EnSight file version being read.  Valid after
00308   // UpdateInformation.  Value is -1 for unknown version.
00309   int EnSightVersion;
00310   
00311   // The array selections.  These map over the variables and complex
00312   // variables to hide the details of EnSight behind VTK terminology.
00313   vtkDataArraySelection* PointDataArraySelection;
00314   vtkDataArraySelection* CellDataArraySelection;
00315   
00316   // The observer to modify this object when the array selections are
00317   // modified.
00318   vtkCallbackCommand* SelectionObserver;
00319   
00320   // Whether the SelectionModified callback should invoke Modified.
00321   // This is used when we are copying to/from the internal reader.
00322   int SelectionModifiedDoNotCallModified;
00323 
00324   // Insert a partId and return the 'realId' that should be used.
00325   int InsertNewPartId(int partId);
00326 
00327 //BTX
00328   // Wrapper around an stl map
00329   TranslationTableType *TranslationTable;
00330 //ETX
00331 
00332 private:
00333   vtkGenericEnSightReader(const vtkGenericEnSightReader&);  // Not implemented.
00334   void operator=(const vtkGenericEnSightReader&);  // Not implemented.
00335 };
00336 
00337 #endif

Generated on Mon Jan 21 23:07:31 2008 for VTK by  doxygen 1.4.3-20050530