VTK  9.3.1
vtkHyperTreeGridNonOrientedSuperCursorLight.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
26 #ifndef vtkHyperTreeGridNonOrientedSuperCursorLight_h
27 #define vtkHyperTreeGridNonOrientedSuperCursorLight_h
28 
29 #include "vtkCommonDataModelModule.h" // For export macro
30 #include "vtkObject.h"
31 #include "vtkSmartPointer.h" // Used internally
32 
33 #include "vtkHyperTreeGridLevelEntry.h" // Used internally
34 
35 #include <cassert> // Used internally
36 #include <vector> // std::vector
37 
38 VTK_ABI_NAMESPACE_BEGIN
39 class vtkHyperTree;
40 class vtkHyperTreeGrid;
42 
43 class VTKCOMMONDATAMODEL_EXPORT vtkHyperTreeGridNonOrientedSuperCursorLight : public vtkObject
44 {
45 public:
47  void PrintSelf(ostream& os, vtkIndent indent) override;
48 
54 
59  virtual void Initialize(vtkHyperTreeGrid* grid, vtkIdType treeIndex, bool create = false) = 0;
60 
62 
65  vtkHyperTreeGrid* GetGrid();
67 
69 
72  bool HasTree();
74 
78  bool HasTree(unsigned int icursor);
79 
81 
84  vtkHyperTree* GetTree();
85  vtkHyperTree* GetTree(unsigned int icursor);
87 
91  vtkIdType GetVertexId();
92  vtkIdType GetVertexId(unsigned int icursor);
93 
98  vtkIdType GetGlobalNodeIndex();
99 
104  vtkIdType GetGlobalNodeIndex(unsigned int icursor);
105 
109  vtkHyperTree* GetInformation(
110  unsigned int icursor, unsigned int& level, bool& leaf, vtkIdType& id);
111 
116  unsigned char GetDimension();
117 
122  unsigned char GetNumberOfChildren();
123 
127  void SetGlobalIndexStart(vtkIdType index);
128 
132  void SetGlobalIndexFromLocal(vtkIdType index);
133 
137  double* GetOrigin();
138  double* GetSize();
139 
144  void SetMask(bool state);
145  void SetMask(unsigned int icursor, bool state);
146 
150  bool IsMasked();
151  bool IsMasked(unsigned int icursor);
152 
157  void GetBounds(double bounds[6]);
158 
163  void GetPoint(double point[3]);
164 
168  bool IsLeaf();
169  bool IsLeaf(unsigned int icursor);
170 
174  void SubdivideLeaf();
175 
179  bool IsRoot();
180 
184  unsigned int GetLevel();
185  unsigned int GetLevel(unsigned int icursor);
186 
192  void ToChild(unsigned char);
193 
199  void ToRoot();
200 
206  void ToParent();
207 
211  unsigned int GetNumberOfCursors() { return this->NumberOfCursors; }
212 
217 protected:
222 
227 
232 
236  // JB vtkNew< vtkHyperTreeGridNonOrientedGeometryCursor > CentralCursor;
238 
243  std::vector<unsigned int> FirstNonValidEntryByLevel;
244  std::vector<vtkHyperTreeGridLevelEntry> Entries;
245 
251  std::vector<unsigned int> ReferenceEntries;
252 
256  unsigned int GetIndiceEntry(unsigned int icursor)
257  {
258  assert("pre: icursor != IndiceCentralCursor" && icursor != this->IndiceCentralCursor);
259  assert("pre: valid_icursor" && icursor < this->NumberOfCursors);
260  if (icursor > this->IndiceCentralCursor)
261  {
262  assert("pre: valid_icursor" &&
263  0 <= long(this->FirstCurrentNeighboorReferenceEntry + icursor) - 1 &&
264  long(this->FirstCurrentNeighboorReferenceEntry + icursor) - 1 <
265  long(this->ReferenceEntries.size()));
266  assert("pre: valid_icursor" &&
267  this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry + icursor - 1] <
268  this->Entries.size());
269  return this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry + icursor - 1];
270  }
271  else
272  {
273  assert("pre: valid_icursor" &&
274  this->FirstCurrentNeighboorReferenceEntry + icursor < this->ReferenceEntries.size());
275  assert("pre: valid_icursor" &&
276  this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry + icursor] <
277  this->Entries.size());
278  return this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry + icursor];
279  }
280  }
281 
285  unsigned int GetIndicePreviousEntry(unsigned int icursor)
286  {
287  assert("pre: icursor != IndiceCentralCursor" && icursor != IndiceCentralCursor);
288  assert("pre: valid_icursor" && icursor < this->NumberOfCursors);
289  if (icursor > this->IndiceCentralCursor)
290  {
291  assert("pre: valid_icursor" &&
292  0 <=
293  long(this->FirstCurrentNeighboorReferenceEntry - (this->NumberOfCursors - 1) + icursor) -
294  1 &&
295  long(this->FirstCurrentNeighboorReferenceEntry - (this->NumberOfCursors - 1) + icursor) -
296  1 <
297  long(this->ReferenceEntries.size()));
298  assert("pre: valid_icursor" &&
299  this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry -
300  (this->NumberOfCursors - 1) + icursor - 1] < this->Entries.size());
301  return this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry -
302  (this->NumberOfCursors - 1) + icursor - 1];
303  }
304  else
305  {
306  assert("pre: valid_icursor" &&
307  this->FirstCurrentNeighboorReferenceEntry - (this->NumberOfCursors - 1) + icursor <
308  this->ReferenceEntries.size());
309  assert("pre: valid_icursor" &&
310  this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry -
311  (this->NumberOfCursors - 1) + icursor] < this->Entries.size());
312  return this->ReferenceEntries[this->FirstCurrentNeighboorReferenceEntry -
313  (this->NumberOfCursors - 1) + icursor];
314  }
315  }
316 
320  unsigned int IndiceCentralCursor;
321 
322  // Number of cursors in supercursor
323  unsigned int NumberOfCursors;
324 
325  // Super cursor traversal table to go retrieve the parent index for each cursor
326  // of the child node. There are f^d * NumberOfCursors entries in the table.
327  const unsigned int* ChildCursorToParentCursorTable;
328 
329  // Super cursor traversal table to go retrieve the child index for each cursor
330  // of the child node. There are f^d * NumberOfCursors entries in the table.
331  const unsigned int* ChildCursorToChildTable;
332 
333 private:
336  void operator=(const vtkHyperTreeGridNonOrientedSuperCursorLight&) = delete;
337 };
338 
339 VTK_ABI_NAMESPACE_END
340 #endif
void GetBounds(T a, double bds[6])
abstract base class for most VTK objects
Definition: vtkObject.h:51
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
unsigned int FirstCurrentNeighboorReferenceEntry
JB La derniere reference valide pour decrire tous les voisins.
A dataset containing a grid of vtkHyperTree instances arranged as a rectilinear grid.
vtkSmartPointer< vtkHyperTreeGridNonOrientedGeometryCursor > CentralCursor
JB.
int vtkIdType
Definition: vtkType.h:315
a simple class to control print indentation
Definition: vtkIndent.h:28
unsigned int GetIndicePreviousEntry(unsigned int icursor)
JB La valeur precedente.
void GetPoint(int i, int j, int k, double pnt[3])
A data object structured as a tree.
Definition: vtkHyperTree.h:168
vtkHyperTreeGrid * Grid
JB Reference sur l'hyper tree grid parcouru actuellement.
unsigned int CurrentFirstNonValidEntryByLevel
JB Hyper tree grid to which the cursor is attached.
bool HasTree(const T &e)