121#ifndef vtkHyperTree_h
122#define vtkHyperTree_h
124#include "vtkCommonDataModelModule.h"
131VTK_ABI_NAMESPACE_BEGIN
135class vtkTypeInt64Array;
185 "Use bool Initialize(unsigned char branchFactor, unsigned char dimension) instead.")
187 unsigned char branchFactor,
unsigned char dimension,
unsigned char numberOfChildren);
197 bool Initialize(
unsigned char branchFactor,
unsigned char dimension);
242 virtual
void BuildFromBreadthFirstOrderDescriptor(
284 virtual
void ComputeBreadthFirstOrderDescriptor(
unsigned int depthLimiter,
vtkBitArray* inputMask,
285 vtkTypeInt64Array* numberOfVerticesPerDepth,
vtkBitArray* descriptor,
296 virtual
vtkHyperTree* Freeze(const
char* vtkNotUsed(mode)) {
return this; };
305 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
306 this->Datas->TreeIndex = treeIndex;
310 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
311 return this->Datas->TreeIndex;
320 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
321 assert(
"post: result_greater_or_equal_to_one" && this->Datas->NumberOfLevels >= 1);
322 return this->Datas->NumberOfLevels;
330 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
331 return this->Datas->NumberOfVertices;
339 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
340 return this->Datas->NumberOfNodes;
348 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
349 return this->Datas->NumberOfVertices - this->Datas->NumberOfNodes;
383 const double* scales,
bool reinitialize =
false);
396 static
vtkHyperTree* CreateInstance(
unsigned char branchFactor,
unsigned char dimension);
401 virtual
unsigned long GetActualMemorySizeBytes();
407 unsigned int GetActualMemorySize()
410 return static_cast<unsigned int>(this->GetActualMemorySizeBytes() / 1024);
451 assert(
"pre: datas_non_nullptr" && this->Datas !=
nullptr);
452 return this->Datas->GlobalIndexStart;
525 void SetScales(std::shared_ptr<vtkHyperTreeGridScales> scales) { this->Scales = scales; }
532 bool HasScales()
const {
return (this->Scales !=
nullptr); }
539 std::shared_ptr<vtkHyperTreeGridScales>
GetScales()
const
541 assert(this->Scales !=
nullptr);
554 bool IsChildLeaf(
vtkIdType index_parent,
unsigned int ichild)
const;
564 void ComputeBreadthFirstOrderDescriptorImpl(
unsigned int depthLimiter,
vtkBitArray* inputMask,
565 unsigned int depth,
vtkIdType index, std::vector<std::vector<bool>>& descriptorPerDepth,
566 std::vector<std::vector<vtkIdType>>& breadthFirstOrderIdMapPerDepth);
571 unsigned char BranchFactor;
574 unsigned char Dimension;
577 unsigned char NumberOfChildren;
580 std::shared_ptr<vtkHyperTreeData> Datas;
586 std::shared_ptr<vtkHyperTreeGridScales> Scales;
dynamic, self-adjusting array of bits
Dynamic generation of scales for vtkHyperTree.
A data object structured as a tree.
virtual vtkIdType GetGlobalNodeIndexMax() const
Return the maximum value reached by global index mapping (implicit or explicit).
void GetScale(double s[3]) const
Set/Get scale of the tree in each direction for the ground level (0).
virtual bool IsTerminalNode(vtkIdType index) const
Return if a vertice identified by index in tree as a terminal node.
vtkIdType GetNumberOfVertices() const
Return the number of all vertices (coarse and fine) in the tree.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkIdType GetGlobalIndexStart() const
Get the start global index for the current tree for implicit global index mapping.
unsigned int GetNumberOfLevels() const
Return the number of levels.
double GetScale(unsigned int d) const
Set/Get scale of the tree in each direction for the ground level (0).
virtual void SubdivideLeaf(vtkIdType index, unsigned int level)
Subdivide a vertice, only if its a leaf.
std::shared_ptr< vtkHyperTreeGridScales > InitializeScales(const double *scales, bool reinitialize=false)
In an hypertree, all cells are the same size by level.
std::shared_ptr< vtkHyperTreeGridScales > GetScales() const
Return all scales.
virtual bool IsLeaf(vtkIdType index) const
Return if a vertice identified by index in tree as being leaf.
virtual vtkIdType GetElderChildIndex(unsigned int index_parent) const
Return the elder child index, local index node of first child, of node, coarse cell,...
bool HasScales() const
Return the existence scales.
vtkIdType GetNumberOfNodes() const
Return the number of nodes (coarse) in the tree.
int GetBranchFactor() const
Return the branch factor of the tree.
void SetScales(std::shared_ptr< vtkHyperTreeGridScales > scales)
In an hypertree, all cells are the same size by level.
virtual const unsigned int * GetElderChildIndexArray(size_t &nbElements) const
Return the elder child index array, internals of the tree structure Should be used with great care,...
virtual vtkIdType GetGlobalIndexFromLocal(vtkIdType index) const
Get the global id of a local node identified by index.
vtkIdType GetTreeIndex() const
Set/Get tree index in hypertree grid.
virtual void SetGlobalIndexStart(vtkIdType start)
Set the start implicit global index mapping for the first cell in the current tree.
vtkIdType GetNumberOfLeaves() const
Return the number of leaf (fine) in the tree.
int GetDimension() const
Return the spatial dimension of the tree.
virtual void SetGlobalIndexFromLocal(vtkIdType index, vtkIdType global)
Set the mapping between a node index in tree and a explicit global index mapping.
~vtkHyperTree() override=default
static vtkHyperTree * New()
vtkIdType GetNumberOfChildren() const
Return the number of children per node of the tree.
virtual bool IsGlobalIndexImplicit()
Return if implicit global index mapping has been used.
void SetTreeIndex(vtkIdType treeIndex)
Set/Get tree index in hypertree grid.
list of point or cell ids
a simple class to control print indentation
abstract base class for most VTK objects
unsigned int NumberOfLevels
vtkIdType NumberOfVertices
std::vector< vtkIdType > GlobalIndexTable
std::vector< unsigned int > ParentToElderChild
vtkIdType GlobalIndexStart
#define VTK_DEPRECATED_IN_9_6_0(reason)