Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

320 lines
10 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkGenericEnSightReader.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkGenericEnSightReader - class to read any type of EnSight files
// .SECTION Description
// The class vtkGenericEnSightReader allows the user to read an EnSight data
// set without a priori knowledge of what type of EnSight data set it is.
#ifndef __vtkGenericEnSightReader_h
#define __vtkGenericEnSightReader_h
#include "vtkDataSetSource.h"
class vtkCallbackCommand;
class vtkDataArrayCollection;
class vtkDataArraySelection;
class vtkIdListCollection;
//BTX
class TranslationTableType;
//ETX
class VTK_IO_EXPORT vtkGenericEnSightReader : public vtkDataSetSource
{
public:
static vtkGenericEnSightReader *New();
vtkTypeRevisionMacro(vtkGenericEnSightReader, vtkDataSetSource);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Set/Get the Case file name.
void SetCaseFileName(const char* fileName);
vtkGetStringMacro(CaseFileName);
// Description:
// Set/Get the file path.
vtkSetStringMacro(FilePath);
vtkGetStringMacro(FilePath);
virtual void Update();
virtual void ExecuteInformation();
// Description:
// Get the number of variables listed in the case file.
vtkGetMacro(NumberOfVariables, int);
vtkGetMacro(NumberOfComplexVariables, int);
// Description:
// Get the number of variables of a particular type.
int GetNumberOfVariables(int type); // returns -1 if unknown type specified
vtkGetMacro(NumberOfScalarsPerNode, int);
vtkGetMacro(NumberOfVectorsPerNode, int);
vtkGetMacro(NumberOfTensorsSymmPerNode, int);
vtkGetMacro(NumberOfScalarsPerElement, int);
vtkGetMacro(NumberOfVectorsPerElement, int);
vtkGetMacro(NumberOfTensorsSymmPerElement, int);
vtkGetMacro(NumberOfScalarsPerMeasuredNode, int);
vtkGetMacro(NumberOfVectorsPerMeasuredNode, int);
vtkGetMacro(NumberOfComplexScalarsPerNode, int);
vtkGetMacro(NumberOfComplexVectorsPerNode, int);
vtkGetMacro(NumberOfComplexScalarsPerElement, int);
vtkGetMacro(NumberOfComplexVectorsPerElement, int);
// Description:
// Get the nth description for a non-complex variable.
const char* GetDescription(int n);
// Description:
// Get the nth description for a complex variable.
const char* GetComplexDescription(int n);
// Description:
// Get the nth description of a particular variable type. Returns NULL if no
// variable of this type exists in this data set.
// SCALAR_PER_NODE = 0; VECTOR_PER_NODE = 1;
// TENSOR_SYMM_PER_NODE = 2; SCALAR_PER_ELEMENT = 3;
// VECTOR_PER_ELEMENT = 4; TENSOR_SYMM_PER_ELEMENT = 5;
// SCALAR_PER_MEASURED_NODE = 6; VECTOR_PER_MEASURED_NODE = 7;
// COMPLEX_SCALAR_PER_NODE = 8; COMPLEX_VECTOR_PER_NODE 9;
// COMPLEX_SCALAR_PER_ELEMENT = 10; COMPLEX_VECTOR_PER_ELEMENT = 11
const char* GetDescription(int n, int type);
// Description:
// Get the variable type of variable n.
int GetVariableType(int n);
int GetComplexVariableType(int n);
// Description:
// Set/Get the time value at which to get the value.
virtual void SetTimeValue(float value);
vtkGetMacro(TimeValue, float);
// Description:
// Get the minimum or maximum time value for this data set.
vtkGetMacro(MinimumTimeValue, float);
vtkGetMacro(MaximumTimeValue, float);
// Description:
// Get the time values per time set
vtkGetObjectMacro(TimeSets, vtkDataArrayCollection);
// Description:
// Reads the FORMAT part of the case file to determine whether this is an
// EnSight6 or EnSightGold data set. Returns 0 if the format is EnSight6,
// 1 if it is EnSightGold, and -1 otherwise (meaning an error occurred).
int DetermineEnSightVersion();
// Description:
// Set/get the flag for whether to read all the variables
vtkBooleanMacro(ReadAllVariables, int);
vtkSetMacro(ReadAllVariables, int);
vtkGetMacro(ReadAllVariables, int);
// Description:
// Get the data array selection tables used to configure which data
// arrays are loaded by the reader.
vtkGetObjectMacro(PointDataArraySelection, vtkDataArraySelection);
vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
// Description:
// Get the number of point or cell arrays available in the input.
int GetNumberOfPointArrays();
int GetNumberOfCellArrays();
// Description:
// Get the name of the point or cell array with the given index in
// the input.
const char* GetPointArrayName(int index);
const char* GetCellArrayName(int index);
// Description:
// Get/Set whether the point or cell array with the given name is to
// be read.
int GetPointArrayStatus(const char* name);
int GetCellArrayStatus(const char* name);
void SetPointArrayStatus(const char* name, int status);
void SetCellArrayStatus(const char* name, int status);
//BTX
enum FileTypes
{
ENSIGHT_6 = 0,
ENSIGHT_6_BINARY = 1,
ENSIGHT_GOLD = 2,
ENSIGHT_GOLD_BINARY = 3,
ENSIGHT_MASTER_SERVER = 4
};
//ETX
// Description:
// Set the byte order of the file (remember, more Unix workstations
// write big endian whereas PCs write little endian). Default is
// big endian (since most older PLOT3D files were written by
// workstations).
void SetByteOrderToBigEndian();
void SetByteOrderToLittleEndian();
vtkSetMacro(ByteOrder, int);
vtkGetMacro(ByteOrder, int);
const char *GetByteOrderAsString();
//BTX
enum
{
FILE_BIG_ENDIAN=0,
FILE_LITTLE_ENDIAN=1,
FILE_UNKNOWN_ENDIAN=2
};
//ETX
protected:
vtkGenericEnSightReader();
~vtkGenericEnSightReader();
void Execute();
// Description:
// Internal function to read in a line up to 256 characters.
// Returns zero if there was an error.
int ReadLine(char result[256]);
// Description:
// Internal function to read up to 80 characters from a binary file.
// Returns zero if there was an error.
int ReadBinaryLine(char result[80]);
// Internal function that skips blank lines and reads the 1st
// non-blank line it finds (up to 256 characters).
// Returns 0 is there was an error.
int ReadNextDataLine(char result[256]);
// Description:
// Set/Get the geometry file name.
vtkSetStringMacro(GeometryFileName);
vtkGetStringMacro(GeometryFileName);
// Description:
// Add a variable description to the appropriate array.
void AddVariableDescription(const char* description);
void AddComplexVariableDescription(const char* description);
// Description:
// Add a variable type to the appropriate array.
void AddVariableType(int variableType);
void AddComplexVariableType(int variableType);
// Description:
// Replace the wildcards in the geometry file name with appropriate filename
// numbers as specified in the time set or file set.
void ReplaceWildcards(char* fileName, int timeSet, int fileSet);
void ReplaceWildcardsHelper(char* fileName, int num);
// Callback registered with the SelectionObserver.
static void SelectionModifiedCallback(vtkObject* caller, unsigned long eid,
void* clientdata, void* calldata);
void SelectionModified();
// Utility to create argument for vtkDataArraySelection::SetArrays.
char** CreateStringArray(int numStrings);
void DestroyStringArray(int numStrings, char** strings);
// Fill the vtkDataArraySelection objects with the current set of
// EnSight variables.
void SetDataArraySelectionSetsFromVariables();
// Fill the vtkDataArraySelection objects with the current set of
// arrays in the internal EnSight reader.
void SetDataArraySelectionSetsFromReader();
// Fill the internal EnSight reader's vtkDataArraySelection objects
// from those in this object.
void SetReaderDataArraySelectionSetsFromSelf();
istream* IS;
FILE *IFile;
vtkGenericEnSightReader *Reader;
char* CaseFileName;
char* GeometryFileName;
char* FilePath;
// array of types (one entry per instance of variable type in case file)
int* VariableTypes;
int* ComplexVariableTypes;
// pointers to lists of descriptions
char** VariableDescriptions;
char** ComplexVariableDescriptions;
int NumberOfVariables;
int NumberOfComplexVariables;
// number of file names / descriptions per type
int NumberOfScalarsPerNode;
int NumberOfVectorsPerNode;
int NumberOfTensorsSymmPerNode;
int NumberOfScalarsPerElement;
int NumberOfVectorsPerElement;
int NumberOfTensorsSymmPerElement;
int NumberOfScalarsPerMeasuredNode;
int NumberOfVectorsPerMeasuredNode;
int NumberOfComplexScalarsPerNode;
int NumberOfComplexVectorsPerNode;
int NumberOfComplexScalarsPerElement;
int NumberOfComplexVectorsPerElement;
float TimeValue;
float MinimumTimeValue;
float MaximumTimeValue;
// Flag for whether TimeValue has been set.
int TimeValueInitialized;
vtkDataArrayCollection *TimeSets;
virtual void SetTimeSets(vtkDataArrayCollection*);
int ReadAllVariables;
int ByteOrder;
// The EnSight file version being read. Valid after
// UpdateInformation. Value is -1 for unknown version.
int EnSightVersion;
// The array selections. These map over the variables and complex
// variables to hide the details of EnSight behind VTK terminology.
vtkDataArraySelection* PointDataArraySelection;
vtkDataArraySelection* CellDataArraySelection;
// The observer to modify this object when the array selections are
// modified.
vtkCallbackCommand* SelectionObserver;
// Whether the SelectionModified callback should invoke Modified.
// This is used when we are copying to/from the internal reader.
int SelectionModifiedDoNotCallModified;
// Insert a partId and return the 'realId' that should be used.
int InsertNewPartId(int partId);
//BTX
// Wrapper around an stl map
TranslationTableType *TranslationTable;
//ETX
private:
vtkGenericEnSightReader(const vtkGenericEnSightReader&); // Not implemented.
void operator=(const vtkGenericEnSightReader&); // Not implemented.
};
#endif