VTK  9.3.1
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 
42 VTK_ABI_NAMESPACE_BEGIN
43 class vtkTriangleTile;
44 class vtkTetraTile;
45 class vtkCellArray;
46 class vtkDoubleArray;
52 class vtkPointData;
54 class vtkPolygon;
55 class vtkIdList;
56 
57 //-----------------------------------------------------------------------------
58 //
59 // The tessellation object
60 class VTKCOMMONDATAMODEL_EXPORT vtkSimpleCellTessellator : public vtkGenericCellTessellator
61 {
62 public:
63  static vtkSimpleCellTessellator* New();
65  void PrintSelf(ostream& os, vtkIndent indent) override;
66 
68 
71  vtkGetObjectMacro(GenericCell, vtkGenericAdaptorCell);
73 
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 
140  int GetFixedSubdivisions();
141 
150  int GetMaxSubdivisionLevel();
151 
156  int GetMaxAdaptiveSubdivisions();
157 
164  void SetFixedSubdivisions(int level);
165 
172  void SetMaxSubdivisionLevel(int level);
173 
183  void SetSubdivisionLevels(int fixed, int maxLevel);
184 
185 protected:
187  ~vtkSimpleCellTessellator() override;
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 
223  void InitTetraTile(
224  vtkTetraTile& root, const vtkIdType* localIds, vtkIdType* ids, int* edgeIds, int* faceIds);
225 
244  void TriangulateTriangle(vtkGenericAdaptorCell* cell, vtkIdType* localIds, vtkIdType* ids,
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 
301  int GetNumberOfCellsUsingFace(int faceId);
302  int GetNumberOfCellsUsingEdge(int edgeId);
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 
390 private:
392  void operator=(const vtkSimpleCellTessellator&) = delete;
393 
394  friend class vtkTetraTile;
395  friend class vtkTriangleTile;
396 };
397 
398 VTK_ABI_NAMESPACE_END
399 #endif
vtkOrderedTriangulator * Triangulator
double * Scalars
Scalar buffer used to save the interpolate values of the attributes The capacity is at least the numb...
represent and manipulate point attribute data
Definition: vtkPointData.h:29
helper class to perform cell tessellation
vtkGenericCellIterator * CellIterator
Used to iterate over edges boundaries in GetNumberOfCellsUsingEdges()
virtual void TessellateFace(vtkGenericAdaptorCell *cell, vtkGenericAttributeCollection *att, vtkIdType index, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd)=0
Tessellate a face of a 3D `cell'.
vtkGenericAdaptorCell * GenericCell
To access the higher order cell from third party library.
helper class to perform cell tessellation
keep track of edges (defined by pair of integer id's)
vtkGenericEdgeTable * EdgeTable
HashTable instead of vtkPointLocator.
vtkCellArray * TessellateCellArray
To avoid New/Delete.
helper class to generate triangulations
int vtkIdType
Definition: vtkType.h:315
vtkGenericAttributeCollection * AttributeCollection
To access the higher order field from third party library.
virtual void Triangulate(vtkGenericAdaptorCell *cell, vtkGenericAttributeCollection *att, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd)=0
Triangulate a 2D `cell'.
dynamic, self-adjusting array of double
iterator used to traverse cells
vtkIdType NumberOfPoints
Number of points in the dataset to be tessellated.
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.
defines cell interface
vtkPointData * TessellatePointData
To avoid New/Delete.
a simple class to control print indentation
Definition: vtkIndent.h:28
virtual void Tessellate(vtkGenericAdaptorCell *cell, vtkGenericAttributeCollection *att, vtkDoubleArray *points, vtkCellArray *cellArray, vtkPointData *internalPd)=0
Tessellate a 3D `cell'.
list of point or cell ids
Definition: vtkIdList.h:22
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 ...
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:31
virtual void Initialize(vtkGenericDataSet *ds)=0
Initialize the tessellator with a data set `ds'.
Objects that compute error during cell tessellation.
object to represent cell connectivity
Definition: vtkCellArray.h:175
int PointOffset
Number of double value to skip to go to the next point into Scalars array It is 6+attributeCollection...
defines dataset interface
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.