VTK  9.3.20240422
vtkSimpleCellTessellator.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
36#ifndef vtkSimpleCellTessellator_h
37#define vtkSimpleCellTessellator_h
38
39#include "vtkCommonDataModelModule.h" // For export macro
41
42VTK_ABI_NAMESPACE_BEGIN
43class vtkTriangleTile;
44class vtkTetraTile;
45class vtkCellArray;
46class vtkDoubleArray;
52class vtkPointData;
54class vtkPolygon;
55class vtkIdList;
56
57//-----------------------------------------------------------------------------
58//
59// The tessellation object
60class VTKCOMMONDATAMODEL_EXPORT vtkSimpleCellTessellator : public vtkGenericCellTessellator
61{
62public:
65 void PrintSelf(ostream& os, vtkIndent indent) override;
66
68
71 vtkGetObjectMacro(GenericCell, vtkGenericAdaptorCell);
73
88 vtkIdType index, vtkDoubleArray* points, vtkCellArray* cellArray,
89 vtkPointData* internalPd) override;
90
102 vtkDoubleArray* points, vtkCellArray* cellArray, vtkPointData* internalPd) override;
103
115 vtkDoubleArray* points, vtkCellArray* cellArray, vtkPointData* internalPd) override;
116
120 void Reset();
121
125 void Initialize(vtkGenericDataSet* ds) override;
126
141
151
157
164 void SetFixedSubdivisions(int level);
165
172 void SetMaxSubdivisionLevel(int level);
173
183 void SetSubdivisionLevels(int fixed, int maxLevel);
184
185protected:
188
193 void CopyPoint(vtkIdType pointId);
194
199
200 void InsertEdgesIntoEdgeTable(vtkTriangleTile& tri);
201 void RemoveEdgesFromEdgeTable(vtkTriangleTile& tri);
202 void InsertPointsIntoEdgeTable(vtkTriangleTile& tri);
203
204 void InsertEdgesIntoEdgeTable(vtkTetraTile& tetra);
205 void RemoveEdgesFromEdgeTable(vtkTetraTile& tetra);
206
224 vtkTetraTile& root, const vtkIdType* localIds, vtkIdType* ids, int* edgeIds, int* faceIds);
225
245 const vtkIdType* edgeIds, vtkGenericAttributeCollection* att, vtkDoubleArray* points,
246 vtkCellArray* cellArray, vtkPointData* internalPd);
247
252
257 void AllocateScalars(int size);
258
265 // Scalar buffer that stores the global coordinates, parametric coordinates,
266 // attributes at left, mid and right point. The format is:
267 // lxlylz lrlslt [lalb lcldle...] mxmymz mrmsmt [mamb mcmdme...]
268 // rxryrz rrrsrt [rarb rcrdre...]
269 // The ScalarsCapacity>=(6+attributeCollection->GetNumberOfComponents())*3
270
271 double* Scalars;
273
279
284
289
291
294 vtkDoubleArray* TessellatePoints; // Allow to use GetPointer
298
299 int FindEdgeReferenceCount(double p1[3], double p2[3], vtkIdType& e1, vtkIdType& e2);
300
303
312 int IsEdgeOnFace(double p1[3], double p2[3]);
313
322 int FindEdgeParent2D(double p1[3], double p2[3], int& localId);
323
333 int FindEdgeParent(double p1[3], double p2[3], int& localId);
334
339 void AllocatePointIds(int size);
340
349 int FacesAreEqual(const vtkIdType* originalFace, const vtkIdType face[3]);
350
355
359
370
371 // The following variables are for complex cells.
372
373 // Used to create tetra from more complex cells, because the tessellator
374 // is supposed to deal with simplices only.
376
377 // Used to store the sub-tetra during the tessellation of complex
378 // cells.
380
381 // Used to create triangles from a face of a complex cell.
383
384 // Used to store the sub-triangles during the tessellation of complex cells.
386
389
390private:
392 void operator=(const vtkSimpleCellTessellator&) = delete;
393
394 friend class vtkTetraTile;
395 friend class vtkTriangleTile;
396};
397
398VTK_ABI_NAMESPACE_END
399#endif
object to represent cell connectivity
dynamic, self-adjusting array of double
defines cell interface
iterator used to traverse cells
helper class to perform cell tessellation
defines dataset interface
keep track of edges (defined by pair of integer id's)
Objects that compute error during cell tessellation.
list of point or cell ids
Definition vtkIdList.h:133
a simple class to control print indentation
Definition vtkIndent.h:108
helper class to generate triangulations
represent and manipulate point attribute data
a cell that represents an n-sided polygon
Definition vtkPolygon.h:132
helper class to perform cell tessellation
void TriangulateTriangle(vtkGenericAdaptorCell *cell, vtkIdType *localIds, vtkIdType *ids, const vtkIdType *edgeIds, vtkGenericAttributeCollection *att, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd)
Triangulate a triangle of ‘cell’.
void InsertPointsIntoEdgeTable(vtkTriangleTile &tri)
int GetNumberOfCellsUsingFace(int faceId)
void SetSubdivisionLevels(int fixed, int maxLevel)
Set both the number of fixed subdivisions and the maximum level of subdivisions.
void RemoveEdgesFromEdgeTable(vtkTriangleTile &tri)
vtkGenericCellIterator * CellIterator
Used to iterate over edges boundaries in GetNumberOfCellsUsingEdges()
~vtkSimpleCellTessellator() override
double * Scalars
Scalar buffer used to save the interpolate values of the attributes The capacity is at least the numb...
int PointOffset
Number of double value to skip to go to the next point into Scalars array It is 6+attributeCollection...
void SetFixedSubdivisions(int level)
Set the number of fixed subdivisions.
vtkCellArray * TessellateCellArray
To avoid New/Delete.
int FindEdgeReferenceCount(double p1[3], double p2[3], vtkIdType &e1, vtkIdType &e2)
vtkGenericAttributeCollection * AttributeCollection
To access the higher order field from third party library.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void AllocatePointIds(int size)
Allocate some memory if PointIds does not exist or is smaller than size.
void AllocateScalars(int size)
Allocate some memory if Scalars does not exists or is smaller than size.
void Initialize(vtkGenericDataSet *ds) override
Initialize the tessellator with a data set ‘ds’.
const vtkIdType * FaceIds
For each face (4) of the sub-tetra, there is the id of the original face or -1 if the face is not an ...
void Triangulate(vtkGenericAdaptorCell *cell, vtkGenericAttributeCollection *att, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd) override
Triangulate a 2D ‘cell’.
int GetMaxAdaptiveSubdivisions()
Return the maximum number of adaptive subdivisions.
const vtkIdType * EdgeIds
For each edge (6) of the sub-tetra, there is the id of the original edge or -1 if the edge is not an ...
vtkDoubleArray * TessellatePoints
To avoid New/Delete.
void InsertEdgesIntoEdgeTable(vtkTetraTile &tetra)
int FacesAreEqual(const vtkIdType *originalFace, const vtkIdType face[3])
Are the faces ‘originalFace’ and ‘face’ equal? The result is independent from any order or orientatio...
static vtkSimpleCellTessellator * New()
void Reset()
Reset the output for repeated use of this class.
void TessellateFace(vtkGenericAdaptorCell *cell, vtkGenericAttributeCollection *att, vtkIdType index, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd) override
Tessellate a face of a 3D ‘cell’.
void InitTetraTile(vtkTetraTile &root, const vtkIdType *localIds, vtkIdType *ids, int *edgeIds, int *faceIds)
Initialize ‘root’ with the sub-tetra defined by the ‘localIds’ points on the complex cell,...
void CopyPoint(vtkIdType pointId)
Extract point ‘pointId’ from the edge table to the output point and output point data.
vtkGenericEdgeTable * EdgeTable
HashTable instead of vtkPointLocator.
int FindEdgeParent2D(double p1[3], double p2[3], int &localId)
Return 1 if the parent of edge defined by vertices (‘p1’,‘p2’) in parametric coordinates,...
vtkOrderedTriangulator * Triangulator
void Tessellate(vtkGenericAdaptorCell *cell, vtkGenericAttributeCollection *att, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd) override
Tessellate a 3D ‘cell’.
int GetNumberOfCellsUsingEdge(int edgeId)
int GetMaxSubdivisionLevel()
Return the maximum level of subdivision.
vtkPointData * TessellatePointData
To avoid New/Delete.
void RemoveEdgesFromEdgeTable(vtkTetraTile &tetra)
int GetFixedSubdivisions()
Return the number of fixed subdivisions.
vtkGenericAdaptorCell * GenericCell
To access the higher order cell from third party library.
void InsertEdgesIntoEdgeTable(vtkTriangleTile &tri)
int IsEdgeOnFace(double p1[3], double p2[3])
Is the edge defined by vertices (‘p1’,‘p2’) in parametric coordinates on some edge of the original te...
int FindEdgeParent(double p1[3], double p2[3], int &localId)
Return 1 if the parent of edge defined by vertices (‘p1’,‘p2’) in parametric coordinates,...
vtkIdType NumberOfPoints
Number of points in the dataset to be tessellated.
void SetMaxSubdivisionLevel(int level)
Set the maximum level of subdivision.
int vtkIdType
Definition vtkType.h:315