VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkGenericEnSightReader.h 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 vtkTypeMacro(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(int quiet=0); 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 00214 static int CanReadFile(const char *casefilename); 00215 00216 protected: 00217 vtkGenericEnSightReader(); 00218 ~vtkGenericEnSightReader(); 00219 00220 virtual int FillOutputPortInformation(int port, vtkInformation* info); 00221 virtual int RequestInformation(vtkInformation*, 00222 vtkInformationVector**, 00223 vtkInformationVector*); 00224 virtual int RequestData(vtkInformation*, 00225 vtkInformationVector**, 00226 vtkInformationVector*); 00227 00230 int ReadLine(char result[256]); 00231 00234 int ReadBinaryLine(char result[80]); 00235 00236 // Internal function that skips blank lines and reads the 1st 00237 // non-blank line it finds (up to 256 characters). 00238 // Returns 0 is there was an error. 00239 int ReadNextDataLine(char result[256]); 00240 00242 00243 vtkSetStringMacro(GeometryFileName); 00245 00247 00248 void AddVariableDescription(const char* description); 00249 void AddComplexVariableDescription(const char* description); 00251 00253 00254 void AddVariableType(int variableType); 00255 void AddComplexVariableType(int variableType); 00257 00259 00261 int ReplaceWildcards(char* fileName, int timeSet, int fileSet); 00262 void ReplaceWildcardsHelper(char* fileName, int num); 00264 00265 // Callback registered with the SelectionObserver. 00266 static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid, 00267 void* clientdata, void* calldata); 00268 void SelectionModified(); 00269 00270 // Utility to create argument for vtkDataArraySelection::SetArrays. 00271 char** CreateStringArray(int numStrings); 00272 void DestroyStringArray(int numStrings, char** strings); 00273 00274 // Fill the vtkDataArraySelection objects with the current set of 00275 // EnSight variables. 00276 void SetDataArraySelectionSetsFromVariables(); 00277 00278 // Fill the vtkDataArraySelection objects with the current set of 00279 // arrays in the internal EnSight reader. 00280 void SetDataArraySelectionSetsFromReader(); 00281 00282 // Fill the internal EnSight reader's vtkDataArraySelection objects 00283 // from those in this object. 00284 void SetReaderDataArraySelectionSetsFromSelf(); 00285 00286 istream* IS; 00287 FILE *IFile; 00288 vtkGenericEnSightReader *Reader; 00289 00290 char* CaseFileName; 00291 char* GeometryFileName; 00292 char* FilePath; 00293 00294 // array of types (one entry per instance of variable type in case file) 00295 int* VariableTypes; 00296 int* ComplexVariableTypes; 00297 00298 // pointers to lists of descriptions 00299 char** VariableDescriptions; 00300 char** ComplexVariableDescriptions; 00301 00302 int NumberOfVariables; 00303 int NumberOfComplexVariables; 00304 00305 // number of file names / descriptions per type 00306 int NumberOfScalarsPerNode; 00307 int NumberOfVectorsPerNode; 00308 int NumberOfTensorsSymmPerNode; 00309 int NumberOfScalarsPerElement; 00310 int NumberOfVectorsPerElement; 00311 int NumberOfTensorsSymmPerElement; 00312 int NumberOfScalarsPerMeasuredNode; 00313 int NumberOfVectorsPerMeasuredNode; 00314 int NumberOfComplexScalarsPerNode; 00315 int NumberOfComplexVectorsPerNode; 00316 int NumberOfComplexScalarsPerElement; 00317 int NumberOfComplexVectorsPerElement; 00318 00319 float TimeValue; 00320 float MinimumTimeValue; 00321 float MaximumTimeValue; 00322 00323 // Flag for whether TimeValue has been set. 00324 int TimeValueInitialized; 00325 00326 vtkDataArrayCollection *TimeSets; 00327 virtual void SetTimeSets(vtkDataArrayCollection*); 00328 00329 int ReadAllVariables; 00330 00331 int ByteOrder; 00332 int ParticleCoordinatesByIndex; 00333 00334 // The EnSight file version being read. Valid after 00335 // UpdateInformation. Value is -1 for unknown version. 00336 int EnSightVersion; 00337 00338 // The array selections. These map over the variables and complex 00339 // variables to hide the details of EnSight behind VTK terminology. 00340 vtkDataArraySelection* PointDataArraySelection; 00341 vtkDataArraySelection* CellDataArraySelection; 00342 00343 // The observer to modify this object when the array selections are 00344 // modified. 00345 vtkCallbackCommand* SelectionObserver; 00346 00347 // Whether the SelectionModified callback should invoke Modified. 00348 // This is used when we are copying to/from the internal reader. 00349 int SelectionModifiedDoNotCallModified; 00350 00351 // Insert a partId and return the 'realId' that should be used. 00352 int InsertNewPartId(int partId); 00353 00354 //BTX 00355 // Wrapper around an stl map 00356 TranslationTableType *TranslationTable; 00357 //ETX 00358 00359 private: 00360 vtkGenericEnSightReader(const vtkGenericEnSightReader&); // Not implemented. 00361 void operator=(const vtkGenericEnSightReader&); // Not implemented. 00362 }; 00363 00364 #endif