VTK  9.0.2
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 // #include "vtkPointData.h" // vtkPointData
68 
69 #include <cassert> // std::assert
70 #include <map> // std::map
71 #include <memory> // std::shared_ptr
72 
73 class vtkBitArray;
74 class vtkBoundingBox;
75 class vtkCellLinks;
76 class vtkCollection;
77 class vtkDataArray;
78 class vtkHyperTree;
87 class vtkDoubleArray;
89 class vtkIdTypeArray;
90 class vtkLine;
91 class vtkPixel;
92 class vtkPoints;
93 class vtkPointData;
95 
96 class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGrid : public vtkDataObject
97 {
98 public:
104 
106  void PrintSelf(ostream& os, vtkIndent indent) override;
107 
112  static constexpr vtkIdType InvalidIndex = ~0;
113 
117  vtkSetStringMacro(ModeSqueeze); // By copy
118  vtkGetStringMacro(ModeSqueeze);
119 
123  virtual void Squeeze();
124 
128  int GetDataObjectType() override { return VTK_HYPER_TREE_GRID; }
129 
134  virtual void CopyStructure(vtkDataObject*);
135 
140 
141  // --------------------------------------------------------------------------
142  // RectilinearGrid common API
143  // --------------------------------------------------------------------------
144 
146 
149  void SetDimensions(const unsigned int dims[3]);
150  void SetDimensions(const int dims[3]);
151  void SetDimensions(unsigned int i, unsigned int j, unsigned int k);
152  void SetDimensions(int i, int j, int k);
154 
156 
160  const unsigned int* GetDimensions() const VTK_SIZEHINT(3);
161  // JB Dommage, car vtkGetVectorMacro(Dimensions,int,3); not const function
162  void GetDimensions(int dim[3]) const;
163  void GetDimensions(unsigned int dim[3]) const;
165 
167 
173  void SetExtent(const int extent[6]);
174  void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
175  vtkGetVector6Macro(Extent, int);
177 
179 
184  const unsigned int* GetCellDims() const VTK_SIZEHINT(3);
185  void GetCellDims(int cellDims[3]) const;
186  void GetCellDims(unsigned int cellDims[3]) const;
188 
189  // --------------------------------------------------------------------------
190 
192 
196  unsigned int GetDimension() const { return this->Dimension; }
198 
200 
203  void Get1DAxis(unsigned int& axis) const
204  {
205  assert("pre: valid_dim" && this->GetDimension() == 1);
206  axis = this->Axis[0];
207  }
209 
211 
214  void Get2DAxes(unsigned int& axis1, unsigned int& axis2) const
215  {
216  assert("pre: valid_dim" && this->GetDimension() == 2);
217  axis1 = this->Axis[0];
218  axis2 = this->Axis[1];
219  }
221 
223 
226  const unsigned int* GetAxes() const { return this->Axis; }
228 
230 
233  // vtkGetMacro(NumberOfChildren, unsigned int); not const
234  unsigned int GetNumberOfChildren() const { return this->NumberOfChildren; }
236 
246  // JB ?? virtual void GetNumberOfTreesPerDimension(unsigned int dimsOut[3]);
247 
249 
253  vtkSetMacro(TransposedRootIndexing, bool);
254  vtkGetMacro(TransposedRootIndexing, bool);
255  void SetIndexingModeToKJI() { this->SetTransposedRootIndexing(false); }
256  void SetIndexingModeToIJK() { this->SetTransposedRootIndexing(true); }
258 
260 
266  unsigned int GetOrientation() const { return this->Orientation; }
268 
270 
273  vtkGetMacro(FreezeState, bool);
275 
277 
280  void SetBranchFactor(unsigned int);
281  unsigned int GetBranchFactor() const { return this->BranchFactor; }
283 
288 
293 
298 
303 
307  unsigned int GetNumberOfLevels();
308 
310 
314  vtkGetObjectMacro(XCoordinates, vtkDataArray);
316 
318 
322  vtkGetObjectMacro(YCoordinates, vtkDataArray);
324 
326 
330  vtkGetObjectMacro(ZCoordinates, vtkDataArray);
332 
334 
337  virtual void CopyCoordinates(const vtkHyperTreeGrid* output);
338  virtual void SetFixedCoordinates(unsigned int axis, double value);
340 
342 
346  vtkGetObjectMacro(Mask, vtkBitArray);
348 
352  bool HasMask();
353 
355 
358  vtkSetMacro(HasInterface, bool);
359  vtkGetMacro(HasInterface, bool);
360  vtkBooleanMacro(HasInterface, bool);
362 
364 
367  vtkSetStringMacro(InterfaceNormalsName);
368  vtkGetStringMacro(InterfaceNormalsName);
370 
372 
375  vtkSetStringMacro(InterfaceInterceptsName);
376  vtkGetStringMacro(InterfaceInterceptsName);
378 
380 
383  vtkSetMacro(DepthLimiter, unsigned int);
384  vtkGetMacro(DepthLimiter, unsigned int);
386 
391  vtkHyperTreeGridOrientedCursor* cursor, vtkIdType index, bool create = false);
393 
398  vtkHyperTreeGridOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
400  vtkIdType index, bool create = false);
401 
406  vtkHyperTreeGridNonOrientedCursor* cursor, vtkIdType index, bool create = false);
408 
413  vtkHyperTreeGridNonOrientedGeometryCursor* cursor, vtkIdType index, bool create = false);
415  vtkIdType index, bool create = false);
416 
421 
422 private:
423  unsigned int RecurseDichotomic(
424  double value, vtkDoubleArray* coord, unsigned int ideb, unsigned int ifin) const;
425 
426  unsigned int FindDichotomic(double value, vtkDataArray* coord) const;
427 
428 public:
429  virtual unsigned int FindDichotomicX(double value) const;
430  virtual unsigned int FindDichotomicY(double value) const;
431  virtual unsigned int FindDichotomicZ(double value) const;
432 
439  vtkIdType index, bool create = false);
440 
446  bool create = false);
448  vtkIdType index, bool create = false);
449 
454  vtkHyperTreeGridNonOrientedMooreSuperCursor* cursor, vtkIdType index, bool create = false);
456  vtkIdType index, bool create = false);
457 
464  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 
523 
528 
579  unsigned int GetChildMask(unsigned int);
580 
584  void GetIndexFromLevelZeroCoordinates(vtkIdType&, unsigned int, unsigned int, unsigned int) const;
585 
591  vtkIdType GetShiftedLevelZeroIndex(vtkIdType, unsigned int, unsigned int, unsigned int) const;
592 
597  vtkIdType, unsigned int&, unsigned int&, unsigned int&) const;
598 
602  virtual void GetLevelZeroOriginAndSizeFromIndex(vtkIdType, double*, double*);
603 
607  virtual void GetLevelZeroOriginFromIndex(vtkIdType, double*);
608 
618 
625 
630  bool HasAnyGhostCells() const;
631 
636 
642 
647 
651  class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGridIterator
652  {
653  public:
655 
660 
666 
672 
673  protected:
674  std::map<vtkIdType, vtkSmartPointer<vtkHyperTree> >::iterator Iterator;
676  };
677 
683 
685 
691 
697  virtual double* GetBounds() VTK_SIZEHINT(6);
698 
704  void GetBounds(double bounds[6]);
705 
710  double* GetCenter() VTK_SIZEHINT(3);
711 
716  void GetCenter(double center[3]);
717 
719 
723  vtkPointData* GetPointData();
725 
726 protected:
731 
735  virtual ~vtkHyperTreeGrid() override;
736 
740  char* ModeSqueeze;
741 
742  double Bounds[6]; // (xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds
743  double Center[3]; // geometric center
744 
745  bool FreezeState;
746  unsigned int BranchFactor; // 2 or 3
747  unsigned int Dimension; // 1, 2, or 3
748 
750 
754  vtkUnsignedCharArray* TreeGhostArray;
755  bool TreeGhostArrayCached;
757 private:
758  unsigned int Orientation; // 0, 1, or 2
759  unsigned int Axis[2];
760 
761 protected:
762  unsigned int NumberOfChildren;
763  bool TransposedRootIndexing;
764 
765  // --------------------------------
766  // RectilinearGrid common fields
767  // --------------------------------
768 private:
769  unsigned int Dimensions[3]; // Just for GetDimensions
770  unsigned int CellDims[3]; // Just for GetCellDims
771 protected:
772  int DataDescription;
773  int Extent[6];
774 
775  bool WithCoordinates;
776  vtkDataArray* XCoordinates;
777  vtkDataArray* YCoordinates;
778  vtkDataArray* ZCoordinates;
779  // --------------------------------
780 
781  vtkBitArray* Mask;
782  vtkBitArray* PureMask;
783  bool InitPureMask;
784 
785  bool HasInterface;
786  char* InterfaceNormalsName;
787  char* InterfaceInterceptsName;
788 
789  std::map<vtkIdType, vtkSmartPointer<vtkHyperTree> > HyperTrees;
790 
791  vtkNew<vtkPointData> PointData; // Scalars, vectors, etc. associated w/ each point
792 
793  unsigned int DepthLimiter;
794 
795 private:
796  vtkHyperTreeGrid(const vtkHyperTreeGrid&) = delete;
797  void operator=(const vtkHyperTreeGrid&) = delete;
798 };
799 
800 #endif
dynamic, self-adjusting array of bits
Definition: vtkBitArray.h:34
Fast, simple class for dealing with 3D bounds.
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
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)
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)
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 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)
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.
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)
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.
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
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])
A data object structured as a tree.
Definition: vtkHyperTree.h:179
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:30
Allocate and hold a VTK object.
Definition: vtkNew.h:56
a cell that represents an orthogonal quadrilateral
Definition: vtkPixel.h:35
represent and manipulate point attribute data
Definition: vtkPointData.h:32
represent and manipulate 3D points
Definition: vtkPoints.h:34
Hold a reference to a vtkObjectBase instance.
dynamic, self-adjusting array of unsigned char
@ info
Definition: vtkX3D.h:382
@ value
Definition: vtkX3D.h:226
@ center
Definition: vtkX3D.h:236
@ extent
Definition: vtkX3D.h:351
@ index
Definition: vtkX3D.h:252
#define VTK_3D_EXTENT
Definition: vtkDataObject.h:56
int vtkIdType
Definition: vtkType.h:338
#define VTK_HYPER_TREE_GRID
Definition: vtkType.h:117
#define VTK_SIZEHINT(...)