VTK  9.1.0
vtkCellIterator.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkCellIterator.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=========================================================================*/
15
74#ifndef vtkCellIterator_h
75#define vtkCellIterator_h
76
77#include "vtkCellType.h" // For VTK_EMPTY_CELL
78#include "vtkCommonDataModelModule.h" // For export macro
79#include "vtkIdList.h" // For inline methods
80#include "vtkNew.h" // For vtkNew
81#include "vtkObject.h"
82
83class vtkGenericCell;
84class vtkPoints;
85
86class VTKCOMMONDATAMODEL_EXPORT vtkCellIterator : public vtkObject
87{
88public:
89 void PrintSelf(ostream& os, vtkIndent indent) override;
91
95 void InitTraversal();
96
100 void GoToNextCell();
101
105 virtual bool IsDoneWithTraversal() = 0;
106
111 int GetCellType();
112
118
122 virtual vtkIdType GetCellId() = 0;
123
128 vtkIdList* GetPointIds();
129
135 vtkPoints* GetPoints();
136
141 vtkIdList* GetFaces();
142
149
154 vtkIdType GetNumberOfPoints();
155
160 vtkIdType GetNumberOfFaces();
161
162protected:
165
169 virtual void ResetToFirstCell() = 0;
170
174 virtual void IncrementToNextCell() = 0;
175
179 virtual void FetchCellType() = 0;
180
184 virtual void FetchPointIds() = 0;
185
189 virtual void FetchPoints() = 0;
190
197 virtual void FetchFaces() {}
198
203
204private:
205 vtkCellIterator(const vtkCellIterator&) = delete;
206 void operator=(const vtkCellIterator&) = delete;
207
208 enum
209 {
210 UninitializedFlag = 0x0,
211 CellTypeFlag = 0x1,
212 PointIdsFlag = 0x2,
213 PointsFlag = 0x4,
214 FacesFlag = 0x8
215 };
216
217 void ResetCache()
218 {
219 this->CacheFlags = UninitializedFlag;
220 this->CellType = VTK_EMPTY_CELL;
221 }
222
223 void SetCache(unsigned char flags) { this->CacheFlags |= flags; }
224
225 bool CheckCache(unsigned char flags) { return (this->CacheFlags & flags) == flags; }
226
227 vtkNew<vtkPoints> PointsContainer;
228 vtkNew<vtkIdList> PointIdsContainer;
229 vtkNew<vtkIdList> FacesContainer;
230 unsigned char CacheFlags;
231};
232
233//------------------------------------------------------------------------------
235{
236 this->ResetToFirstCell();
237 this->ResetCache();
238}
239
240//------------------------------------------------------------------------------
242{
243 this->IncrementToNextCell();
244 this->ResetCache();
245}
246
247//------------------------------------------------------------------------------
249{
250 if (!this->CheckCache(CellTypeFlag))
251 {
252 this->FetchCellType();
253 this->SetCache(CellTypeFlag);
254 }
255 return this->CellType;
256}
257
258//------------------------------------------------------------------------------
260{
261 if (!this->CheckCache(PointIdsFlag))
262 {
263 this->FetchPointIds();
264 this->SetCache(PointIdsFlag);
265 }
266 return this->PointIds;
267}
268
269//------------------------------------------------------------------------------
271{
272 if (!this->CheckCache(PointsFlag))
273 {
274 this->FetchPoints();
275 this->SetCache(PointsFlag);
276 }
277 return this->Points;
278}
279
280//------------------------------------------------------------------------------
282{
283 if (!this->CheckCache(FacesFlag))
284 {
285 this->FetchFaces();
286 this->SetCache(FacesFlag);
287 }
288 return this->Faces;
289}
290
291//------------------------------------------------------------------------------
293{
294 if (!this->CheckCache(PointIdsFlag))
295 {
296 this->FetchPointIds();
297 this->SetCache(PointIdsFlag);
298 }
299 return this->PointIds->GetNumberOfIds();
300}
301
302//------------------------------------------------------------------------------
304{
305 switch (this->GetCellType())
306 {
307 case VTK_EMPTY_CELL:
308 case VTK_VERTEX:
309 case VTK_POLY_VERTEX:
310 case VTK_LINE:
311 case VTK_POLY_LINE:
312 case VTK_TRIANGLE:
314 case VTK_POLYGON:
315 case VTK_PIXEL:
316 case VTK_QUAD:
324 case VTK_CUBIC_LINE:
337 case VTK_BEZIER_CURVE:
340 return 0;
341
342 case VTK_TETRA:
348 return 4;
349
350 case VTK_PYRAMID:
354 case VTK_WEDGE:
360 case VTK_BEZIER_WEDGE:
361 return 5;
362
363 case VTK_VOXEL:
364 case VTK_HEXAHEDRON:
372 return 6;
373
375 return 7;
376
378 return 8;
379
380 case VTK_POLYHEDRON: // Need to look these up
381 if (!this->CheckCache(FacesFlag))
382 {
383 this->FetchFaces();
384 this->SetCache(FacesFlag);
385 }
386 return this->Faces->GetNumberOfIds() != 0 ? this->Faces->GetId(0) : 0;
387
388 default:
389 vtkGenericWarningMacro("Unknown cell type: " << this->CellType);
390 break;
391 }
392
393 return 0;
394}
395
396#endif // vtkCellIterator_h
Efficient cell iterator for vtkDataSet topologies.
int GetCellDimension()
Get the current cell dimension (0, 1, 2, or 3).
virtual void FetchPoints()=0
Lookup the cell points in the data set and store them in this->Points.
void GetCell(vtkGenericCell *cell)
Write the current full cell information into the argument.
virtual void FetchPointIds()=0
Lookup the cell point ids in the data set and store them in this->PointIds.
vtkIdType GetNumberOfFaces()
Return the number of faces in the current cell.
vtkIdList * GetFaces()
Get the faces for a polyhedral cell.
void InitTraversal()
Reset to the first cell.
vtkAbstractTypeMacro(vtkCellIterator, vtkObject)
vtkIdList * Faces
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkPoints * GetPoints()
Get the points in the current cell.
vtkIdList * PointIds
virtual void FetchCellType()=0
Lookup the cell type in the data set and store it in this->CellType.
vtkIdType GetNumberOfPoints()
Return the number of points in the current cell.
virtual void IncrementToNextCell()=0
Update internal state to point to the next cell.
virtual vtkIdType GetCellId()=0
Get the id of the current cell.
virtual void ResetToFirstCell()=0
Update internal state to point to the first cell.
vtkIdList * GetPointIds()
Get the ids of the points in the current cell.
int GetCellType()
Get the current cell type (e.g.
virtual void FetchFaces()
Lookup the cell faces in the data set and store them in this->Faces.
void GoToNextCell()
Increment to next cell.
virtual bool IsDoneWithTraversal()=0
Returns false while the iterator is valid.
vtkPoints * Points
~vtkCellIterator() override
provides thread-safe access to cells
list of point or cell ids
Definition: vtkIdList.h:40
vtkIdType GetNumberOfIds() const noexcept
Return the number of id's in the list.
Definition: vtkIdList.h:66
vtkIdType GetId(const vtkIdType i)
Return the id at location i.
Definition: vtkIdList.h:71
a simple class to control print indentation
Definition: vtkIndent.h:43
abstract base class for most VTK objects
Definition: vtkObject.h:63
represent and manipulate 3D points
Definition: vtkPoints.h:43
int GetCellType(const Ioss::ElementTopology *topology)
Returns VTK celltype for a Ioss topology element.
@ VTK_VOXEL
Definition: vtkCellType.h:57
@ VTK_QUADRATIC_HEXAHEDRON
Definition: vtkCellType.h:70
@ VTK_PARAMETRIC_SURFACE
Definition: vtkCellType.h:93
@ VTK_HIGHER_ORDER_TETRAHEDRON
Definition: vtkCellType.h:104
@ VTK_TRIANGLE_STRIP
Definition: vtkCellType.h:52
@ VTK_BIQUADRATIC_QUADRATIC_HEXAHEDRON
Definition: vtkCellType.h:79
@ VTK_LAGRANGE_CURVE
Definition: vtkCellType.h:110
@ VTK_HIGHER_ORDER_QUAD
Definition: vtkCellType.h:102
@ VTK_PYRAMID
Definition: vtkCellType.h:60
@ VTK_PIXEL
Definition: vtkCellType.h:54
@ VTK_QUADRATIC_WEDGE
Definition: vtkCellType.h:71
@ VTK_BEZIER_WEDGE
Definition: vtkCellType.h:124
@ VTK_BIQUADRATIC_QUAD
Definition: vtkCellType.h:73
@ VTK_HIGHER_ORDER_WEDGE
Definition: vtkCellType.h:105
@ VTK_LAGRANGE_QUADRILATERAL
Definition: vtkCellType.h:112
@ VTK_POLY_LINE
Definition: vtkCellType.h:50
@ VTK_TRIQUADRATIC_PYRAMID
Definition: vtkCellType.h:75
@ VTK_TRIANGLE
Definition: vtkCellType.h:51
@ VTK_BEZIER_TRIANGLE
Definition: vtkCellType.h:120
@ VTK_POLYGON
Definition: vtkCellType.h:53
@ VTK_EMPTY_CELL
Definition: vtkCellType.h:46
@ VTK_QUADRATIC_PYRAMID
Definition: vtkCellType.h:72
@ VTK_POLYHEDRON
Definition: vtkCellType.h:89
@ VTK_TRIQUADRATIC_HEXAHEDRON
Definition: vtkCellType.h:74
@ VTK_TETRA
Definition: vtkCellType.h:56
@ VTK_LINE
Definition: vtkCellType.h:49
@ VTK_CONVEX_POINT_SET
Definition: vtkCellType.h:86
@ VTK_BEZIER_HEXAHEDRON
Definition: vtkCellType.h:123
@ VTK_PARAMETRIC_TRI_SURFACE
Definition: vtkCellType.h:94
@ VTK_LAGRANGE_WEDGE
Definition: vtkCellType.h:115
@ VTK_LAGRANGE_HEXAHEDRON
Definition: vtkCellType.h:114
@ VTK_PENTAGONAL_PRISM
Definition: vtkCellType.h:61
@ VTK_HIGHER_ORDER_TRIANGLE
Definition: vtkCellType.h:101
@ VTK_QUADRATIC_QUAD
Definition: vtkCellType.h:67
@ VTK_WEDGE
Definition: vtkCellType.h:59
@ VTK_PARAMETRIC_QUAD_SURFACE
Definition: vtkCellType.h:95
@ VTK_LAGRANGE_TETRAHEDRON
Definition: vtkCellType.h:113
@ VTK_PARAMETRIC_CURVE
Definition: vtkCellType.h:92
@ VTK_BEZIER_CURVE
Definition: vtkCellType.h:119
@ VTK_HIGHER_ORDER_PYRAMID
Definition: vtkCellType.h:106
@ VTK_HEXAGONAL_PRISM
Definition: vtkCellType.h:62
@ VTK_PARAMETRIC_HEX_REGION
Definition: vtkCellType.h:97
@ VTK_BEZIER_QUADRILATERAL
Definition: vtkCellType.h:121
@ VTK_QUADRATIC_LINEAR_WEDGE
Definition: vtkCellType.h:77
@ VTK_HEXAHEDRON
Definition: vtkCellType.h:58
@ VTK_CUBIC_LINE
Definition: vtkCellType.h:83
@ VTK_LAGRANGE_TRIANGLE
Definition: vtkCellType.h:111
@ VTK_HIGHER_ORDER_HEXAHEDRON
Definition: vtkCellType.h:107
@ VTK_QUADRATIC_POLYGON
Definition: vtkCellType.h:68
@ VTK_QUAD
Definition: vtkCellType.h:55
@ VTK_QUADRATIC_TRIANGLE
Definition: vtkCellType.h:66
@ VTK_PARAMETRIC_TETRA_REGION
Definition: vtkCellType.h:96
@ VTK_QUADRATIC_EDGE
Definition: vtkCellType.h:65
@ VTK_QUADRATIC_TETRA
Definition: vtkCellType.h:69
@ VTK_HIGHER_ORDER_EDGE
Definition: vtkCellType.h:100
@ VTK_BEZIER_TETRAHEDRON
Definition: vtkCellType.h:122
@ VTK_VERTEX
Definition: vtkCellType.h:47
@ VTK_POLY_VERTEX
Definition: vtkCellType.h:48
@ VTK_QUADRATIC_LINEAR_QUAD
Definition: vtkCellType.h:76
@ VTK_BIQUADRATIC_QUADRATIC_WEDGE
Definition: vtkCellType.h:78
@ VTK_HIGHER_ORDER_POLYGON
Definition: vtkCellType.h:103
@ VTK_BIQUADRATIC_TRIANGLE
Definition: vtkCellType.h:80
int vtkIdType
Definition: vtkType.h:332