VTK  9.7.1
vtkSphericalPointIterator.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
3 
65 #ifndef vtkSphericalPointIterator_h
66 #define vtkSphericalPointIterator_h
67 
68 #include "vtkCommonDataModelModule.h" // For export macro
69 #include "vtkDataSet.h" // the dataset and its points to iterate over
70 #include "vtkDoubleArray.h" // For axes
71 #include "vtkObject.h"
72 #include "vtkSmartPointer.h" // auto destruct
73 
74 #include <memory> // for std::unique_ptr
75 
76 VTK_ABI_NAMESPACE_BEGIN
77 class vtkDoubleArray;
78 class vtkPolyData;
79 
80 class VTKCOMMONDATAMODEL_EXPORT vtkSphericalPointIterator : public vtkObject
81 {
82 public:
84 
89  vtkAbstractTypeMacro(vtkSphericalPointIterator, vtkObject);
90  void PrintSelf(ostream& os, vtkIndent indent) override;
92 
94 
97  vtkSetSmartPointerMacro(DataSet, vtkDataSet);
98  vtkGetSmartPointerMacro(DataSet, vtkDataSet);
100 
102 
115  vtkSetSmartPointerMacro(Axes, vtkDoubleArray);
116  vtkGetSmartPointerMacro(Axes, vtkDoubleArray);
118 
130  enum AxesType
131  {
132  XY_CW_AXES = 0, // axes clockwise around center in x-y plane (resolution required)
133  XY_CCW_AXES = 1, // axes counterclockwise around center (resolution required)
134  XY_SQUARE_AXES = 2, // axes +x,-x, +y,-y: axes through the four faces of a square
135  CUBE_AXES = 3, // axes +x,-x, +y,-y, +z,-z: axes through the six faces of a cube
136  OCTAHEDRON_AXES = 4, // axes through the eight faces of a regular octahedron
137  CUBE_OCTAHEDRON_AXES =
138  5, // axes through the eight faces of a regular octahedron and six faces of a cube
139  DODECAHEDRON_AXES = 6, // axes through the twelve faces of a dedecahdron
140  ICOSAHEDRON_AXES = 7, // axes through the twenty faces of a icosahedron
141  };
142 
149  void SetAxes(int axesType, int resolution = 6);
150 
159  enum SortType
160  {
161  SORT_NONE = 0,
162  SORT_ASCENDING = 1,
163  SORT_DESCENDING = 2
164  };
165 
167 
174  vtkSetClampMacro(Sorting, int, SORT_NONE, SORT_DESCENDING);
175  vtkGetMacro(Sorting, int);
176  void SetSortTypeToNone() { this->SetSorting(SORT_NONE); }
177  void SetSortTypeToAscending() { this->SetSorting(SORT_ASCENDING); }
178  void SetSortTypeToDescending() { this->SetSorting(SORT_DESCENDING); }
180 
181  // The following methods support point iteration. The data members referred
182  // to previously must be defined before these iteration methods can be
183  // successfully invoked.
184 
186 
194  bool Initialize(double center[3], vtkIdList* neighborhood);
195  bool Initialize(double center[3], vtkIdType numNei, vtkIdType* neighborhood);
196  bool Initialize(double center[3]); // all points of the specified dataset
198 
204  void GoToFirstPoint();
205 
209  bool IsDoneWithTraversal();
210 
215  void GoToNextPoint();
216 
221  void GetCurrentPoint(vtkIdType& ptId, double x[3]);
222 
226  vtkIdType GetCurrentPoint();
227 
232  vtkIdType GetPoint(int axis, int ptIdx);
233 
238  vtkIdType GetNumberOfAxes();
239 
243  void GetAxisPoints(int axis, vtkIdType& npts, const vtkIdType*& pts) VTK_SIZEHINT(pts, npts);
244 
253  void BuildRepresentation(vtkPolyData* pd);
254 
255 protected:
257  ~vtkSphericalPointIterator() override = default;
258 
259  // Information needed to define the spherical iterator.
260  vtkSmartPointer<vtkDataSet> DataSet; // The points to iterate over
261  vtkSmartPointer<vtkDoubleArray> Axes; // The axes defining the iteration pattern
262  int Sorting; // The direction of sorting, if sorting required
263 
264  // Iterator internals are represented using a PIMPL idiom
265  struct SphericalPointIterator;
266  std::unique_ptr<SphericalPointIterator> Iterator;
267 
268  // Changes to the VTK class must be propagated to the internal iterator
270 
271 private:
273  void operator=(const vtkSphericalPointIterator&) = delete;
274 };
275 
276 VTK_ABI_NAMESPACE_END
277 #endif // vtkSphericalPointIterator_h
vtkSmartPointer< vtkDataSet > DataSet
SortType
Points can be sorted along each axis.
abstract base class for most VTK objects
Definition: vtkObject.h:52
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetSortTypeToAscending()
Specify whether points along each axis are radially sorted, and if so, whether in an ascending or des...
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
record modification and/or execution time
Definition: vtkTimeStamp.h:24
int vtkIdType
Definition: vtkType.h:363
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:71
dynamic, self-adjusting array of double
std::unique_ptr< SphericalPointIterator > Iterator
void SetSortTypeToNone()
Specify whether points along each axis are radially sorted, and if so, whether in an ascending or des...
void SetSortTypeToDescending()
Specify whether points along each axis are radially sorted, and if so, whether in an ascending or des...
a simple class to control print indentation
Definition: vtkIndent.h:28
list of point or cell ids
Definition: vtkIdList.h:25
std::map< std::string, DataArray > DataSet
key: variable name, value: DataArray
Definition: VTXTypes.h:28
#define VTK_SIZEHINT(...)
vtkSmartPointer< vtkDoubleArray > Axes
void GetPoint(int i, int j, int k, double pnt[3])
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
AxesType
While the axes can be arbitrarily specified, it is possible to select axes from a menu of predefined ...
Traverse a collection of points in spherical ordering.