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 
72 class vtkBitArray;
73 class vtkBoundingBox;
74 class vtkCellLinks;
75 class vtkCollection;
76 class vtkDataArray;
77 class vtkHyperTree;
86 class vtkDoubleArray;
88 class vtkIdTypeArray;
89 class vtkLine;
90 class vtkPixel;
91 class vtkPoints;
92 class vtkCellData;
94 
95 class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGrid : public vtkDataObject
96 {
97 public:
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 
133  virtual void CopyStructure(vtkDataObject*);
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 
426 private:
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 
432 public:
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 
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 
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 
611  virtual void GetLevelZeroOriginFromIndex(vtkIdType, double*);
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 
742 protected:
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;
773 private:
774  unsigned int Orientation; // 0, 1, or 2
775  unsigned int Axis[2];
776 
777 protected:
778  unsigned int NumberOfChildren;
779  bool TransposedRootIndexing;
780 
781  // --------------------------------
782  // RectilinearGrid common fields
783  // --------------------------------
784 private:
785  unsigned int Dimensions[3]; // Just for GetDimensions
786  unsigned int CellDims[3]; // Just for GetCellDims
787 protected:
788  int DataDescription;
789  int Extent[6];
790 
791  bool WithCoordinates;
792  vtkDataArray* XCoordinates;
793  vtkDataArray* YCoordinates;
794  vtkDataArray* ZCoordinates;
795  // --------------------------------
796 
797  vtkBitArray* Mask;
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 
811 private:
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:33
create and manipulate ordered lists of objects
Definition: vtkCollection.h:53
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:50
general representation of visualization data
Definition: vtkDataObject.h:60
represent and manipulate attribute data in a dataset
dynamic, self-adjusting array of double
represent and manipulate fields of data
Definition: vtkFieldData.h:55
Objects for traversal a HyperTreeGrid.
Objects for traversal a HyperTreeGrid.
An iterator object to iteratively access trees in the grid.
vtkHyperTree * GetNextTree()
Get the next tree and set its index then increment the iterator.
std::map< vtkIdType, vtkSmartPointer< vtkHyperTree > >::iterator Iterator
void Initialize(vtkHyperTreeGrid *)
Initialize the iterator on the tree set of the given grid.
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.
int GetExtentType() override
Structured extent.
static vtkHyperTreeGrid * GetData(vtkInformationVector *v, int i=0)
Retrieve an instance of this class from an information object.
vtkHyperTreeGridNonOrientedCursor * NewNonOrientedCursor(vtkIdType index, bool create=false)
static vtkInformationIntegerKey * DIMENSION()
vtkIdType GetShiftedLevelZeroIndex(vtkIdType, unsigned int, unsigned int, unsigned int) const
Return the root index of a root cell with given index displaced.
vtkHyperTreeGridOrientedCursor * NewOrientedCursor(vtkIdType index, bool create=false)
static vtkInformationDoubleVectorKey * SIZES()
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.
const unsigned int * GetAxes() const
JB Get the axis information (used for CopyStructure)
virtual void GetLevelZeroOriginFromIndex(vtkIdType, double *)
JB Convert the global index of a root to its Spacial coordinates origin and size.
vtkHyperTreeGridNonOrientedVonNeumannSuperCursor * NewNonOrientedVonNeumannSuperCursor(vtkIdType index, bool create=false)
vtkUnsignedCharArray * AllocateTreeGhostArray()
Allocate ghost array for points.
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.
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.
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.
virtual double * GetBounds()
Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,...
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()
static vtkInformationIntegerKey * LEVELS()
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.
vtkBitArray * GetPureMask()
Get or create pure material mask.
vtkHyperTreeGridNonOrientedGeometryCursor * FindNonOrientedGeometryCursor(double x[3])
JB Retourne un curseur geometrique pointant une des mailles comportant la position spatiale x.
vtkIdType GetNumberOfNonEmptyTrees()
Get the number of non empty trees in this grid.
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...
virtual unsigned long GetActualMemorySizeBytes()
Return the actual size of the data in kibibytes (1024 bytes).
static vtkHyperTreeGrid * New()
void Get2DAxes(unsigned int &axis1, unsigned int &axis2) const
JB Retourne l'indice des deux dimensions valides.
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.
vtkHyperTreeGridNonOrientedMooreSuperCursor * NewNonOrientedMooreSuperCursor(vtkIdType index, bool create=false)
vtkHyperTreeGridNonOrientedVonNeumannSuperCursorLight * NewNonOrientedVonNeumannSuperCursorLight(vtkIdType index, bool create=false)
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.
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,...
virtual void SetZCoordinates(vtkDataArray *)
Set/Get the grid coordinates in the z-direction.
void SetIndexingModeToIJK()
Get the number or trees available along the 3 axis.
vtkHyperTreeGridNonOrientedGeometryCursor * NewNonOrientedGeometryCursor(vtkIdType index, bool create=false)
vtkUnsignedCharArray * GetGhostCells()
Accessor on ghost cells.
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.
vtkUnsignedCharArray * GetTreeGhostArray()
Gets the array that defines the ghost type of each point.
static vtkHyperTreeGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
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
vtkHyperTreeGridOrientedGeometryCursor * NewOrientedGeometryCursor(vtkIdType index, bool create=false)
unsigned int GetBranchFactor() const
Set/Get the subdivision factor in the grid refinement scheme.
vtkHyperTreeGridNonOrientedMooreSuperCursorLight * NewNonOrientedMooreSuperCursorLight(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.
const unsigned int * GetDimensions() const
Get dimensions of this rectilinear grid dataset.
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:34
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:31
Allocate and hold a VTK object.
Definition: vtkNew.h:56
a cell that represents an orthogonal quadrilateral
Definition: vtkPixel.h:35
represent and manipulate 3D points
Definition: vtkPoints.h:34
Hold a reference to a vtkObjectBase instance.
dynamic, self-adjusting array of unsigned char
void GetBounds(T a, double bds[6])
@ info
Definition: vtkX3D.h:382
@ value
Definition: vtkX3D.h:226
@ center
Definition: vtkX3D.h:236
@ extent
Definition: vtkX3D.h:351
@ type
Definition: vtkX3D.h:522
@ index
Definition: vtkX3D.h:252
#define VTK_3D_EXTENT
Definition: vtkDataObject.h:56
int vtkIdType
Definition: vtkType.h:332
#define VTK_HYPER_TREE_GRID
Definition: vtkType.h:109
#define VTK_SIZEHINT(...)