VTK  9.7.1
vtkCell.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
28 #ifndef vtkCell_h
29 #define vtkCell_h
30 
31 #define VTK_CELL_SIZE 512
32 #define VTK_TOL 1.e-05 // Tolerance for geometric calculation
33 
34 #include "vtkCommonDataModelModule.h" // For export macro
35 #include "vtkObject.h"
36 
37 #include "vtkBoundingBox.h" // Needed for IntersectWithCell
38 #include "vtkCellType.h" // Needed to define cell types
39 #include "vtkIdList.h" // Needed for inline methods
40 #include "vtkSmartPointer.h" // Needed for vtkSmartPointer
41 
42 VTK_ABI_NAMESPACE_BEGIN
43 class vtkCellArray;
44 class vtkCellData;
45 class vtkDataArray;
46 class vtkPointData;
48 class vtkPoints;
49 
50 class VTKCOMMONDATAMODEL_EXPORT vtkCell : public vtkObject
51 {
52 public:
53  vtkTypeMacro(vtkCell, vtkObject);
54  void PrintSelf(ostream& os, vtkIndent indent) override;
55 
60  void Initialize(int npts, const vtkIdType* pts, vtkPoints* p);
61 
68  void Initialize(int npts, vtkPoints* p);
69 
75  virtual void ShallowCopy(vtkCell* c);
76 
81  virtual void DeepCopy(vtkCell* c);
82 
86  virtual int GetCellType() = 0;
87 
91  virtual int GetCellDimension() = 0;
92 
98  virtual int IsLinear() VTK_FUTURE_CONST { return 1; }
99 
104  virtual int RequiresInitialization() { return 0; }
105  virtual void Initialize() {}
106 
112  virtual int IsExplicitCell() VTK_FUTURE_CONST { return 0; }
113 
119  virtual int RequiresExplicitFaceRepresentation() VTK_FUTURE_CONST { return 0; }
120 
124  vtkPoints* GetPoints() { return this->Points; }
125 
129  vtkIdType GetNumberOfPoints() const { return this->PointIds->GetNumberOfIds(); }
130 
134  virtual int GetNumberOfEdges() = 0;
135 
139  virtual int GetNumberOfFaces() = 0;
140 
144  vtkIdList* GetPointIds() { return this->PointIds; }
145 
149  vtkIdType GetPointId(int ptId) VTK_EXPECTS(0 <= ptId && ptId < GetPointIds()->GetNumberOfIds())
150  {
151  return this->PointIds->GetId(ptId);
152  }
153 
157  virtual vtkCell* GetEdge(int edgeId) = 0;
158 
170  virtual vtkCell* GetFace(int faceId) = 0;
171 
179  virtual int CellBoundary(int subId, const double pcoords[3], vtkIdList* pts) = 0;
180 
198  virtual int EvaluatePosition(const double x[3], double closestPoint[3], int& subId,
199  double pcoords[3], double& dist2, double weights[]) = 0;
200 
206  virtual void EvaluateLocation(
207  int& subId, const double pcoords[3], double x[3], double* weights) = 0;
208 
222  virtual void Contour(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
223  vtkCellArray* verts, vtkCellArray* lines, vtkCellArray* polys, vtkPointData* inPd,
224  vtkPointData* outPd, vtkCellData* inCd, vtkIdType cellId, vtkCellData* outCd) = 0;
225 
238  virtual void Clip(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
239  vtkCellArray* connectivity, vtkPointData* inPd, vtkPointData* outPd, vtkCellData* inCd,
240  vtkIdType cellId, vtkCellData* outCd, int insideOut) = 0;
241 
255  virtual int Inflate(double dist);
256 
265  virtual double ComputeBoundingSphere(double center[3]) const;
266 
275  virtual int IntersectWithLine(const double p1[3], const double p2[3], double tol, double& t,
276  double x[3], double pcoords[3], int& subId) = 0;
277 
279 
286  virtual int IntersectWithCell(vtkCell* other, double tol = 0.0);
287  virtual int IntersectWithCell(vtkCell* other, const vtkBoundingBox& boudingBox,
288  const vtkBoundingBox& otherBoundingBox, double tol = 0.0);
290 
301  virtual int Triangulate(int index, vtkIdList* ptIds, vtkPoints* pts);
302 
313  virtual int TriangulateIds(int index, vtkIdList* ptIds);
314 
326  virtual int TriangulateLocalIds(int index, vtkIdList* ptIds) = 0;
327 
342  virtual void Derivatives(
343  int subId, const double pcoords[3], const double* values, int dim, double* derivs) = 0;
344 
349  void GetBounds(double bounds[6]);
350 
355  double* GetBounds() VTK_SIZEHINT(6);
356 
360  double GetLength2();
361 
368  virtual int GetParametricCenter(double pcoords[3]);
369 
377  virtual double GetParametricDistance(const double pcoords[3]);
378 
386  virtual int IsPrimaryCell() VTK_FUTURE_CONST { return 1; }
387 
397  virtual double* GetParametricCoords() VTK_SIZEHINT(3 * GetNumberOfPoints());
398 
404  virtual void InterpolateFunctions(const double vtkNotUsed(pcoords)[3], double* vtkNotUsed(weight))
405  {
406  }
407  virtual void InterpolateDerivs(const double vtkNotUsed(pcoords)[3], double* vtkNotUsed(derivs)) {}
408 
409  // left public for quick computational access
412 
413 protected:
414  vtkCell();
415  ~vtkCell() override;
416 
417  double Bounds[6];
418 
419 private:
420  vtkCell(const vtkCell&) = delete;
421  void operator=(const vtkCell&) = delete;
422 };
423 
424 VTK_ABI_NAMESPACE_END
425 #endif
virtual void InterpolateDerivs(const double pcoords[3], double *derivs)
Definition: vtkCell.h:407
vtkIdList * PointIds
Definition: vtkCell.h:411
void GetBounds(T a, double bds[6])
abstract base class for most VTK objects
Definition: vtkObject.h:52
represent and manipulate point attribute data
Definition: vtkPointData.h:30
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkIdType GetNumberOfPoints() const
Return the number of points in the cell.
Definition: vtkCell.h:129
vtkPoints * GetPoints()
Get the point coordinates for the cell.
Definition: vtkCell.h:124
represent and manipulate cell attribute data
Definition: vtkCellData.h:31
Abstract class in support of both point location and point insertion.
int vtkIdType
Definition: vtkType.h:363
vtkIdType GetPointId(int ptId)
For cell point i, return the actual point id.
Definition: vtkCell.h:149
virtual int IsLinear() VTK_FUTURE_CONST
Non-linear cells require special treatment beyond the usual cell type and connectivity list informati...
Definition: vtkCell.h:98
abstract class to specify cell behavior
Definition: vtkCell.h:50
VTKIOCATALYSTCONDUIT_EXPORT int GetCellType(const std::string &shape)
Get vtk cell type from conduit shape name throw a runtime_error on unsupported type.
vtkPoints * Points
Definition: vtkCell.h:410
virtual int IsExplicitCell() VTK_FUTURE_CONST
Explicit cells require additional representational information beyond the usual cell type and connect...
Definition: vtkCell.h:112
a simple class to control print indentation
Definition: vtkIndent.h:28
list of point or cell ids
Definition: vtkIdList.h:25
virtual int RequiresExplicitFaceRepresentation() VTK_FUTURE_CONST
Determine whether the cell requires explicit face representation, and methods for setting and getting...
Definition: vtkCell.h:119
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
virtual int RequiresInitialization()
Some cells require initialization prior to access.
Definition: vtkCell.h:104
#define VTK_SIZEHINT(...)
object to represent cell connectivity
Definition: vtkCellArray.h:177
vtkIdList * GetPointIds()
Return the list of point ids defining the cell.
Definition: vtkCell.h:144
virtual void Initialize()
Definition: vtkCell.h:105
#define VTK_EXPECTS(x)
represent and manipulate 3D points
Definition: vtkPoints.h:30
Fast, simple class for representing and operating on 3D bounds.