VTK  9.3.20240419
vtkGenericAdaptorCell.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
50 #ifndef vtkGenericAdaptorCell_h
51 #define vtkGenericAdaptorCell_h
52 
53 #include "vtkCommonDataModelModule.h" // For export macro
54 #include "vtkObject.h"
55 
56 VTK_ABI_NAMESPACE_BEGIN
57 class vtkLine;
58 class vtkTetra;
59 class vtkPoints;
60 class vtkVertex;
61 class vtkTriangle;
62 class vtkCellData;
63 class vtkPointData;
64 class vtkCellArray;
65 class vtkDoubleArray;
68 class vtkContourValues;
74 class vtkIdList;
76 class vtkPolygon;
78 class vtkQuad;
79 class vtkHexahedron;
80 class vtkWedge;
81 class vtkPyramid;
82 
83 class VTKCOMMONDATAMODEL_EXPORT vtkGenericAdaptorCell : public vtkObject
84 {
85 public:
87  void PrintSelf(ostream& os, vtkIndent indent) override;
88 
93  virtual vtkIdType GetId() = 0;
94 
98  virtual int IsInDataSet() = 0;
99 
106  virtual int GetType() = 0;
107 
112  virtual int GetDimension() = 0;
113 
118  virtual int GetGeometryOrder() = 0;
119 
125 
133 
141 
148 
152  virtual int IsPrimary() = 0;
153 
158  virtual int GetNumberOfPoints() = 0;
159 
170  virtual int GetNumberOfBoundaries(int dim = -1) = 0;
171 
184  virtual int GetNumberOfDOFNodes() = 0;
185 
191 
198 
205  virtual void GetBoundaryIterator(vtkGenericCellIterator* boundaries, int dim = -1) = 0;
206 
208 
218  virtual int CountNeighbors(vtkGenericAdaptorCell* boundary) = 0;
219  virtual void CountEdgeNeighbors(int* sharing) = 0;
221 
232  virtual void GetNeighbors(vtkGenericAdaptorCell* boundary, vtkGenericCellIterator* neighbors) = 0;
233 
241  virtual int FindClosestBoundary(
242  int subId, double pcoords[3], vtkGenericCellIterator*& boundary) = 0;
243 
255  virtual int EvaluatePosition(
256  const double x[3], double* closestPoint, int& subId, double pcoords[3], double& dist2) = 0;
257 
265  virtual void EvaluateLocation(int subId, double pcoords[3], double x[3]) = 0;
266 
277  virtual void InterpolateTuple(vtkGenericAttribute* a, double pcoords[3], double* val) = 0;
278 
289  virtual void InterpolateTuple(
290  vtkGenericAttributeCollection* c, double pcoords[3], double* val) = 0;
291 
333  virtual void Contour(vtkContourValues* values, vtkImplicitFunction* f,
335  vtkIncrementalPointLocator* locator, vtkCellArray* verts, vtkCellArray* lines,
336  vtkCellArray* polys, vtkPointData* outPd, vtkCellData* outCd, vtkPointData* internalPd,
337  vtkPointData* secondaryPd, vtkCellData* secondaryCd);
338 
379  virtual void Clip(double value, vtkImplicitFunction* f, vtkGenericAttributeCollection* attributes,
380  vtkGenericCellTessellator* tess, int insideOut, vtkIncrementalPointLocator* locator,
381  vtkCellArray* connectivity, vtkPointData* outPd, vtkCellData* outCd, vtkPointData* internalPd,
382  vtkPointData* secondaryPd, vtkCellData* secondaryCd);
383 
392  virtual int IntersectWithLine(double p1[3], double p2[3], double tol, double& t, double x[3],
393  double pcoords[3], int& subId) = 0;
394 
407  virtual void Derivatives(
408  int subId, double pcoords[3], vtkGenericAttribute* attribute, double* derivs) = 0;
409 
415  virtual void GetBounds(double bounds[6]) = 0;
416 
423  virtual double* GetBounds();
424 
429  virtual double GetLength2();
430 
437  virtual int GetParametricCenter(double pcoords[3]) = 0;
438 
446  virtual double GetParametricDistance(const double pcoords[3]) = 0;
447 
458  virtual double* GetParametricCoords() = 0;
459 
480  virtual void Tessellate(vtkGenericAttributeCollection* attributes,
482  vtkCellArray* cellArray, vtkPointData* internalPd, vtkPointData* pd, vtkCellData* cd,
483  vtkUnsignedCharArray* types);
484 
485  // The following methods are for the internals of the tessellation algorithm
486  // (the hash table in particular)
487 
493  virtual int IsFaceOnBoundary(vtkIdType faceId) = 0;
494 
499  virtual int IsOnBoundary() = 0;
500 
507  virtual void GetPointIds(vtkIdType* id) = 0;
508 
524  vtkIncrementalPointLocator* locator, vtkCellArray* cellArray, vtkPointData* internalPd,
525  vtkPointData* pd, vtkCellData* cd);
526 
539  virtual const vtkIdType* GetFaceArray(vtkIdType faceId) = 0;
540 
547  virtual int GetNumberOfVerticesOnFace(int faceId) = 0;
548 
560  virtual const vtkIdType* GetEdgeArray(vtkIdType edgeId) = 0;
561 
562 protected:
565 
569  void Reset();
570 
575  void AllocateTuples(int size);
576 
577  // Internal tetra used for the contouring/clipping algorithm
581  vtkVertex* Vertex; // is it used ?
586 
587  // Internal locator when tessellating on a cell basis, this is different
588  // from the main locator used in contour/clip filter, this locator is used for
589  // points for
590  // Be careful the use of a vtkLocator in conjunction with the table fast
591  // tessellator is very sensitive, we need to keep all the points we used
596 
597  vtkIdList* InternalIds; // used by Tessellate() and TriangulateFace()
598 
599  // Attributes to mimic the vtk cell look and feel, internal use only
603 
604  // Scalar buffer to store the attributes values at some location
605  // There are variable members to reduce memory allocations.
606  double* Tuples;
608 
609  // Cached Bounds.
610  double Bounds[6];
611 
612 private:
614  void operator=(const vtkGenericAdaptorCell&) = delete;
615 };
616 
617 VTK_ABI_NAMESPACE_END
618 #endif
object to represent cell connectivity
Definition: vtkCellArray.h:286
represent and manipulate cell attribute data
Definition: vtkCellData.h:141
helper object to manage setting and generating contour values
dynamic, self-adjusting array of double
defines cell interface
virtual int GetDimension()=0
Return the topological dimension of the current cell.
virtual int IsOnBoundary()=0
Is the cell on the exterior boundary of the dataset?
virtual double * GetBounds()
Return the bounding box of the current cell in global coordinates.
vtkDoubleArray * InternalScalars
virtual void Tessellate(vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, vtkPoints *points, vtkIncrementalPointLocator *locator, vtkCellArray *cellArray, vtkPointData *internalPd, vtkPointData *pd, vtkCellData *cd, vtkUnsignedCharArray *types)
Tessellate the cell if it is not linear or if at least one attribute of ‘attributes’ is not linear.
virtual int CountNeighbors(vtkGenericAdaptorCell *boundary)=0
Number of cells (dimension>boundary->GetDimension()) of the dataset that share the boundary ‘boundary...
virtual void GetBoundaryIterator(vtkGenericCellIterator *boundaries, int dim=-1)=0
Return the ‘boundaries’ cells of dimension ‘dim’ (or all dimensions less than GetDimension() if -1) t...
virtual void GetBounds(double bounds[6])=0
Compute the bounding box of the current cell in ‘bounds’ in global coordinates.
virtual int IntersectWithLine(double p1[3], double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId)=0
Is there an intersection between the current cell and the ray (‘p1’,‘p2’) according to a tolerance ‘t...
virtual int GetHighestOrderAttribute(vtkGenericAttributeCollection *ac)
Return the index of the first point centered attribute with the highest order in ‘ac’.
virtual int EvaluatePosition(const double x[3], double *closestPoint, int &subId, double pcoords[3], double &dist2)=0
Is ‘x’ inside the current cell? It also evaluates parametric coordinates ‘pcoords’,...
virtual void Contour(vtkContourValues *values, vtkImplicitFunction *f, vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, vtkIncrementalPointLocator *locator, vtkCellArray *verts, vtkCellArray *lines, vtkCellArray *polys, vtkPointData *outPd, vtkCellData *outCd, vtkPointData *internalPd, vtkPointData *secondaryPd, vtkCellData *secondaryCd)
Generate a contour (contouring primitives) for each ‘values’ or with respect to an implicit function ...
virtual void Clip(double value, vtkImplicitFunction *f, vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, int insideOut, vtkIncrementalPointLocator *locator, vtkCellArray *connectivity, vtkPointData *outPd, vtkCellData *outCd, vtkPointData *internalPd, vtkPointData *secondaryPd, vtkCellData *secondaryCd)
Cut (or clip) the current cell with respect to the contour defined by the ‘value’ or the implicit fun...
virtual void Derivatives(int subId, double pcoords[3], vtkGenericAttribute *attribute, double *derivs)=0
Compute derivatives ‘derivs’ of the attribute ‘attribute’ (from its values at the corner points of th...
virtual void InterpolateTuple(vtkGenericAttributeCollection *c, double pcoords[3], double *val)=0
Interpolate the whole collection of attributes ‘c’ at local position ‘pcoords’ of the cell into ‘val’...
virtual void CountEdgeNeighbors(int *sharing)=0
Number of cells (dimension>boundary->GetDimension()) of the dataset that share the boundary ‘boundary...
virtual int FindClosestBoundary(int subId, double pcoords[3], vtkGenericCellIterator *&boundary)=0
Compute the closest boundary of the current sub-cell ‘subId’ for point ‘pcoord’ (in parametric coordi...
virtual void EvaluateLocation(int subId, double pcoords[3], double x[3])=0
Determine the global coordinates ‘x’ from sub-cell ‘subId’ and parametric coordinates ‘pcoords’ in th...
virtual void GetPointIds(vtkIdType *id)=0
Put into ‘id’ the list of the dataset points that define the corner points of the cell.
~vtkGenericAdaptorCell() override
virtual int GetNumberOfBoundaries(int dim=-1)=0
Return the number of boundaries of dimension ‘dim’ (or all dimensions greater than 0 and less than Ge...
virtual int GetGeometryOrder()=0
Return the interpolation order of the geometry.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual int GetNumberOfVerticesOnFace(int faceId)=0
Return the number of vertices defining face ‘faceId’.
virtual void InterpolateTuple(vtkGenericAttribute *a, double pcoords[3], double *val)=0
Interpolate the attribute ‘a’ at local position ‘pcoords’ of the cell into ‘val’.
virtual double GetLength2()
Return the bounding box diagonal squared of the current cell.
void AllocateTuples(int size)
Allocate some memory if Tuples does not exist or is smaller than size.
vtkDoubleArray * InternalPoints
int IsGeometryLinear()
Does the cell have a non-linear interpolation for the geometry?
virtual const vtkIdType * GetFaceArray(vtkIdType faceId)=0
Return the ids of the vertices defining face ‘faceId’.
virtual void GetNeighbors(vtkGenericAdaptorCell *boundary, vtkGenericCellIterator *neighbors)=0
Put into ‘neighbors’ the cells (dimension>boundary->GetDimension()) of the dataset that share the bou...
virtual double * GetParametricCoords()=0
Return a contiguous array of parametric coordinates of the corrner points defining the current cell.
vtkDoubleArray * PointDataScalars
virtual vtkGenericCellIterator * NewCellIterator()=0
Create an empty cell iterator.
virtual int IsInDataSet()=0
Does ‘this’ a cell of a dataset? (otherwise, it is a boundary cell)
virtual int GetParametricCenter(double pcoords[3])=0
Get the center of the current cell (in parametric coordinates) and place it in ‘pcoords’.
virtual int GetType()=0
Return the type of the current cell.
virtual void TriangulateFace(vtkGenericAttributeCollection *attributes, vtkGenericCellTessellator *tess, int index, vtkPoints *points, vtkIncrementalPointLocator *locator, vtkCellArray *cellArray, vtkPointData *internalPd, vtkPointData *pd, vtkCellData *cd)
Tessellate face ‘index’ of the cell.
virtual int GetAttributeOrder(vtkGenericAttribute *a)=0
Return the interpolation order of attribute ‘a’ on the cell (may differ by cell).
virtual int IsFaceOnBoundary(vtkIdType faceId)=0
Is the face ‘faceId’ of the current cell on the exterior boundary of the dataset?
virtual void GetPointIterator(vtkGenericPointIterator *it)=0
Return the points of cell into ‘it’.
virtual int GetNumberOfPoints()=0
Return the number of corner points that compose the cell.
void Reset()
Reset internal structures.
virtual int IsPrimary()=0
Is the cell primary (i.e.
virtual int GetNumberOfDOFNodes()=0
Accumulated number of DOF nodes of the current cell.
vtkTypeBool IsAttributeLinear(vtkGenericAttribute *a)
Does the attribute ‘a’ have a non-linear interpolation?
virtual const vtkIdType * GetEdgeArray(vtkIdType edgeId)=0
Return the ids of the vertices defining edge ‘edgeId’.
virtual double GetParametricDistance(const double pcoords[3])=0
Return the distance of the parametric coordinate ‘pcoords’ to the current cell.
virtual vtkIdType GetId()=0
Unique identification number of the cell over the whole data set.
abstract class defined API for attribute data
iterator used to traverse cells
helper class to perform cell tessellation
iterator used to traverse points
a cell that represents a linear 3D hexahedron
list of point or cell ids
Definition: vtkIdList.h:133
abstract interface for implicit functions
Abstract class in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:108
cell represents a 1D line
Definition: vtkLine.h:132
abstract base class for most VTK objects
Definition: vtkObject.h:162
helper class to generate triangulations
represent and manipulate point attribute data
Definition: vtkPointData.h:140
represent and manipulate 3D points
Definition: vtkPoints.h:139
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:132
a 3D cell that represents a linear pyramid
Definition: vtkPyramid.h:95
a cell that represents a 2D quadrilateral
Definition: vtkQuad.h:87
a 3D cell that represents a tetrahedron
Definition: vtkTetra.h:113
a cell that represents a triangle
Definition: vtkTriangle.h:137
dynamic, self-adjusting array of unsigned char
a cell that represents a 3D point
Definition: vtkVertex.h:92
a 3D cell that represents a linear wedge
Definition: vtkWedge.h:85
@ points
Definition: vtkX3D.h:446
@ value
Definition: vtkX3D.h:220
@ size
Definition: vtkX3D.h:253
@ index
Definition: vtkX3D.h:246
int vtkTypeBool
Definition: vtkABI.h:64
int vtkIdType
Definition: vtkType.h:315
#define VTK_NEWINSTANCE