VTK  9.4.20251007
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
48
49#ifndef vtkHyperTreeGrid_h
50#define vtkHyperTreeGrid_h
51
52#include "vtkCommonDataModelModule.h" // For export macro
53#include "vtkDataObject.h"
54
55#include "vtkNew.h" // vtkSmartPointer
56#include "vtkSmartPointer.h" // vtkSmartPointer
57
58#include <cassert> // std::assert
59#include <map> // std::map
60#include <memory> // std::shared_ptr
61
62VTK_ABI_NAMESPACE_BEGIN
63class vtkBitArray;
64class vtkBoundingBox;
65class vtkCellLinks;
66class vtkCollection;
67class vtkDataArray;
68class vtkHyperTree;
79class vtkDoubleArray;
81class vtkIdTypeArray;
82class vtkLine;
83class vtkPixel;
84class vtkPoints;
85class vtkCellData;
87
88class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGrid : public vtkDataObject
89{
90public:
96
98 void PrintSelf(ostream& os, vtkIndent indent) override;
99
104 static constexpr vtkIdType InvalidIndex = ~0;
105
109 vtkSetStringMacro(ModeSqueeze); // By copy
110 vtkGetStringMacro(ModeSqueeze);
111
115 virtual void Squeeze();
116
120 int GetDataObjectType() override { return VTK_HYPER_TREE_GRID; }
121
127
132
133 // --------------------------------------------------------------------------
134 // RectilinearGrid common API
135 // --------------------------------------------------------------------------
136
138
141 void SetDimensions(const unsigned int dims[3]);
142 void SetDimensions(const int dims[3]);
143 void SetDimensions(unsigned int i, unsigned int j, unsigned int k);
144 void SetDimensions(int i, int j, int k);
146
148
152 const unsigned int* GetDimensions() const VTK_SIZEHINT(3);
153 void GetDimensions(int dim[3]) const;
154 void GetDimensions(unsigned int dim[3]) const;
156
158
164 void SetExtent(const int extent[6]);
165 void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
166 vtkGetVector6Macro(Extent, int);
168
170
175 const unsigned int* GetCellDims() const VTK_SIZEHINT(3);
176 void GetCellDims(int cellDims[3]) const;
177 void GetCellDims(unsigned int cellDims[3]) const;
179
180 // --------------------------------------------------------------------------
181
183
187 unsigned int GetDimension() const { return this->Dimension; }
189
191
194 void Get1DAxis(unsigned int& axis) const
195 {
196 assert("pre: valid_dim" && this->GetDimension() == 1);
197 axis = this->Axis[0];
198 }
199
200
202
205 void Get2DAxes(unsigned int& axis1, unsigned int& axis2) const
206 {
207 assert("pre: valid_dim" && this->GetDimension() == 2);
208 axis1 = this->Axis[0];
209 axis2 = this->Axis[1];
210 }
211
212
214
217 const unsigned int* GetAxes() const { return this->Axis; }
219
221
224 // vtkGetMacro(NumberOfChildren, unsigned int); not const
225 unsigned int GetNumberOfChildren() const { return this->NumberOfChildren; }
227
229
233 vtkSetMacro(TransposedRootIndexing, bool);
234 vtkGetMacro(TransposedRootIndexing, bool);
238
240
246 unsigned int GetOrientation() const { return this->Orientation; }
248
250
253 vtkGetMacro(FreezeState, bool);
255
257
260 void SetBranchFactor(unsigned int);
261 unsigned int GetBranchFactor() const { return this->BranchFactor; }
263
268
273
278
283
287 unsigned int GetNumberOfLevels();
288
290
294 vtkGetObjectMacro(XCoordinates, vtkDataArray);
296
298
302 vtkGetObjectMacro(YCoordinates, vtkDataArray);
304
306
310 vtkGetObjectMacro(ZCoordinates, vtkDataArray);
312
314
317 virtual void CopyCoordinates(const vtkHyperTreeGrid* output);
318 virtual void SetFixedCoordinates(unsigned int axis, double value);
320
322
326 vtkGetObjectMacro(Mask, vtkBitArray);
328
332 bool HasMask();
333
335
338 vtkSetMacro(HasInterface, bool);
339 vtkGetMacro(HasInterface, bool);
340 vtkBooleanMacro(HasInterface, bool);
342
344
347 vtkSetStringMacro(InterfaceNormalsName);
348 vtkGetStringMacro(InterfaceNormalsName);
350
352
355 vtkSetStringMacro(InterfaceInterceptsName);
356 vtkGetStringMacro(InterfaceInterceptsName);
358
360
363 vtkSetMacro(DepthLimiter, unsigned int);
364 vtkGetMacro(DepthLimiter, unsigned int);
366
368
378 vtkHyperTreeGridOrientedCursor* cursor, vtkIdType index, bool create = false);
381
383 vtkHyperTreeGridOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
386 vtkIdType index, bool create = false);
387
389 vtkHyperTreeGridNonOrientedCursor* cursor, vtkIdType index, bool create = false);
392
394 vtkHyperTreeGridNonOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
397 vtkIdType index, bool create = false);
398
401 bool create = false);
404 vtkIdType index, bool create = false);
406
411
412private:
413 unsigned int RecurseDichotomic(
414 double value, vtkDoubleArray* coord, double tol, unsigned int ideb, unsigned int ifin) const;
415
416 unsigned int FindDichotomic(double value, vtkDataArray* coord, double tol) const;
417
418public:
419 virtual unsigned int FindDichotomicX(double value, double tol = 0.0) const;
420 virtual unsigned int FindDichotomicY(double value, double tol = 0.0) const;
421 virtual unsigned int FindDichotomicZ(double value, double tol = 0.0) const;
422
424
434 vtkHyperTreeGridNonOrientedVonNeumannSuperCursor* cursor, vtkIdType index, bool create = false);
437 vtkIdType index, bool create = false);
438
441 bool create = false);
444 vtkIdType index, bool create = false);
445
447 vtkHyperTreeGridNonOrientedMooreSuperCursor* cursor, vtkIdType index, bool create = false);
450 vtkIdType index, bool create = false);
451
453 vtkHyperTreeGridNonOrientedMooreSuperCursorLight* cursor, vtkIdType index, bool create = false);
456 vtkIdType index, bool create = false);
457
460 bool create = false);
463 vtkIdType index, bool create = false);
465
469 void Initialize() override;
470
475 virtual vtkHyperTree* GetTree(vtkIdType, bool create = false);
476
482
486 void ShallowCopy(vtkDataObject*) override;
487
491 void DeepCopy(vtkDataObject*) override;
492
496 int GetExtentType() override { return VTK_3D_EXTENT; }
497
506 virtual unsigned long GetActualMemorySizeBytes();
507
516 unsigned long GetActualMemorySize() override;
517
521 bool SupportsGhostArray(int type) override;
522
523private:
527 bool RecursivelyInitializePureMask(vtkHyperTreeGridNonOrientedCursor*, vtkDataArray*);
528
535 void CleanPureMask();
536
537public:
560
611 unsigned int GetChildMask(unsigned int);
612
616 void GetIndexFromLevelZeroCoordinates(vtkIdType&, unsigned int, unsigned int, unsigned int) const;
617
629
634 vtkIdType, unsigned int&, unsigned int&, unsigned int&) const;
635
639 virtual void GetLevelZeroOriginAndSizeFromIndex(vtkIdType, double*, double*);
640
645
651
656
660 bool HasAnyGhostCells() const;
661
667
674
679
683 class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGridIterator
684 {
685 public:
687
692
698
704
705 protected:
706 std::map<vtkIdType, vtkSmartPointer<vtkHyperTree>>::iterator Iterator;
708 };
709
715
717
723
728 virtual void ComputeBounds();
729
731
739 virtual double* GetBounds() VTK_SIZEHINT(6);
740 void GetBounds(double bounds[6]);
742
748 virtual void GetGridBounds(double bounds[6]);
749
755
760 void GetCenter(double center[3]);
761
767
774
780 vtkIdType GetNumberOfElements(int type) override;
781
787
788protected:
793
797 ~vtkHyperTreeGrid() override;
798
803
804 double Bounds[6]; // (xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds
805 double Center[3]; // geometric center
806
808 unsigned int BranchFactor; // 2 or 3
809 unsigned int Dimension; // 1, 2, or 3
810
812
819private:
820 unsigned int Orientation; // 0, 1, or 2
821 unsigned int Axis[2];
822
823 vtkTimeStamp ComputeTime;
824
825protected:
826 unsigned int NumberOfChildren;
828
829 // --------------------------------
830 // RectilinearGrid common fields
831 // --------------------------------
832private:
833 unsigned int Dimensions[3]; // Just for GetDimensions
834 unsigned int CellDims[3]; // Just for GetCellDims
835protected:
837 int Extent[6];
838
843 // --------------------------------
844
847
851
853
854 vtkNew<vtkCellData> CellData; // Scalars, vectors, etc. associated w/ each point
855
856 unsigned int DepthLimiter;
857
858private:
859 vtkHyperTreeGrid(const vtkHyperTreeGrid&) = delete;
860 void operator=(const vtkHyperTreeGrid&) = delete;
861};
862
863VTK_ABI_NAMESPACE_END
864#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
Definition vtkCellData.h:32
create and manipulate ordered lists of objects
represent and manipulate attribute data in a dataset
dynamic, self-adjusting array of double
represent and manipulate fields of data
Objects for traversal a HyperTreeGrid.
Objects for traversal a HyperTreeGrid.
An iterator object to iteratively access trees in the 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.
void Initialize(vtkHyperTreeGrid *)
Initialize the iterator on the tree set of the given grid.
bool HasMask()
Determine whether blanking mask is empty or not.
int GetExtentType() override
Structured extent.
vtkHyperTreeGridNonOrientedMooreSuperCursorLight * NewNonOrientedMooreSuperCursorLight(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkFieldData * GetAttributesAsFieldData(int type) override
Returns the hypertree node field data stored as cell data.
vtkHyperTreeGridNonOrientedCursor * NewNonOrientedCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
vtkIdType GetNumberOfCells()
Return the number of cells.
const unsigned int * GetCellDims() const
Get grid sizes of this structured cells dataset.
virtual vtkHyperTree * GetTree(vtkIdType, bool create=false)
Return tree located at given index of hyper tree grid NB: This will construct a new HyperTree if grid...
vtkBitArray * PureMask
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)
Augented services on 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.
vtkUnsignedCharArray * TreeGhostArray
These arrays pointers are caches used to avoid a string comparison (when getting ghost arrays using G...
double * GetCenter()
Get the center of the bounding box.
virtual void Squeeze()
Squeeze this representation.
bool TreeGhostArrayCached
These arrays pointers are caches used to avoid a string comparison (when getting ghost arrays using G...
std::map< vtkIdType, vtkSmartPointer< vtkHyperTree > > HyperTrees
virtual void SetFixedCoordinates(unsigned int axis, double value)
Augented services on 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
Retourne l'indice de la dimension valide.
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.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void SetXCoordinates(vtkDataArray *)
Set/Get the grid coordinates in the x-direction.
static vtkInformationIntegerKey * ORIENTATION()
virtual unsigned int FindDichotomicY(double value, double tol=0.0) const
vtkCellData * GetCellData()
Return a pointer to this dataset's hypertree node data.
vtkIdType GetNumberOfElements(int type) override
Returns the number of nodes.
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:
static constexpr vtkIdType InvalidIndex
Invalid index that is returned for undefined nodes, for example for nodes that are out of bounds (the...
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.
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
unsigned int DepthLimiter
void SetDimensions(unsigned int i, unsigned int j, unsigned int k)
Set/Get sizes of this rectilinear grid dataset.
vtkDataArray * ZCoordinates
vtkDataArray * YCoordinates
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.
char * ModeSqueeze
ModeSqueeze.
void Get2DAxes(unsigned int &axis1, unsigned int &axis2) const
Retourne l'indice des deux dimensions valides.
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.
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.
void InitializeTreeIterator(vtkHyperTreeGridIterator &)
Initialize an iterator to browse level 0 trees.
unsigned int Dimension
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.
static vtkInformationIntegerKey * DIMENSION()
static vtkInformationIntegerKey * LEVELS()
void SetExtent(const int extent[6])
Different ways to set the extent of the data array.
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,...
static vtkHyperTreeGrid * New()
vtkBitArray * GetPureMask()
Get or create pure material mask.
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,...
static vtkInformationDoubleVectorKey * SIZES()
vtkHyperTreeGrid()
Constructor with default bounds (0,1, 0,1, 0,1).
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 GetDimension() const
Get the dimensionality of the grid deduite a partir de Dimensions/Extent.
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.
int GetDataObjectType() override
Return what type of dataset this is.
virtual void GetGridBounds(double bounds[6])
Return a pointer to the grid bounding box in the form (xmin,xmax, ymin,ymax, zmin,...
virtual void SetTransposedRootIndexing(bool)
Specify whether indexing mode of grid root cells must be transposed to x-axis first,...
unsigned int NumberOfChildren
unsigned int BranchFactor
vtkDataArray * XCoordinates
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:29
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:23
Allocate and hold a VTK object.
Definition vtkNew.h:58
a cell that represents an orthogonal quadrilateral
Definition vtkPixel.h:27
represent and manipulate 3D points
Definition vtkPoints.h:30
Hold a reference to a vtkObjectBase instance.
record modification and/or execution time
dynamic, self-adjusting array of unsigned char
#define vtkDataArray
#define VTK_3D_EXTENT
int vtkIdType
Definition vtkType.h:315
#define VTK_HYPER_TREE_GRID
Definition vtkType.h:97
#define VTK_SIZEHINT(...)
#define VTK_NEWINSTANCE