VTK  9.1.0
vtkHyperTreeGrid.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkHyperTreeGrid.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=========================================================================*/
59#ifndef vtkHyperTreeGrid_h
60#define vtkHyperTreeGrid_h
61
62#include "vtkCommonDataModelModule.h" // For export macro
63#include "vtkDataObject.h"
64
65#include "vtkNew.h" // vtkSmartPointer
66#include "vtkSmartPointer.h" // vtkSmartPointer
67
68#include <cassert> // std::assert
69#include <map> // std::map
70#include <memory> // std::shared_ptr
71
72class vtkBitArray;
73class vtkBoundingBox;
74class vtkCellLinks;
75class vtkCollection;
76class vtkDataArray;
77class vtkHyperTree;
86class vtkDoubleArray;
88class vtkIdTypeArray;
89class vtkLine;
90class vtkPixel;
91class vtkPoints;
92class vtkCellData;
94
95class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGrid : public vtkDataObject
96{
97public:
103
105 void PrintSelf(ostream& os, vtkIndent indent) override;
106
111 static constexpr vtkIdType InvalidIndex = ~0;
112
116 vtkSetStringMacro(ModeSqueeze); // By copy
117 vtkGetStringMacro(ModeSqueeze);
118
122 virtual void Squeeze();
123
127 int GetDataObjectType() override { return VTK_HYPER_TREE_GRID; }
128
134
139
140 // --------------------------------------------------------------------------
141 // RectilinearGrid common API
142 // --------------------------------------------------------------------------
143
145
148 void SetDimensions(const unsigned int dims[3]);
149 void SetDimensions(const int dims[3]);
150 void SetDimensions(unsigned int i, unsigned int j, unsigned int k);
151 void SetDimensions(int i, int j, int k);
153
155
159 const unsigned int* GetDimensions() const VTK_SIZEHINT(3);
160 // JB Dommage, car vtkGetVectorMacro(Dimensions,int,3); not const function
161 void GetDimensions(int dim[3]) const;
162 void GetDimensions(unsigned int dim[3]) const;
164
166
172 void SetExtent(const int extent[6]);
173 void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
174 vtkGetVector6Macro(Extent, int);
176
178
183 const unsigned int* GetCellDims() const VTK_SIZEHINT(3);
184 void GetCellDims(int cellDims[3]) const;
185 void GetCellDims(unsigned int cellDims[3]) const;
187
188 // --------------------------------------------------------------------------
189
191
195 unsigned int GetDimension() const { return this->Dimension; }
197
199
202 void Get1DAxis(unsigned int& axis) const
203 {
204 assert("pre: valid_dim" && this->GetDimension() == 1);
205 axis = this->Axis[0];
206 }
208
210
213 void Get2DAxes(unsigned int& axis1, unsigned int& axis2) const
214 {
215 assert("pre: valid_dim" && this->GetDimension() == 2);
216 axis1 = this->Axis[0];
217 axis2 = this->Axis[1];
218 }
220
222
225 const unsigned int* GetAxes() const { return this->Axis; }
227
229
232 // vtkGetMacro(NumberOfChildren, unsigned int); not const
233 unsigned int GetNumberOfChildren() const { return this->NumberOfChildren; }
235
245 // JB ?? virtual void GetNumberOfTreesPerDimension(unsigned int dimsOut[3]);
246
248
252 vtkSetMacro(TransposedRootIndexing, bool);
253 vtkGetMacro(TransposedRootIndexing, bool);
254 void SetIndexingModeToKJI() { this->SetTransposedRootIndexing(false); }
255 void SetIndexingModeToIJK() { this->SetTransposedRootIndexing(true); }
257
259
265 unsigned int GetOrientation() const { return this->Orientation; }
267
269
272 vtkGetMacro(FreezeState, bool);
274
276
279 void SetBranchFactor(unsigned int);
280 unsigned int GetBranchFactor() const { return this->BranchFactor; }
282
287
292
297
302
307
311 unsigned int GetNumberOfLevels();
312
314
318 vtkGetObjectMacro(XCoordinates, vtkDataArray);
320
322
326 vtkGetObjectMacro(YCoordinates, vtkDataArray);
328
330
334 vtkGetObjectMacro(ZCoordinates, vtkDataArray);
336
338
341 virtual void CopyCoordinates(const vtkHyperTreeGrid* output);
342 virtual void SetFixedCoordinates(unsigned int axis, double value);
344
346
350 vtkGetObjectMacro(Mask, vtkBitArray);
352
356 bool HasMask();
357
359
362 vtkSetMacro(HasInterface, bool);
363 vtkGetMacro(HasInterface, bool);
364 vtkBooleanMacro(HasInterface, bool);
366
368
371 vtkSetStringMacro(InterfaceNormalsName);
372 vtkGetStringMacro(InterfaceNormalsName);
374
376
379 vtkSetStringMacro(InterfaceInterceptsName);
380 vtkGetStringMacro(InterfaceInterceptsName);
382
384
387 vtkSetMacro(DepthLimiter, unsigned int);
388 vtkGetMacro(DepthLimiter, unsigned int);
390
395 vtkHyperTreeGridOrientedCursor* cursor, vtkIdType index, bool create = false);
397
402 vtkHyperTreeGridOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
404 vtkIdType index, bool create = false);
405
410 vtkHyperTreeGridNonOrientedCursor* cursor, vtkIdType index, bool create = false);
412
417 vtkHyperTreeGridNonOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
419 vtkIdType index, bool create = false);
420
425
426private:
427 unsigned int RecurseDichotomic(
428 double value, vtkDoubleArray* coord, unsigned int ideb, unsigned int ifin) const;
429
430 unsigned int FindDichotomic(double value, vtkDataArray* coord) const;
431
432public:
433 virtual unsigned int FindDichotomicX(double value) const;
434 virtual unsigned int FindDichotomicY(double value) const;
435 virtual unsigned int FindDichotomicZ(double value) const;
436
441 vtkHyperTreeGridNonOrientedVonNeumannSuperCursor* cursor, vtkIdType index, bool create = false);
443 vtkIdType index, bool create = false);
444
450 bool create = false);
452 vtkIdType index, bool create = false);
453
458 vtkHyperTreeGridNonOrientedMooreSuperCursor* cursor, vtkIdType index, bool create = false);
460 vtkIdType index, bool create = false);
461
466 vtkHyperTreeGridNonOrientedMooreSuperCursorLight* cursor, vtkIdType index, bool create = false);
468 vtkIdType index, bool create = false);
469
473 void Initialize() override;
474
479 virtual vtkHyperTree* GetTree(vtkIdType, bool create = false);
480
486
490 void ShallowCopy(vtkDataObject*) override;
491
495 void DeepCopy(vtkDataObject*) override;
496
500 int GetExtentType() override { return VTK_3D_EXTENT; }
501
510 virtual unsigned long GetActualMemorySizeBytes();
511
520 unsigned long GetActualMemorySize() override;
521
527
532
583 unsigned int GetChildMask(unsigned int);
584
588 void GetIndexFromLevelZeroCoordinates(vtkIdType&, unsigned int, unsigned int, unsigned int) const;
589
595 vtkIdType GetShiftedLevelZeroIndex(vtkIdType, unsigned int, unsigned int, unsigned int) const;
596
601 vtkIdType, unsigned int&, unsigned int&, unsigned int&) const;
602
606 virtual void GetLevelZeroOriginAndSizeFromIndex(vtkIdType, double*, double*);
607
612
622
629
634 bool HasAnyGhostCells() const;
635
640
646
651
655 class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGridIterator
656 {
657 public:
659
664
670
676
677 protected:
678 std::map<vtkIdType, vtkSmartPointer<vtkHyperTree>>::iterator Iterator;
680 };
681
687
689
695
701 virtual double* GetBounds() VTK_SIZEHINT(6);
702
708 void GetBounds(double bounds[6]);
709
714 double* GetCenter() VTK_SIZEHINT(3);
715
720 void GetCenter(double center[3]);
721
726 vtkCellData* GetCellData();
727
733 vtkFieldData* GetAttributesAsFieldData(int type) override;
734
740 vtkIdType GetNumberOfElements(int type) override;
741
742protected:
747
751 ~vtkHyperTreeGrid() override;
752
756 char* ModeSqueeze;
757
758 double Bounds[6]; // (xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds
759 double Center[3]; // geometric center
760
761 bool FreezeState;
762 unsigned int BranchFactor; // 2 or 3
763 unsigned int Dimension; // 1, 2, or 3
764
766
770 vtkUnsignedCharArray* TreeGhostArray;
771 bool TreeGhostArrayCached;
773private:
774 unsigned int Orientation; // 0, 1, or 2
775 unsigned int Axis[2];
776
777protected:
778 unsigned int NumberOfChildren;
779 bool TransposedRootIndexing;
780
781 // --------------------------------
782 // RectilinearGrid common fields
783 // --------------------------------
784private:
785 unsigned int Dimensions[3]; // Just for GetDimensions
786 unsigned int CellDims[3]; // Just for GetCellDims
787protected:
788 int DataDescription;
789 int Extent[6];
790
791 bool WithCoordinates;
792 vtkDataArray* XCoordinates;
793 vtkDataArray* YCoordinates;
794 vtkDataArray* ZCoordinates;
795 // --------------------------------
796
798 vtkBitArray* PureMask;
799 bool InitPureMask;
800
801 bool HasInterface;
802 char* InterfaceNormalsName;
803 char* InterfaceInterceptsName;
804
805 std::map<vtkIdType, vtkSmartPointer<vtkHyperTree>> HyperTrees;
806
807 vtkNew<vtkCellData> CellData; // Scalars, vectors, etc. associated w/ each point
808
809 unsigned int DepthLimiter;
810
811private:
812 vtkHyperTreeGrid(const vtkHyperTreeGrid&) = delete;
813 void operator=(const vtkHyperTreeGrid&) = delete;
814};
815
816#endif
dynamic, self-adjusting array of bits
Definition: vtkBitArray.h:34
Fast, simple class for representing and operating on 3D bounds.
represent and manipulate cell attribute data
Definition: vtkCellData.h:142
create and manipulate ordered lists of objects
Definition: vtkCollection.h:53
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
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
Definition: vtkFieldData.h:164
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)
vtkHyperTreeGridNonOrientedCursor * NewNonOrientedCursor(vtkIdType index, bool create=false)
vtkIdType GetShiftedLevelZeroIndex(vtkIdType, unsigned int, unsigned int, unsigned int) const
Return the root index of a root cell with given index displaced.
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 SetMask(vtkBitArray *)
Set/Get the blanking mask of primal leaf cells.
virtual void CopyCoordinates(const vtkHyperTreeGrid *output)
JB Augented services on Coordinates.
void InitializeNonOrientedVonNeumannSuperCursorLight(vtkHyperTreeGridNonOrientedVonNeumannSuperCursorLight *cursor, vtkIdType index, bool create=false)
JB.
virtual void GetLevelZeroOriginFromIndex(vtkIdType, double *)
JB Convert the global index of a root to its Spacial coordinates origin and size.
vtkHyperTreeGridNonOrientedVonNeumannSuperCursorLight * NewNonOrientedVonNeumannSuperCursorLight(vtkIdType index, bool create=false)
vtkHyperTreeGridOrientedCursor * NewOrientedCursor(vtkIdType index, bool create=false)
const unsigned int * GetDimensions() const
Get dimensions of this rectilinear grid dataset.
virtual unsigned int FindDichotomicX(double value) const
virtual void Squeeze()
Squeeze this representation.
virtual void SetFixedCoordinates(unsigned int axis, double value)
JB 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
JB 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)
JB.
virtual void CopyStructure(vtkDataObject *)
Copy the internal geometric and topological structure of a vtkHyperTreeGrid object.
const unsigned int * GetAxes() const
JB 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.
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.
bool RecursivelyInitializePureMask(vtkHyperTreeGridNonOrientedCursor *cursor, vtkDataArray *normale)
Recursively initialize pure material mask.
static vtkInformationIntegerKey * ORIENTATION()
vtkHyperTreeGridNonOrientedGeometryCursor * FindNonOrientedGeometryCursor(double x[3])
JB Retourne un curseur geometrique pointant une des mailles comportant la position spatiale x.
vtkUnsignedCharArray * GetTreeGhostArray()
Gets the array that defines the ghost type of each point.
void Initialize() override
Restore data object to initial state.
unsigned int GetOrientation() const
Get the orientation of 1D or 2D grids:
void SetIndexingModeToKJI()
Get the number or trees available along the 3 axis.
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 Spacial coordinates origin and size.
void InitializeNonOrientedMooreSuperCursorLight(vtkHyperTreeGridNonOrientedMooreSuperCursorLight *cursor, vtkIdType index, bool create=false)
JB.
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 kibibytes (1024 bytes).
vtkHyperTreeGridOrientedGeometryCursor * NewOrientedGeometryCursor(vtkIdType index, bool create=false)
void Get2DAxes(unsigned int &axis1, unsigned int &axis2) const
JB 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)
vtkIdType GetGlobalNodeIndexMax()
JB Retourne la valeur maximale du global index.
void InitializeOrientedCursor(vtkHyperTreeGridOrientedCursor *cursor, vtkIdType index, bool create=false)
JB.
void InitializeLocalIndexNode()
JB Permet d'initialiser les index locaux de chacun des HT de cet HTG une fois que TOUS les HTs aient ...
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
void InitializeNonOrientedMooreSuperCursor(vtkHyperTreeGridNonOrientedMooreSuperCursor *cursor, vtkIdType index, bool create=false)
JB.
void InitializeTreeIterator(vtkHyperTreeGridIterator &)
Initialize an iterator to browse level 0 trees.
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 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()
Accessor on ghost cells.
virtual void SetZCoordinates(vtkDataArray *)
Set/Get the grid coordinates in the z-direction.
vtkHyperTreeGridNonOrientedVonNeumannSuperCursor * NewNonOrientedVonNeumannSuperCursor(vtkIdType index, bool create=false)
void SetIndexingModeToIJK()
Get the number or trees available along the 3 axis.
static vtkHyperTreeGrid * New()
vtkBitArray * GetPureMask()
Get or create pure material mask.
vtkIdType GetMaxNumberOfTrees()
Return the maximum number of trees in the level 0 grid.
bool HasAnyGhostCells() const
Returns 1 if there are any ghost cells 0 otherwise.
void SetBranchFactor(unsigned int)
Set/Get the subdivision factor in the grid refinement scheme.
vtkIdType GetNumberOfLeaves()
Get the number of leaves in the primal tree grid.
void ShallowCopy(vtkDataObject *) override
Create shallow copy of hyper tree grid.
virtual unsigned int FindDichotomicZ(double value) const
virtual unsigned int FindDichotomicY(double value) const
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)
void InitializeNonOrientedGeometryCursor(vtkHyperTreeGridNonOrientedGeometryCursor *cursor, vtkIdType index, bool create=false)
JB.
void InitializeNonOrientedCursor(vtkHyperTreeGridNonOrientedCursor *cursor, vtkIdType index, bool create=false)
JB.
unsigned int GetNumberOfChildren() const
The number of children each node can have.
void InitializeNonOrientedVonNeumannSuperCursor(vtkHyperTreeGridNonOrientedVonNeumannSuperCursor *cursor, vtkIdType index, bool create=false)
JB.
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.
vtkIdType GetNumberOfVertices()
Get the number of vertices in the primal tree grid.
void SetDimensions(const int dims[3])
Set/Get sizes of this rectilinear grid dataset.
A data object structured as a tree.
Definition: vtkHyperTree.h:177
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:113
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:140
Allocate and hold a VTK object.
Definition: vtkNew.h:165
a cell that represents an orthogonal quadrilateral
Definition: vtkPixel.h:74
represent and manipulate 3D points
Definition: vtkPoints.h:143
Hold a reference to a vtkObjectBase instance.
dynamic, self-adjusting array of unsigned char
#define VTK_3D_EXTENT
int vtkIdType
Definition: vtkType.h:332
#define VTK_HYPER_TREE_GRID
Definition: vtkType.h:109
#define VTK_SIZEHINT(...)