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.
217 lines
6.8 KiB
C++
217 lines
6.8 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkXMLHyperTreeGridReader.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 vtkXMLHyperTreeGridReader
|
|
* @brief Read VTK XML HyperTreeGrid files.
|
|
*
|
|
* vtkXMLHyperTreeGridReader reads the VTK XML HyperTreeGrid file
|
|
* format. The standard extension for this reader's file format is "htg".
|
|
*
|
|
* NOTE: HyperTree exists as separate units with all data within htg
|
|
* But each htg file is considered one piece for the parallel reader
|
|
* Later may want to treat individual HyperTrees as separate pieces.
|
|
*
|
|
* For developpers:
|
|
* To ensure the durability of this storage format over time, at least,
|
|
* the drive must continue to support playback of previous format.
|
|
*
|
|
* Understand:
|
|
* - version 0.0 (P. Fasel and D. DeMarle Kitware US)
|
|
* - version 1.0 (J-B Lekien CEA, DAM, DIF, F-91297 Arpajon, France)
|
|
* This version of the format offers extensive loading options.
|
|
* With these options, regardless of the size of the backed-up mesh,
|
|
* it is possible to view a "reduced" version either by setting the
|
|
* maximum level (by SetFixedLevel) or/and setting the HyperTrees
|
|
* to load (by SetCoordinatesBoundingBox, SetIndicesBoundingBox,
|
|
* ClearAndAddSelectedHT and AddSelectedHT.
|
|
*/
|
|
|
|
#ifndef vtkXMLHyperTreeGridReader_h
|
|
#define vtkXMLHyperTreeGridReader_h
|
|
|
|
#include "vtkIOXMLModule.h" // For export macro
|
|
#include "vtkXMLReader.h"
|
|
|
|
#include <limits.h> // Use internal
|
|
#include <map> // Use internal
|
|
|
|
class vtkBitArray;
|
|
class vtkHyperTree;
|
|
class vtkHyperTreeGrid;
|
|
class vtkHyperTreeGridNonOrientedCursor;
|
|
class vtkIdTypeArray;
|
|
|
|
class VTKIOXML_EXPORT vtkXMLHyperTreeGridReader : public vtkXMLReader
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkXMLHyperTreeGridReader, vtkXMLReader);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
static vtkXMLHyperTreeGridReader* New();
|
|
|
|
//@{
|
|
/**
|
|
* Get the reader's output.
|
|
*/
|
|
vtkHyperTreeGrid* GetOutput();
|
|
vtkHyperTreeGrid* GetOutput(int idx);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the fixed level to read.
|
|
* Option avaiblable in 1.0
|
|
*/
|
|
vtkSetMacro(FixedLevel, unsigned int);
|
|
vtkGetMacro(FixedLevel, unsigned int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the selected HyperTrees (HTs) to read :
|
|
* by default, all Hts, or
|
|
* by set coordinates bounding box, exclusive or
|
|
* by set indices coordinates bounding box, exclusive or
|
|
* by set indices HTs (ClearAndAdd and more Add).
|
|
* Only available for files whose major version > 1
|
|
* Option avaiblable in 1.0
|
|
*/
|
|
void SetCoordinatesBoundingBox(
|
|
double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
|
|
|
|
void SetIndicesBoundingBox(unsigned int imin, unsigned int imax, unsigned int jmin,
|
|
unsigned int jmax, unsigned int kmin, unsigned int kmax);
|
|
|
|
void ClearAndAddSelectedHT(unsigned int idg, unsigned int fixedLevel = UINT_MAX);
|
|
void AddSelectedHT(unsigned int idg, unsigned int fixedLevel = UINT_MAX);
|
|
//@}
|
|
|
|
// These defer to the HyperTreeGrid output.
|
|
vtkIdType GetNumberOfPoints();
|
|
|
|
vtkIdType GetNumberOfPieces();
|
|
|
|
void SetupUpdateExtent(int piece, int numberOfPieces);
|
|
|
|
void CopyOutputInformation(vtkInformation* outInfo, int port) override;
|
|
|
|
// The most important stuff is here.
|
|
// Read the rest of the file and create the HyperTreeGrid.
|
|
void ReadXMLData() override;
|
|
|
|
protected:
|
|
vtkXMLHyperTreeGridReader();
|
|
~vtkXMLHyperTreeGridReader() override;
|
|
|
|
// Finalize the selected HyperTrees by, for example, transform
|
|
// coordinates bounding box in indices coordinates bounding box
|
|
// after initialize HyperTreeGrid.
|
|
void CalculateHTs(const vtkHyperTreeGrid* grid);
|
|
|
|
// Return true if HyperTree identified by treeIndx is selected for
|
|
// the load.
|
|
bool IsSelectedHT(const vtkHyperTreeGrid* grid, unsigned int treeIndx) const;
|
|
|
|
// Return the fixedLevel choice for this HyperTree
|
|
vtkIdType GetFixedLevelOfThisHT(vtkIdType numberOfLevels, unsigned int treeIndx) const;
|
|
|
|
const char* GetDataSetName() override;
|
|
|
|
void DestroyPieces();
|
|
|
|
void GetOutputUpdateExtent(int& piece, int& numberOfPieces);
|
|
|
|
// Setup the output with no data available. Used in error cases.
|
|
void SetupEmptyOutput() override;
|
|
|
|
// Initialize the total number of vertices
|
|
void SetupOutputTotals();
|
|
|
|
// Initialize global start of next piece
|
|
void SetupNextPiece();
|
|
|
|
// Initialize current output data
|
|
void SetupOutputData() override;
|
|
|
|
// Setup the output's information
|
|
void SetupOutputInformation(vtkInformation* outInfo) override;
|
|
|
|
// Setup the number of pieces
|
|
void SetupPieces(int numPieces);
|
|
|
|
// Pipeline execute data driver called by vtkXMLReader
|
|
int ReadPrimaryElement(vtkXMLDataElement* ePrimary) override;
|
|
|
|
// Declare that this reader produces HyperTreeGrids
|
|
int FillOutputPortInformation(int, vtkInformation*) override;
|
|
|
|
// Read the coordinates describing the grid
|
|
void ReadGrid(vtkXMLDataElement* elem);
|
|
|
|
//----------- Used for the major version < 1
|
|
|
|
// Recover the structure of the HyperTreeGrid, used by ReadXMLData.
|
|
void ReadTrees_0(vtkXMLDataElement* elem);
|
|
|
|
// Used by ReadTopology to recursively build the tree
|
|
void SubdivideFromDescriptor_0(vtkHyperTreeGridNonOrientedCursor* treeCursor, unsigned int level,
|
|
int numChildren, vtkBitArray* desc, vtkIdTypeArray* posByLevel);
|
|
|
|
//---------- Used for other the major version
|
|
|
|
// Recover the structure of the HyperTreeGrid, used by ReadXMLData.
|
|
void ReadTrees_1(vtkXMLDataElement* elem);
|
|
|
|
// Number of vertices in HyperTreeGrid being read
|
|
vtkIdType NumberOfPoints;
|
|
vtkIdType NumberOfPieces;
|
|
|
|
// Fixed the load maximum level
|
|
unsigned int FixedLevel = UINT_MAX;
|
|
|
|
bool Verbose = false;
|
|
|
|
bool FixedHTs = false;
|
|
enum SelectedType
|
|
{
|
|
ALL,
|
|
COORDINATES_BOUNDING_BOX,
|
|
INDICES_BOUNDING_BOX,
|
|
IDS_SELECTED
|
|
};
|
|
SelectedType SelectedHTs = ALL;
|
|
|
|
// Selected HTs by coordinates of bounding box
|
|
double CoordinatesBoundingBox[6];
|
|
// Selected HTs by indice coordinate of bounding box
|
|
unsigned int IndicesBoundingBox[6];
|
|
// Selected HTs by indice of HTs in the map.
|
|
// The value is the fixedLevel, but if this value is
|
|
// UINT_MAX, this is FixedLevel that is used.
|
|
std::map<unsigned int, unsigned int> IdsSelected;
|
|
|
|
int UpdatedPiece;
|
|
int UpdateNumberOfPieces;
|
|
|
|
int StartPiece;
|
|
int EndPiece;
|
|
int Piece;
|
|
|
|
private:
|
|
vtkXMLHyperTreeGridReader(const vtkXMLHyperTreeGridReader&) = delete;
|
|
void operator=(const vtkXMLHyperTreeGridReader&) = delete;
|
|
};
|
|
|
|
#endif
|