VTK  9.4.20241106
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
76VTK_ABI_NAMESPACE_BEGIN
77class vtkDoubleArray;
78class vtkPolyData;
79struct SpiralPointIterator;
80
81class VTKCOMMONDATAMODEL_EXPORT vtkSphericalPointIterator : public vtkObject
82{
83public:
85
91 void PrintSelf(ostream& os, vtkIndent indent) override;
93
95
101
103
119
132 {
133 XY_CW_AXES = 0, // axes clockwise around center in x-y plane (resolution required)
134 XY_CCW_AXES = 1, // axes counterclockwise around center (resolution required)
135 XY_SQUARE_AXES = 2, // axes +x,-x, +y,-y: axes through the four faces of a square
136 CUBE_AXES = 3, // axes +x,-x, +y,-y, +z,-z: axes through the six faces of a cube
137 OCTAHEDRON_AXES = 4, // axes through the eight faces of a regular octahedron
138 CUBE_OCTAHEDRON_AXES =
139 5, // axes through the eight faces of a regular octahedron and six faces of a cube
140 DODECAHEDRON_AXES = 6, // axes through the twelve faces of a dedecahdron
141 ICOSAHEDRON_AXES = 7, // axes through the twenty faces of a icosahedron
142 };
143
150 void SetAxes(int axesType, int resolution = 6);
151
161 {
162 SORT_NONE = 0,
163 SORT_ASCENDING = 1,
164 SORT_DESCENDING = 2
165 };
166
168
175 vtkSetClampMacro(Sorting, int, SORT_NONE, SORT_DESCENDING);
176 vtkGetMacro(Sorting, int);
177 void SetSortTypeToNone() { this->SetSorting(SORT_NONE); }
178 void SetSortTypeToAscending() { this->SetSorting(SORT_ASCENDING); }
179 void SetSortTypeToDescending() { this->SetSorting(SORT_DESCENDING); }
181
182 // The following methods support point iteration. The data members referred
183 // to previously must be defined before these iteration methods can be
184 // successfully invoked.
185
187
195 bool Initialize(double center[3], vtkIdList* neighborhood);
196 bool Initialize(double center[3], vtkIdType numNei, vtkIdType* neighborhood);
197 bool Initialize(double center[3]); // all points of the specified dataset
199
206
211
217
222 void GetCurrentPoint(vtkIdType& ptId, double x[3]);
223
228
233 vtkIdType GetPoint(int axis, int ptIdx);
234
240
244 void GetAxisPoints(int axis, vtkIdType& npts, const vtkIdType*& pts) VTK_SIZEHINT(pts, npts);
245
255
256protected:
258 ~vtkSphericalPointIterator() override = default;
259
260 // Information needed to define the spherical iterator.
261 vtkSmartPointer<vtkDataSet> DataSet; // The points to iterate over
262 vtkSmartPointer<vtkDoubleArray> Axes; // The axes defining the iteration pattern
263 int Sorting; // The direction of sorting, if sorting required
264
265 // Iterator internals are represented using a PIMPL idiom
266 struct SphericalPointIterator;
267 std::unique_ptr<SphericalPointIterator> Iterator;
268
269 // Changes to the VTK class must be propagated to the internal iterator
271
272private:
274 void operator=(const vtkSphericalPointIterator&) = delete;
275};
276
277VTK_ABI_NAMESPACE_END
278#endif // vtkSphericalPointIterator_h
abstract class to specify dataset behavior
Definition vtkDataSet.h:166
dynamic, self-adjusting array of double
list of point or cell ids
Definition vtkIdList.h:133
a simple class to control print indentation
Definition vtkIndent.h:108
abstract base class for most VTK objects
Definition vtkObject.h:162
concrete dataset represents vertices, lines, polygons, and triangle strips
Hold a reference to a vtkObjectBase instance.
Traverse a collection of points in spherical ordering.
bool IsDoneWithTraversal()
Return true if set traversal is completed.
void SetSortTypeToNone()
Specify whether points along each axis are radially sorted, and if so, whether in an ascending or des...
SortType
Points can be sorted along each axis.
void SetAxes(int axesType, int resolution=6)
A convenience method to set the iterator axes from the predefined set enumerated above.
vtkSmartPointer< vtkDoubleArray > Axes
void SetSortTypeToDescending()
Specify whether points along each axis are radially sorted, and if so, whether in an ascending or des...
void GetCurrentPoint(vtkIdType &ptId, double x[3])
Get the current point (point id and coordinates) during forward iteration.
vtkSetSmartPointerMacro(Axes, vtkDoubleArray)
Define the axes for the point iterator.
void GoToFirstPoint()
Begin iterating over the neighborhood of points.
void GetAxisPoints(int axis, vtkIdType &npts, const vtkIdType *&pts)
Return the list of points along the specified ith axis.
vtkGetSmartPointerMacro(DataSet, vtkDataSet)
Define the dataset and its associated points over which to iterate.
vtkSmartPointer< vtkDataSet > DataSet
std::unique_ptr< SphericalPointIterator > Iterator
bool Initialize(double center[3])
Initialize the iteration process around a position [x], over a set of points (the neighborhood) defin...
AxesType
While the axes can be arbitrarily specified, it is possible to select axes from a menu of predefined ...
void SetSortTypeToAscending()
Specify whether points along each axis are radially sorted, and if so, whether in an ascending or des...
void BuildRepresentation(vtkPolyData *pd)
A convenience method that produces a geometric representation of the iterator (e.g....
void GoToNextPoint()
Go to the next point in the neighborhood.
vtkSetSmartPointerMacro(DataSet, vtkDataSet)
Define the dataset and its associated points over which to iterate.
~vtkSphericalPointIterator() override=default
vtkIdType GetPoint(int axis, int ptIdx)
Provide random access to the jth point of the ith axis.
vtkGetSmartPointerMacro(Axes, vtkDoubleArray)
Define the axes for the point iterator.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods to instantiate, obtain type information, and print information about an instance of ...
vtkAbstractTypeMacro(vtkSphericalPointIterator, vtkObject)
Standard methods to instantiate, obtain type information, and print information about an instance of ...
bool Initialize(double center[3], vtkIdType numNei, vtkIdType *neighborhood)
Initialize the iteration process around a position [x], over a set of points (the neighborhood) defin...
bool Initialize(double center[3], vtkIdList *neighborhood)
Initialize the iteration process around a position [x], over a set of points (the neighborhood) defin...
static vtkSphericalPointIterator * New()
Standard methods to instantiate, obtain type information, and print information about an instance of ...
vtkIdType GetNumberOfAxes()
Return the number of axes defined.
vtkIdType GetCurrentPoint()
Return the current point id during forward iteration.
record modification and/or execution time
int vtkIdType
Definition vtkType.h:315
#define VTK_SIZEHINT(...)