VTK  9.3.20240424
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
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 }
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 }
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);
235 void SetIndexingModeToKJI() { this->SetTransposedRootIndexing(false); }
236 void SetIndexingModeToIJK() { this->SetTransposedRootIndexing(true); }
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
754 double* GetCenter() VTK_SIZEHINT(3);
755
760 void GetCenter(double center[3]);
761
766 vtkCellData* GetCellData();
767
773 vtkFieldData* GetAttributesAsFieldData(int type) override;
774
780 vtkIdType GetNumberOfElements(int type) override;
781
786 vtkIdType GetNumberOfCells();
787
788protected:
793
797 ~vtkHyperTreeGrid() override;
798
802 char* ModeSqueeze;
803
804 double Bounds[6]; // (xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds
805 double Center[3]; // geometric center
806
807 bool FreezeState;
808 unsigned int BranchFactor; // 2 or 3
809 unsigned int Dimension; // 1, 2, or 3
810
812
816 vtkUnsignedCharArray* TreeGhostArray;
817 bool TreeGhostArrayCached;
819private:
820 unsigned int Orientation; // 0, 1, or 2
821 unsigned int Axis[2];
822
823 vtkTimeStamp ComputeTime;
824
825protected:
826 unsigned int NumberOfChildren;
827 bool TransposedRootIndexing;
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:
836 int DataDescription;
837 int Extent[6];
838
839 bool WithCoordinates;
840 vtkDataArray* XCoordinates;
841 vtkDataArray* YCoordinates;
842 vtkDataArray* ZCoordinates;
843 // --------------------------------
844
846 vtkBitArray* PureMask;
847
848 bool HasInterface;
849 char* InterfaceNormalsName;
850 char* InterfaceInterceptsName;
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
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
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.
A dataset containing a grid of vtkHyperTree instances arranged as a rectilinear 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.
vtkHyperTreeGridNonOrientedCursor * NewNonOrientedCursor(vtkIdType index, bool create=false)
Used to initialize a cursor of the given type.
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...
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.
virtual void Squeeze()
Squeeze this representation.
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
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.
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
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.
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()
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()
unsigned int GetBranchFactor() const
Set/Get the subdivision factor in the grid refinement scheme.
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.
int GetDataObjectType() override
Return what type of dataset this is.
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:160
a cell that represents an orthogonal quadrilateral
Definition vtkPixel.h:66
represent and manipulate 3D points
Definition vtkPoints.h:139
Hold a reference to a vtkObjectBase instance.
record modification and/or execution time
dynamic, self-adjusting array of unsigned char
#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