VTK  9.3.1
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 
124  int IsGeometryLinear();
125 
132  virtual int GetAttributeOrder(vtkGenericAttribute* a) = 0;
133 
140  virtual int GetHighestOrderAttribute(vtkGenericAttributeCollection* ac);
141 
147  vtkTypeBool IsAttributeLinear(vtkGenericAttribute* a);
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 
190  virtual void GetPointIterator(vtkGenericPointIterator* it) = 0;
191 
197  virtual vtkGenericCellIterator* NewCellIterator() = 0;
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 
522  virtual void TriangulateFace(vtkGenericAttributeCollection* attributes,
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:
564  ~vtkGenericAdaptorCell() override;
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
abstract interface for implicit functions
helper object to manage setting and generating contour values
void GetBounds(T a, double bds[6])
abstract base class for most VTK objects
Definition: vtkObject.h:51
represent and manipulate point attribute data
Definition: vtkPointData.h:29
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
helper class to perform cell tessellation
a cell that represents a 3D point
Definition: vtkVertex.h:22
a 3D cell that represents a linear pyramid
Definition: vtkPyramid.h:35
represent and manipulate cell attribute data
Definition: vtkCellData.h:30
Abstract class in support of both point location and point insertion.
helper class to generate triangulations
a cell that represents a 2D quadrilateral
Definition: vtkQuad.h:27
int vtkIdType
Definition: vtkType.h:315
iterator used to traverse points
abstract class defined API for attribute data
vtkDoubleArray * PointDataScalars
dynamic, self-adjusting array of double
iterator used to traverse cells
int vtkTypeBool
Definition: vtkABI.h:64
defines cell interface
a 3D cell that represents a tetrahedron
Definition: vtkTetra.h:33
cell represents a 1D line
Definition: vtkLine.h:22
a simple class to control print indentation
Definition: vtkIndent.h:28
list of point or cell ids
Definition: vtkIdList.h:22
vtkDoubleArray * InternalScalars
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:31
a cell that represents a linear 3D hexahedron
Definition: vtkHexahedron.h:33
#define VTK_NEWINSTANCE
dynamic, self-adjusting array of unsigned char
object to represent cell connectivity
Definition: vtkCellArray.h:175
a cell that represents a triangle
Definition: vtkTriangle.h:27
vtkDoubleArray * InternalPoints
a 3D cell that represents a linear wedge
Definition: vtkWedge.h:35
represent and manipulate 3D points
Definition: vtkPoints.h:28