VTK  9.5.20250810
vtkHyperTreeGrid.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
59#ifndef vtkHyperTreeGrid_h
60#define vtkHyperTreeGrid_h
61
62#include "vtkCommonDataModelModule.h" // For export macro
63#include "vtkDataObject.h"
64
65#include "vtkDeprecation.h" // for deprecation macro
66#include "vtkNew.h" // vtkSmartPointer
67#include "vtkSmartPointer.h" // vtkSmartPointer
68
69#include <cassert> // std::assert
70#include <limits> // limits
71#include <map> // std::map
72
73VTK_ABI_NAMESPACE_BEGIN
74class vtkBitArray;
75class vtkBoundingBox;
76class vtkCellLinks;
77class vtkCollection;
78class vtkDataArray;
79class vtkHyperTree;
90class vtkDoubleArray;
92class vtkIdTypeArray;
93class vtkLine;
94class vtkPixel;
95class vtkPoints;
96class vtkCellData;
98
99class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGrid : public vtkDataObject
100{
101public:
103
107 VTK_DEPRECATED_IN_9_6_0("Unused key.")
108 static vtkInformationIntegerKey* LEVELS();
109 VTK_DEPRECATED_IN_9_6_0("Unused key.")
110 static vtkInformationIntegerKey* DIMENSION();
111 VTK_DEPRECATED_IN_9_6_0("Unused key.")
112 static vtkInformationIntegerKey* ORIENTATION();
113 VTK_DEPRECATED_IN_9_6_0("Unused key.")
116
117 static vtkHyperTreeGrid* New();
118
120 void PrintSelf(ostream& os, vtkIndent indent) override;
121
126 static constexpr vtkIdType InvalidIndex = ~0;
127
128 VTK_DEPRECATED_IN_9_6_0("No effect anymore, do not use.")
129 void SetModeSqueeze(const char* vtkNotUsed(vtksqueeze)){};
130 VTK_DEPRECATED_IN_9_6_0("No effect anymore, do not use.")
131 char* GetModeSqueeze() { return nullptr; }
132
133 VTK_DEPRECATED_IN_9_6_0("No effect anymore, do not use.")
134 virtual void Squeeze(){};
135
139 int GetDataObjectType() VTK_FUTURE_CONST override { return VTK_HYPER_TREE_GRID; }
140
146
151
152 // --------------------------------------------------------------------------
153 // RectilinearGrid common API
154 // --------------------------------------------------------------------------
155
157
160 void SetDimensions(const unsigned int dims[3]);
161 void SetDimensions(const int dims[3]);
162 void SetDimensions(unsigned int i, unsigned int j, unsigned int k);
163 void SetDimensions(int i, int j, int k);
165
167
171 const unsigned int* GetDimensions() const VTK_SIZEHINT(3);
172 void GetDimensions(int dim[3]) const;
173 void GetDimensions(unsigned int dim[3]) const;
175
177
183 void SetExtent(const int extent[6]);
184 void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
185 vtkGetVector6Macro(Extent, int);
187
189
194 const unsigned int* GetCellDims() const VTK_SIZEHINT(3);
195 void GetCellDims(int cellDims[3]) const;
196 void GetCellDims(unsigned int cellDims[3]) const;
198
199 // --------------------------------------------------------------------------
200
202
205 unsigned int GetDimension() const { return this->Dimension; }
207
209
212 void Get1DAxis(unsigned int& axis) const
213 {
214 assert("pre: valid_dim" && this->GetDimension() == 1);
215 axis = this->Axis[0];
216 }
218
220
223 void Get2DAxes(unsigned int& axis1, unsigned int& axis2) const
224 {
225 assert("pre: valid_dim" && this->GetDimension() == 2);
226 axis1 = this->Axis[0];
227 axis2 = this->Axis[1];
228 }
230
232
235 const unsigned int* GetAxes() const { return this->Axis; }
237
239
242 // vtkGetMacro(NumberOfChildren, unsigned int); not const
243 unsigned int GetNumberOfChildren() const { return this->NumberOfChildren; }
245
247
251 vtkSetMacro(TransposedRootIndexing, bool);
252 vtkGetMacro(TransposedRootIndexing, bool);
253 void SetIndexingModeToKJI() { this->SetTransposedRootIndexing(false); }
254 void SetIndexingModeToIJK() { this->SetTransposedRootIndexing(true); }
256
258
264 unsigned int GetOrientation() const { return this->Orientation; }
266
267 VTK_DEPRECATED_IN_9_6_0("No effect, do not use.")
268 bool GetFreezeState() { return false; };
269
271
274 void SetBranchFactor(unsigned int);
275 unsigned int GetBranchFactor() const { return this->BranchFactor; }
277
282
287
292
297
301 unsigned int GetNumberOfLevels();
302
304
308 vtkGetObjectMacro(XCoordinates, vtkDataArray);
310
312
316 vtkGetObjectMacro(YCoordinates, vtkDataArray);
318
320
324 vtkGetObjectMacro(ZCoordinates, vtkDataArray);
326
328
331 virtual void CopyCoordinates(const vtkHyperTreeGrid* output);
332 virtual void SetFixedCoordinates(unsigned int axis, double value);
334
336
340 vtkGetObjectMacro(Mask, vtkBitArray);
342
346 bool HasMask();
347
349
352 vtkSetMacro(HasInterface, bool);
353 vtkGetMacro(HasInterface, bool);
354 vtkBooleanMacro(HasInterface, bool);
356
358
361 vtkSetStringMacro(InterfaceNormalsName);
362 vtkGetStringMacro(InterfaceNormalsName);
364
366
369 vtkSetStringMacro(InterfaceInterceptsName);
370 vtkGetStringMacro(InterfaceInterceptsName);
372
374
377 vtkSetMacro(DepthLimiter, unsigned int);
378 vtkGetMacro(DepthLimiter, unsigned int);
380
382
392 vtkHyperTreeGridOrientedCursor* cursor, vtkIdType index, bool create = false);
395
397 vtkHyperTreeGridOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
400 vtkIdType index, bool create = false);
401
403 vtkHyperTreeGridNonOrientedCursor* cursor, vtkIdType index, bool create = false);
406
408 vtkHyperTreeGridNonOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
411 vtkIdType index, bool create = false);
412
415 bool create = false);
418 vtkIdType index, bool create = false);
420
425
426private:
427 unsigned int RecurseDichotomic(
428 double value, vtkDoubleArray* coord, double tol, unsigned int ideb, unsigned int ifin) const;
429
430 unsigned int FindDichotomic(double value, vtkDataArray* coord, double tol) const;
431
432public:
433 virtual unsigned int FindDichotomicX(double value, double tol = 0.0) const;
434 virtual unsigned int FindDichotomicY(double value, double tol = 0.0) const;
435 virtual unsigned int FindDichotomicZ(double value, double tol = 0.0) const;
436
438
448 vtkHyperTreeGridNonOrientedVonNeumannSuperCursor* cursor, vtkIdType index, bool create = false);
451 vtkIdType index, bool create = false);
452
455 bool create = false);
458 vtkIdType index, bool create = false);
459
461 vtkHyperTreeGridNonOrientedMooreSuperCursor* cursor, vtkIdType index, bool create = false);
464 vtkIdType index, bool create = false);
465
467 vtkHyperTreeGridNonOrientedMooreSuperCursorLight* cursor, vtkIdType index, bool create = false);
470 vtkIdType index, bool create = false);
471
474 bool create = false);
477 vtkIdType index, bool create = false);
479
483 void Initialize() override;
484
489 virtual vtkHyperTree* GetTree(vtkIdType index, bool create = false);
490
496
501 size_t RemoveTree(vtkIdType index);
502
506 void ShallowCopy(vtkDataObject*) override;
507
511 void DeepCopy(vtkDataObject*) override;
512
516 int GetExtentType() VTK_FUTURE_CONST override { return VTK_3D_EXTENT; }
517
526 virtual unsigned long GetActualMemorySizeBytes();
527
536 unsigned long GetActualMemorySize() override;
537
541 bool SupportsGhostArray(int type) override;
542
543private:
547 bool RecursivelyInitializePureMask(vtkHyperTreeGridNonOrientedCursor*, vtkDataArray*);
548
555 void CleanPureMask();
556
557public:
580
631 unsigned int GetChildMask(unsigned int);
632
636 void GetIndexFromLevelZeroCoordinates(vtkIdType&, unsigned int, unsigned int, unsigned int) const;
637
649
654 vtkIdType, unsigned int&, unsigned int&, unsigned int&) const;
655
659 virtual void GetLevelZeroOriginAndSizeFromIndex(vtkIdType, double*, double*);
660
665
671
676
680 bool HasAnyGhostCells() const;
681
687
694
699
703 class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGridIterator
704 {
705 public:
707
712
718
724
725 protected:
726 std::map<vtkIdType, vtkSmartPointer<vtkHyperTree>>::iterator Iterator;
727 vtkHyperTreeGrid* Grid = nullptr;
728 };
729
734
736
742
747 virtual void ComputeBounds();
748
750
758 virtual double* GetBounds() VTK_SIZEHINT(6);
759 void GetBounds(double bounds[6]);
761
767 virtual void GetGridBounds(double bounds[6]);
768
773 double* GetCenter() VTK_SIZEHINT(3);
774
779 void GetCenter(double center[3]);
780
785 vtkCellData* GetCellData();
786
792 vtkFieldData* GetAttributesAsFieldData(int type) override;
793
799 vtkIdType GetNumberOfElements(int type) override;
800
805 vtkIdType GetNumberOfCells();
806
807protected:
812
813 ~vtkHyperTreeGrid() override;
814
815 double Bounds[6]; // (xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds
816 double Center[3]{ 0.0, 0.0, 0.0 }; // geometric center
817
818 unsigned int BranchFactor = 0; // 2 or 3, 0 for invalid
819 unsigned int Dimension = 0; // 1, 2, or 3, 0 for invalid
820
822
826 vtkUnsignedCharArray* TreeGhostArray = nullptr;
827 bool TreeGhostArrayCached = false;
829private:
830 // Invalid default grid parameters to force actual initialization
831 unsigned int Orientation = std::numeric_limits<unsigned int>::max(); // 0, 1, or 2
832 unsigned int Axis[2] = { std::numeric_limits<unsigned int>::max(),
833 std::numeric_limits<unsigned int>::max() };
834
835 vtkTimeStamp ComputeTime;
836
837protected:
838 unsigned int NumberOfChildren = 0;
839 bool TransposedRootIndexing = false;
840
841 // --------------------------------
842 // RectilinearGrid common fields
843 // --------------------------------
844private:
845 unsigned int Dimensions[3] = { 0, 0, 0 }; // Just for GetDimensions
846 unsigned int CellDims[3] = { 0, 0, 0 }; // Just for GetCellDims
847protected:
849 int Extent[6] = { 0, -1, 0, -1, 0, -1 };
850
851 bool WithCoordinates = false;
852 vtkDataArray* XCoordinates = nullptr;
853 vtkDataArray* YCoordinates = nullptr;
854 vtkDataArray* ZCoordinates = nullptr;
855 // --------------------------------
856
857 vtkBitArray* Mask = nullptr;
858 vtkBitArray* PureMask = nullptr;
859
860 bool HasInterface = false;
861 char* InterfaceNormalsName = nullptr;
862 char* InterfaceInterceptsName = nullptr;
863
864 std::map<vtkIdType, vtkSmartPointer<vtkHyperTree>> HyperTrees;
865
866 vtkNew<vtkCellData> CellData; // Scalars, vectors, etc. associated w/ each point
867
868 unsigned int DepthLimiter = std::numeric_limits<unsigned int>::max();
869
870private:
871 vtkHyperTreeGrid(const vtkHyperTreeGrid&) = delete;
872 void operator=(const vtkHyperTreeGrid&) = delete;
873};
874
875VTK_ABI_NAMESPACE_END
876#endif
dynamic, self-adjusting array of bits
Definition vtkBitArray.h:29
Fast, simple class for representing and operating on 3D bounds.
represent and manipulate cell attribute data
create and manipulate ordered lists of objects
abstract superclass for arrays of numeric data
general representation of visualization data
represent and manipulate attribute data in a dataset
dynamic, self-adjusting array of double
Represents and manipulates a collection of data arrays.
Objects for traversal a HyperTreeGrid.
Objects for traversal a HyperTreeGrid.
An iterator object to iteratively access trees in the grid.
void Initialize(vtkHyperTreeGrid *grid)
Initialize the iterator on the tree set of the given grid.
std::map< vtkIdType, vtkSmartPointer< vtkHyperTree > >::iterator Iterator
vtkHyperTree * GetNextTree()
Get the next tree and set its index then increment the iterator.
vtkHyperTree * GetNextTree(vtkIdType &index)
Get the next tree and set its index then increment the iterator.
A dataset containing a grid of vtkHyperTree instances arranged as a rectilinear grid.
bool HasMask()
Determine whether blanking mask is empty or not.
vtkHyperTreeGridNonOrientedMooreSuperCursorLight * NewNonOrientedMooreSuperCursorLight(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkHyperTreeGridNonOrientedCursor * NewNonOrientedCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void InitializeNonOrientedUnlimitedGeometryCursor(vtkHyperTreeGridNonOrientedUnlimitedGeometryCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void SetMask(vtkBitArray *)
Set/Get the blanking mask of primal leaf cells.
virtual void CopyCoordinates(const vtkHyperTreeGrid *output)
Utility methods to set coordinates.
void InitializeNonOrientedVonNeumannSuperCursorLight(vtkHyperTreeGridNonOrientedVonNeumannSuperCursorLight *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
virtual void GetLevelZeroOriginFromIndex(vtkIdType, double *)
Convert the global index of a root to its Spatial coordinates origin and size.
vtkHyperTreeGridNonOrientedVonNeumannSuperCursorLight * NewNonOrientedVonNeumannSuperCursorLight(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkHyperTreeGridOrientedCursor * NewOrientedCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
const unsigned int * GetDimensions() const
Get dimensions of this rectilinear grid dataset.
std::map< vtkIdType, vtkSmartPointer< vtkHyperTree > > HyperTrees
virtual void SetFixedCoordinates(unsigned int axis, double value)
Utility methods to set coordinates.
virtual void CopyEmptyStructure(vtkDataObject *)
Copy the internal structure with no data associated.
void DeepCopy(vtkDataObject *) override
Create deep copy of hyper tree grid.
void Get1DAxis(unsigned int &axis) const
Return the index of the valid dimension.
static vtkHyperTreeGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
void GetIndexFromLevelZeroCoordinates(vtkIdType &, unsigned int, unsigned int, unsigned int) const
Convert the Cartesian coordinates of a root in the grid to its global index.
void InitializeOrientedGeometryCursor(vtkHyperTreeGridOrientedGeometryCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
virtual void CopyStructure(vtkDataObject *)
Copy the internal geometric and topological structure of a vtkHyperTreeGrid object.
const unsigned int * GetAxes() const
Get the axis information (used for CopyStructure)
unsigned int GetNumberOfLevels(vtkIdType)
Return the number of levels in an individual (primal) tree.
virtual void SetYCoordinates(vtkDataArray *)
Set/Get the grid coordinates in the y-direction.
vtkIdType GetMaxNumberOfTrees() const
Return the maximum number of trees in the level 0 grid.
virtual void SetXCoordinates(vtkDataArray *)
Set/Get the grid coordinates in the x-direction.
virtual unsigned int FindDichotomicY(double value, double tol=0.0) const
size_t RemoveTree(vtkIdType index)
Remove the tree at the given index.
virtual vtkHyperTree * GetTree(vtkIdType index, bool create=false)
Return tree located at given index of hyper tree grid NB: This will construct a new HyperTree if grid...
vtkHyperTreeGridNonOrientedGeometryCursor * FindNonOrientedGeometryCursor(double x[3])
Return a geometric cursor pointing to one of the nodes at position x
vtkUnsignedCharArray * GetTreeGhostArray()
Gets the array that defines the ghost type of each cell.
void Initialize() override
Restore data object to initial state.
unsigned int GetOrientation() const
Get the orientation of 1D or 2D grids:
void SetIndexingModeToKJI()
Specify whether indexing mode of grid root cells must be transposed to x-axis first,...
void SetTree(vtkIdType, vtkHyperTree *)
Assign given tree to given index of hyper tree grid NB: This will create a new slot in the grid if ne...
virtual void GetLevelZeroOriginAndSizeFromIndex(vtkIdType, double *, double *)
Convert the global index of a root to its Spatial coordinates origin and size.
int GetExtentType() VTK_FUTURE_CONST override
Structured extent.
void InitializeNonOrientedMooreSuperCursorLight(vtkHyperTreeGridNonOrientedMooreSuperCursorLight *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
virtual unsigned int FindDichotomicX(double value, double tol=0.0) const
void SetDimensions(unsigned int i, unsigned int j, unsigned int k)
Set/Get sizes of this rectilinear grid dataset.
vtkUnsignedCharArray * AllocateTreeGhostArray()
Allocate ghost array for points.
vtkIdType GetNumberOfNonEmptyTrees()
Get the number of non empty trees in this grid.
virtual unsigned long GetActualMemorySizeBytes()
Return the actual size of the data in bytes.
vtkHyperTreeGridOrientedGeometryCursor * NewOrientedGeometryCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void Get2DAxes(unsigned int &axis1, unsigned int &axis2) const
Return the indices of the two valid dimensions.
static vtkHyperTreeGrid * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
vtkHyperTreeGridNonOrientedGeometryCursor * NewNonOrientedGeometryCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkIdType GetGlobalNodeIndexMax()
Return the maximum global index value.
int GetDataObjectType() VTK_FUTURE_CONST override
Return what type of dataset this is.
void InitializeOrientedCursor(vtkHyperTreeGridOrientedCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void InitializeLocalIndexNode()
Initialize local indexes for every individual Hyper Tree after they have been refined.
vtkHyperTreeGridNonOrientedUnlimitedGeometryCursor * NewNonOrientedUnlimitedGeometryCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
virtual void ComputeBounds()
Compute the hyper tree grid bounding box ignoring masked cells.
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
bool SupportsGhostArray(int type) override
Returns true if type is CELL, false otherwise.
void InitializeNonOrientedMooreSuperCursor(vtkHyperTreeGridNonOrientedMooreSuperCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkHyperTreeGridNonOrientedUnlimitedMooreSuperCursor * NewNonOrientedUnlimitedMooreSuperCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
unsigned int GetNumberOfLevels()
Return the number of levels in the hyper tree grid.
void SetDimensions(const unsigned int dims[3])
Set/Get sizes of this rectilinear grid dataset.
virtual unsigned int FindDichotomicZ(double value, double tol=0.0) const
vtkIdType GetShiftedLevelZeroIndex(vtkIdType, int, int, int) const
Return the root index of a root cell with given index displaced.
void SetDimensions(int i, int j, int k)
Set/Get sizes of this rectilinear grid dataset.
unsigned int GetChildMask(unsigned int)
Return hard-coded bitcode correspondng to child mask Dimension 1: Factor 2: 0: 100,...
vtkUnsignedCharArray * GetGhostCells()
Gets the array that defines the ghost type of each cell.
virtual void SetZCoordinates(vtkDataArray *)
Set/Get the grid coordinates in the z-direction.
vtkHyperTreeGridNonOrientedVonNeumannSuperCursor * NewNonOrientedVonNeumannSuperCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void SetIndexingModeToIJK()
Specify whether indexing mode of grid root cells must be transposed to x-axis first,...
vtkBitArray * GetPureMask()
Get or create pure material mask.
void InitializeTreeIterator(vtkHyperTreeGridIterator &it)
Initialize an iterator to browse level 0 trees.
bool HasAnyGhostCells() const
Returns true if a ghost cell array is defined.
void SetBranchFactor(unsigned int)
Set/Get the subdivision factor in the grid refinement scheme.
void InitializeNonOrientedUnlimitedMooreSuperCursor(vtkHyperTreeGridNonOrientedUnlimitedMooreSuperCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkIdType GetNumberOfLeaves()
Get the number of leaves in the primal tree grid.
void ShallowCopy(vtkDataObject *) override
Create shallow copy of hyper tree grid.
virtual double * GetBounds()
Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,...
unsigned int GetBranchFactor() const
Set/Get the subdivision factor in the grid refinement scheme.
vtkNew< vtkCellData > CellData
vtkHyperTreeGridNonOrientedMooreSuperCursor * NewNonOrientedMooreSuperCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void InitializeNonOrientedGeometryCursor(vtkHyperTreeGridNonOrientedGeometryCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void InitializeNonOrientedCursor(vtkHyperTreeGridNonOrientedCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
unsigned int GetNumberOfChildren() const
The number of children each node can have.
void InitializeNonOrientedVonNeumannSuperCursor(vtkHyperTreeGridNonOrientedVonNeumannSuperCursor *cursor, vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
void GetLevelZeroCoordinatesFromIndex(vtkIdType, unsigned int &, unsigned int &, unsigned int &) const
Convert the global index of a root to its Cartesian coordinates in the grid.
void SetDimensions(const int dims[3])
Set/Get sizes of this rectilinear grid dataset.
A data object structured as a tree.
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:108
Key for integer values in vtkInformation.
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
cell represents a 1D line
Definition vtkLine.h:132
Allocate and hold a VTK object.
Definition vtkNew.h:167
a cell that represents an orthogonal quadrilateral
Definition vtkPixel.h:66
represent and manipulate 3D points
Definition vtkPoints.h:139
record modification and/or execution time
dynamic, self-adjusting array of unsigned char
#define VTK_3D_EXTENT
#define VTK_DEPRECATED_IN_9_6_0(reason)
int vtkIdType
Definition vtkType.h:332
@ VTK_HYPER_TREE_GRID
Definition vtkType.h:112
#define VTK_SIZEHINT(...)
#define VTK_NEWINSTANCE