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=========================================================================*/
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
349 vtkIdType GetNumberOfChildren() const { return this->NumberOfChildren; }
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 }
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...
A data object structured as a tree.
Definition: vtkHyperTree.h:180
std::shared_ptr< vtkHyperTreeGridScales > Scales
Definition: vtkHyperTree.h:552
virtual vtkIdType GetGlobalIndexFromLocal(vtkIdType index) const =0
Get the global id of a local node identified by index.
unsigned char BranchFactor
Definition: vtkHyperTree.h:537
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.
Definition: vtkHyperTree.h:320
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.
Definition: vtkHyperTree.h:432
unsigned int GetNumberOfLevels() const
Return the number of levels.
Definition: vtkHyperTree.h:311
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.
Definition: vtkHyperTree.h:518
unsigned char Dimension
Definition: vtkHyperTree.h:540
unsigned int GetActualMemorySize()
Return memory used in kibibytes (1024 bytes).
Definition: vtkHyperTree.h:390
bool HasScales() const
Return the existence scales.
Definition: vtkHyperTree.h:511
vtkIdType GetNumberOfNodes() const
Return the number of nodes (coarse) in the tree.
Definition: vtkHyperTree.h:325
int GetBranchFactor() const
Return the branch factor of the tree.
Definition: vtkHyperTree.h:338
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
Definition: vtkHyperTree.h:546
unsigned char NumberOfChildren
Definition: vtkHyperTree.h:543
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.
Definition: vtkHyperTree.h:305
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.
Definition: vtkHyperTree.h:504
vtkIdType GetNumberOfLeaves() const
Return the number of leaf (fine) in the tree.
Definition: vtkHyperTree.h:330
int GetDimension() const
Return the spatial dimension of the tree.
Definition: vtkHyperTree.h:343
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.
Definition: vtkHyperTree.h:349
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.
Definition: vtkHyperTree.h:304
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
abstract base class for most VTK objects
Definition: vtkObject.h:63
unsigned int NumberOfLevels
Definition: vtkHyperTree.h:159
vtkIdType NumberOfVertices
Definition: vtkHyperTree.h:162
vtkIdType TreeIndex
Definition: vtkHyperTree.h:156
vtkIdType NumberOfNodes
Definition: vtkHyperTree.h:165
vtkIdType GlobalIndexStart
Definition: vtkHyperTree.h:175
int vtkIdType
Definition: vtkType.h:332
#define VTK_NEWINSTANCE