VTK  9.2.6
vtkHyperTree.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkHyperTree.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
137
138#ifndef vtkHyperTree_h
139#define vtkHyperTree_h
140
141#include "vtkCommonDataModelModule.h" // For export macro
142#include "vtkObject.h"
143
144#include <cassert> // Used internally
145#include <memory> // std::shared_ptr
146
147class vtkBitArray;
148class vtkIdList;
150class vtkTypeInt64Array;
151
152//=============================================================================
154{
155 // Index of this tree in the hypertree grid
157
158 // Number of levels in the tree
159 unsigned int NumberOfLevels;
160
161 // Number of vertices in this tree (coarse and leaves)
163
164 // Number of nodes (non-leaf vertices) in the tree
166
167 // Offset start for the implicit global index mapping fixed by
168 // SetGlobalIndexStart after create a tree.
169 // If you don't choose implicit global index mapping then this
170 // value is -1. Then, you must to descrieb explicit global index
171 // mapping by using then SetGlobalIndexFromLocal for each cell
172 // in tree.
173 // The extra cost is equivalent to the cost of a field of values
174 // of cells.
176};
177
178//=============================================================================
179class VTKCOMMONDATAMODEL_EXPORT vtkHyperTree : public vtkObject
180{
181public:
182 vtkTypeMacro(vtkHyperTree, vtkObject);
183
184 void PrintSelf(ostream& os, vtkIndent indent) override;
185
194 unsigned char branchFactor, unsigned char dimension, unsigned char numberOfChildren);
195
215 virtual void InitializeForReader(vtkIdType numberOfLevels, vtkIdType nbVertices,
216 vtkIdType nbVerticesOfLastLevel, vtkBitArray* isParent, vtkBitArray* isMasked,
217 vtkBitArray* outIsMasked) = 0;
218
240 vtkBitArray* descriptor, vtkIdType numberOfBits, vtkIdType startIndex = 0) = 0;
241
280 vtkTypeInt64Array* numberOfVerticesPerDepth, vtkBitArray* descriptor,
281 vtkIdList* breadthFirstIdMap) = 0;
282
289
297 virtual vtkHyperTree* Freeze(const char* mode) = 0;
298
300
304 void SetTreeIndex(vtkIdType treeIndex) { this->Datas->TreeIndex = treeIndex; }
305 vtkIdType GetTreeIndex() const { return this->Datas->TreeIndex; }
307
311 unsigned int GetNumberOfLevels() const
312 {
313 assert("post: result_greater_or_equal_to_one" && this->Datas->NumberOfLevels >= 1);
314 return this->Datas->NumberOfLevels;
315 }
316
320 vtkIdType GetNumberOfVertices() const { return this->Datas->NumberOfVertices; }
321
325 vtkIdType GetNumberOfNodes() const { return this->Datas->NumberOfNodes; }
326
331 {
332 return this->Datas->NumberOfVertices - this->Datas->NumberOfNodes;
333 }
334
338 int GetBranchFactor() const { return this->BranchFactor; }
339
343 int GetDimension() const { return this->Dimension; }
344
350
352
356 void GetScale(double s[3]) const;
357
358 double GetScale(unsigned int d) const;
360
366 std::shared_ptr<vtkHyperTreeGridScales> InitializeScales(
367 const double* scales, bool reinitialize = false) const;
368
379 static vtkHyperTree* CreateInstance(unsigned char branchFactor, unsigned char dimension);
384 virtual unsigned long GetActualMemorySizeBytes() = 0;
385
390 unsigned int GetActualMemorySize()
391 {
392 // in kilibytes
393 return static_cast<unsigned int>(this->GetActualMemorySizeBytes() / 1024);
394 }
395
405 virtual bool IsGlobalIndexImplicit() = 0;
406
426 virtual void SetGlobalIndexStart(vtkIdType start) = 0;
427
432 vtkIdType GetGlobalIndexStart() const { return this->Datas->GlobalIndexStart; }
433
444
454
459 virtual vtkIdType GetGlobalNodeIndexMax() const = 0;
460
465 virtual bool IsLeaf(vtkIdType index) const = 0;
466
472 virtual void SubdivideLeaf(vtkIdType index, unsigned int level) = 0;
473
480 virtual bool IsTerminalNode(vtkIdType index) const = 0;
481
489 virtual vtkIdType GetElderChildIndex(unsigned int index_parent) const = 0;
490
495 virtual const unsigned int* GetElderChildIndexArray(size_t& nbElements) const = 0;
496
498
504 void SetScales(std::shared_ptr<vtkHyperTreeGridScales> scales) const { this->Scales = scales; }
506
508
511 bool HasScales() const { return (this->Scales != nullptr); }
513
515
518 std::shared_ptr<vtkHyperTreeGridScales> GetScales() const
519 {
520 assert(this->Scales != nullptr);
521 return this->Scales;
522 }
523
524
525protected:
527
528 ~vtkHyperTree() override = default;
529
530 virtual void InitializePrivate() = 0;
531 virtual void PrintSelfPrivate(ostream& os, vtkIndent indent) = 0;
532 virtual void CopyStructurePrivate(vtkHyperTree* ht) = 0;
533
534 //-- Global information
535
536 // Branching factor of tree (2 or 3)
537 unsigned char BranchFactor;
538
539 // Dimension of tree (1, 2, or 3)
540 unsigned char Dimension;
541
542 // Number of children for coarse cell
543 unsigned char NumberOfChildren;
544
545 //-- Local information
546 std::shared_ptr<vtkHyperTreeData> Datas;
547
548 // Storage of pre-computed per-level cell scales
549 // In hypertree grid, one description by hypertree.
550 // In Uniform hypertree grid, one description by hypertree grid
551 // (all cells, differents hypertree, are identicals by level).
552 mutable std::shared_ptr<vtkHyperTreeGridScales> Scales;
553
554private:
555 void InitializeBase(
556 unsigned char branchFactor, unsigned char dimension, unsigned char numberOfChildren);
557 vtkHyperTree(const vtkHyperTree&) = delete;
558 void operator=(const vtkHyperTree&) = delete;
559};
560
561#endif
dynamic, self-adjusting array of bits
Definition vtkBitArray.h:37
A specifalized type of vtkHyperTreeGrid for the case when root cells have uniform sizes in each direc...
std::shared_ptr< vtkHyperTreeGridScales > Scales
virtual vtkIdType GetGlobalIndexFromLocal(vtkIdType index) const =0
Get the global id of a local node identified by index.
unsigned char BranchFactor
virtual void BuildFromBreadthFirstOrderDescriptor(vtkBitArray *descriptor, vtkIdType numberOfBits, vtkIdType startIndex=0)=0
This method builds the indexing of this tree given a breadth first order descriptor.
virtual const unsigned int * GetElderChildIndexArray(size_t &nbElements) const =0
Return the elder child index array, internals of the tree structure Should be used with great care,...
void GetScale(double s[3]) const
Set/Get scale of the tree in each direction for the ground level (0).
virtual void PrintSelfPrivate(ostream &os, vtkIndent indent)=0
virtual void SubdivideLeaf(vtkIdType index, unsigned int level)=0
Subdivide a vertice, only if its a leaf.
virtual void SetGlobalIndexFromLocal(vtkIdType index, vtkIdType global)=0
Set the mapping between a node index in tree and a explicit global index mapping.
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.
static vtkHyperTree * CreateInstance(unsigned char branchFactor, unsigned char dimension)
Return an instance of an implementation of a hypertree for given branch factor and dimension.
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.
virtual vtkIdType GetElderChildIndex(unsigned int index_parent) const =0
Return the elder child index, local index node of first child, of node, coarse cell,...
double GetScale(unsigned int d) const
Set/Get scale of the tree in each direction for the ground level (0).
std::shared_ptr< vtkHyperTreeGridScales > GetScales() const
Return all scales.
unsigned char Dimension
unsigned int GetActualMemorySize()
Return memory used in kibibytes (1024 bytes).
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.
virtual void SetGlobalIndexStart(vtkIdType start)=0
Set the start implicit global index mapping for the first cell in the current tree.
virtual void InitializePrivate()=0
std::shared_ptr< vtkHyperTreeData > Datas
unsigned char NumberOfChildren
void CopyStructure(vtkHyperTree *ht)
Copy the structure by sharing the decomposition description of the tree.
virtual bool IsGlobalIndexImplicit()=0
Return if implicit global index mapping has been used.
virtual bool IsTerminalNode(vtkIdType index) const =0
Return if a vertice identified by index in tree as a terminal node.
virtual vtkHyperTree * Freeze(const char *mode)=0
Return a freeze instance (a priori compact but potentially unmodifiable).
virtual void CopyStructurePrivate(vtkHyperTree *ht)=0
vtkIdType GetTreeIndex() const
Set/Get tree index in hypertree grid.
void Initialize(unsigned char branchFactor, unsigned char dimension, unsigned char numberOfChildren)
Restore the initial state: only one vertice is then a leaf: the root cell for the hypertree.
void SetScales(std::shared_ptr< vtkHyperTreeGridScales > scales) const
In an hypertree, all cells are the same size by level.
vtkIdType GetNumberOfLeaves() const
Return the number of leaf (fine) in the tree.
int GetDimension() const
Return the spatial dimension of the tree.
virtual void ComputeBreadthFirstOrderDescriptor(vtkBitArray *inputMask, vtkTypeInt64Array *numberOfVerticesPerDepth, vtkBitArray *descriptor, vtkIdList *breadthFirstIdMap)=0
This method computes the breadth first order descriptor of the current tree.
~vtkHyperTree() override=default
vtkIdType GetNumberOfChildren() const
Return the number of children per node of the tree.
virtual vtkIdType GetGlobalNodeIndexMax() const =0
Return the maximum value reached by global index mapping (implicit or explicit).
virtual void InitializeForReader(vtkIdType numberOfLevels, vtkIdType nbVertices, vtkIdType nbVerticesOfLastLevel, vtkBitArray *isParent, vtkBitArray *isMasked, vtkBitArray *outIsMasked)=0
Restore a state from read data, without using a cursor Call after create hypertree with initialize.
virtual unsigned long GetActualMemorySizeBytes()=0
Return memory used in bytes.
virtual bool IsLeaf(vtkIdType index) const =0
Return if a vertice identified by index in tree as being leaf.
void SetTreeIndex(vtkIdType treeIndex)
Set/Get tree index in hypertree grid.
std::shared_ptr< vtkHyperTreeGridScales > InitializeScales(const double *scales, bool reinitialize=false) const
In an hypertree, all cells are the same size by level.
list of point or cell ids
Definition vtkIdList.h:34
a simple class to control print indentation
Definition vtkIndent.h:40
unsigned int NumberOfLevels
vtkIdType NumberOfVertices
vtkIdType TreeIndex
vtkIdType NumberOfNodes
vtkIdType GlobalIndexStart
int vtkIdType
Definition vtkType.h:332
#define VTK_NEWINSTANCE