You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
6.3 KiB
C++
230 lines
6.3 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkAVSucdReader.h
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkAVSucdReader
|
|
* @brief reads a dataset in AVS "UCD" format
|
|
*
|
|
* vtkAVSucdReader creates an unstructured grid dataset. It reads binary or
|
|
* ASCII files stored in UCD format, with optional data stored at the nodes
|
|
* or at the cells of the model. A cell-based fielddata stores the material
|
|
* id. The class can automatically detect the endian-ness of the binary files.
|
|
*
|
|
* @par Thanks:
|
|
* Thanks to Guenole Harel and Emmanuel Colin (Supelec engineering school,
|
|
* France) and Jean M. Favre (CSCS, Switzerland) who co-developed this class.
|
|
* Thanks to Isabelle Surin (isabelle.surin at cea.fr, CEA-DAM, France) who
|
|
* supervised the internship of the first two authors. Thanks to Daniel
|
|
* Aguilera (daniel.aguilera at cea.fr, CEA-DAM, France) who contributed code
|
|
* and advice. Please address all comments to Jean Favre (jfavre at cscs.ch)
|
|
*
|
|
* @sa
|
|
* vtkGAMBITReader
|
|
*/
|
|
|
|
#ifndef vtkAVSucdReader_h
|
|
#define vtkAVSucdReader_h
|
|
|
|
#include "vtkIOGeometryModule.h" // For export macro
|
|
#include "vtkUnstructuredGridAlgorithm.h"
|
|
|
|
class vtkIntArray;
|
|
class vtkFloatArray;
|
|
class vtkIdTypeArray;
|
|
class vtkDataArraySelection;
|
|
|
|
class VTKIOGEOMETRY_EXPORT vtkAVSucdReader : public vtkUnstructuredGridAlgorithm
|
|
{
|
|
public:
|
|
static vtkAVSucdReader* New();
|
|
vtkTypeMacro(vtkAVSucdReader, vtkUnstructuredGridAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
//@{
|
|
/**
|
|
* Specify file name of AVS UCD datafile to read
|
|
*/
|
|
vtkSetStringMacro(FileName);
|
|
vtkGetStringMacro(FileName);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Is the file to be read written in binary format (as opposed to ascii).
|
|
*/
|
|
vtkSetMacro(BinaryFile, vtkTypeBool);
|
|
vtkGetMacro(BinaryFile, vtkTypeBool);
|
|
vtkBooleanMacro(BinaryFile, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the total number of cells.
|
|
*/
|
|
vtkGetMacro(NumberOfCells, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the total number of nodes.
|
|
*/
|
|
vtkGetMacro(NumberOfNodes, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the number of data fields at the nodes.
|
|
*/
|
|
vtkGetMacro(NumberOfNodeFields, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the number of data fields at the cell centers.
|
|
*/
|
|
vtkGetMacro(NumberOfCellFields, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the number of data fields for the model. Unused because VTK
|
|
* has no methods for it.
|
|
*/
|
|
vtkGetMacro(NumberOfFields, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the number of data components at the nodes and cells.
|
|
*/
|
|
vtkGetMacro(NumberOfNodeComponents, int);
|
|
vtkGetMacro(NumberOfCellComponents, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the endian-ness of the binary file.
|
|
*/
|
|
void SetByteOrderToBigEndian();
|
|
void SetByteOrderToLittleEndian();
|
|
const char* GetByteOrderAsString();
|
|
//@}
|
|
|
|
vtkSetMacro(ByteOrder, int);
|
|
vtkGetMacro(ByteOrder, int);
|
|
|
|
//@{
|
|
/**
|
|
* The following methods allow selective reading of solutions fields. by
|
|
* default, ALL data fields are the nodes and cells are read, but this can
|
|
* be modified.
|
|
*/
|
|
int GetNumberOfPointArrays();
|
|
int GetNumberOfCellArrays();
|
|
const char* GetPointArrayName(int index);
|
|
const char* GetCellArrayName(int index);
|
|
int GetPointArrayStatus(const char* name);
|
|
int GetCellArrayStatus(const char* name);
|
|
void SetPointArrayStatus(const char* name, int status);
|
|
void SetCellArrayStatus(const char* name, int status);
|
|
//@}
|
|
|
|
void DisableAllCellArrays();
|
|
void EnableAllCellArrays();
|
|
void DisableAllPointArrays();
|
|
void EnableAllPointArrays();
|
|
|
|
// get min and max value for the index-th value of a cell component
|
|
// index varies from 0 to (veclen - 1)
|
|
void GetCellDataRange(int cellComp, int index, float* min, float* max);
|
|
|
|
// get min and max value for the index-th value of a node component
|
|
// index varies from 0 to (veclen - 1)
|
|
void GetNodeDataRange(int nodeComp, int index, float* min, float* max);
|
|
|
|
protected:
|
|
vtkAVSucdReader();
|
|
~vtkAVSucdReader() override;
|
|
int RequestInformation(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
|
|
|
char* FileName;
|
|
vtkTypeBool BinaryFile;
|
|
|
|
int NumberOfNodes;
|
|
int NumberOfCells;
|
|
int NumberOfNodeFields;
|
|
int NumberOfNodeComponents;
|
|
int NumberOfCellComponents;
|
|
int NumberOfCellFields;
|
|
int NumberOfFields;
|
|
int NlistNodes;
|
|
|
|
istream* FileStream;
|
|
|
|
vtkDataArraySelection* PointDataArraySelection;
|
|
vtkDataArraySelection* CellDataArraySelection;
|
|
|
|
int ByteOrder;
|
|
int GetLabel(char* string, int number, char* label);
|
|
|
|
enum
|
|
{
|
|
FILE_BIG_ENDIAN = 0,
|
|
FILE_LITTLE_ENDIAN = 1
|
|
};
|
|
enum UCDCell_type
|
|
{
|
|
PT = 0,
|
|
LINE = 1,
|
|
TRI = 2,
|
|
QUAD = 3,
|
|
TET = 4,
|
|
PYR = 5,
|
|
PRISM = 6,
|
|
HEX = 7
|
|
};
|
|
|
|
struct DataInfo
|
|
{
|
|
long foffset; // offset in binary file
|
|
int veclen; // number of components in the node or cell variable
|
|
float min[3]; // pre-calculated data minima (max size 3 for vectors)
|
|
float max[3]; // pre-calculated data maxima (max size 3 for vectors)
|
|
};
|
|
|
|
DataInfo* NodeDataInfo;
|
|
DataInfo* CellDataInfo;
|
|
|
|
private:
|
|
struct idMapping;
|
|
|
|
void ReadFile(vtkUnstructuredGrid* output);
|
|
void ReadGeometry(vtkUnstructuredGrid* output, idMapping& nodeMap, idMapping& cellMap);
|
|
void ReadNodeData(vtkUnstructuredGrid* output, const idMapping& nodeMap);
|
|
void ReadCellData(vtkUnstructuredGrid* output, const idMapping& cellMap);
|
|
|
|
int ReadFloatBlock(int n, float* block);
|
|
int ReadIntBlock(int n, int* block);
|
|
void ReadXYZCoords(vtkFloatArray* coords, idMapping& nodeMap);
|
|
void ReadBinaryCellTopology(vtkIntArray* material, int* types, vtkIdTypeArray* listcells);
|
|
void ReadASCIICellTopology(vtkIntArray* material, vtkUnstructuredGrid* output,
|
|
const idMapping& nodeMap, idMapping& cellMap);
|
|
|
|
vtkAVSucdReader(const vtkAVSucdReader&) = delete;
|
|
void operator=(const vtkAVSucdReader&) = delete;
|
|
};
|
|
|
|
#endif
|