VTK: Common/DataModel/vtkTetra.h Source File

| VTK 9.3.1

vtkTetra.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
30 #ifndef vtkTetra_h
31 #define vtkTetra_h
32
33 #include "vtkCell3D.h"
34 #include "vtkCommonDataModelModule.h" // For export macro
35
36 VTK_ABI_NAMESPACE_BEGIN
37 class vtkLine;
38 class vtkTriangle;
39 class vtkUnstructuredGrid;
40 class vtkIncrementalPointLocator;
41
42 class VTKCOMMONDATAMODEL_EXPORT vtkTetra : public vtkCell3D
43 {
44 public:
45 static vtkTetra* New();
46 vtkTypeMacro(vtkTetra, vtkCell3D);
47 void PrintSelf(ostream& os, vtkIndent indent) override;
48
50
53 void GetEdgePoints(vtkIdType edgeId, const vtkIdType*& pts) override;
54 vtkIdType GetFacePoints(vtkIdType faceId, const vtkIdType*& pts) override;
55 void GetEdgeToAdjacentFaces(vtkIdType edgeId, const vtkIdType*& pts) override;
56 vtkIdType GetFaceToAdjacentFaces(vtkIdType faceId, const vtkIdType*& faceIds) override;
57 vtkIdType GetPointToIncidentEdges(vtkIdType pointId, const vtkIdType*& edgeIds) override;
58 vtkIdType GetPointToIncidentFaces(vtkIdType pointId, const vtkIdType*& faceIds) override;
59 vtkIdType GetPointToOneRingPoints(vtkIdType pointId, const vtkIdType*& pts) override;
60 bool GetCentroid(double centroid[3]) const override;
61 bool IsInsideOut() override;
63
67 static constexpr vtkIdType NumberOfPoints = 4;
68
72 static constexpr vtkIdType NumberOfEdges = 6;
73
77 static constexpr vtkIdType NumberOfFaces = 4;
78
83 static constexpr vtkIdType MaximumFaceSize = 3;
84
90 static constexpr vtkIdType MaximumValence = 3;
91
93
96 int GetCellType() override { return VTK_TETRA; }
97 int GetNumberOfEdges() override { return 6; }
98 int GetNumberOfFaces() override { return 4; }
99 vtkCell* GetEdge(int edgeId) override;
100 vtkCell* GetFace(int faceId) override;
101 void Contour(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
102 vtkCellArray* verts, vtkCellArray* lines, vtkCellArray* polys, vtkPointData* inPd,
103 vtkPointData* outPd, vtkCellData* inCd, vtkIdType cellId, vtkCellData* outCd) override;
104 void Clip(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
105 vtkCellArray* connectivity, vtkPointData* inPd, vtkPointData* outPd, vtkCellData* inCd,
106 vtkIdType cellId, vtkCellData* outCd, int insideOut) override;
107 int EvaluatePosition(const double x[3], double closestPoint[3], int& subId, double pcoords[3],
108 double& dist2, double weights[]) override;
109 void EvaluateLocation(int& subId, const double pcoords[3], double x[3], double* weights) override;
110 int IntersectWithLine(const double p1[3], const double p2[3], double tol, double& t, double x[3],
111 double pcoords[3], int& subId) override;
112 int Triangulate(int index, vtkIdList* ptIds, vtkPoints* pts) override;
113 void Derivatives(
114 int subId, const double pcoords[3], const double* values, int dim, double* derivs) override;
115 double* GetParametricCoords() override;
117
125 static int* GetTriangleCases(int caseId);
126
132 int CellBoundary(int subId, const double pcoords[3], vtkIdList* pts) override;
133
137 int GetParametricCenter(double pcoords[3]) override;
138
143 double GetParametricDistance(const double pcoords[3]) override;
144
148 static void TetraCenter(double p1[3], double p2[3], double p3[3], double p4[3], double center[3]);
149
155 static double Circumsphere(
156 double x1[3], double x2[3], double x3[3], double x4[3], double center[3]);
157
163 static double Insphere(double p1[3], double p2[3], double p3[3], double p4[3], double center[3]);
164
177 static int BarycentricCoords(
178 double x[3], double x1[3], double x2[3], double x3[3], double x4[3], double bcoords[4]);
179
184 static double ComputeVolume(double p1[3], double p2[3], double p3[3], double p4[3]);
185
191 int JacobianInverse(double** inverse, double derivs[12]);
192
193 static void InterpolationFunctions(const double pcoords[3], double weights[4]);
194 static void InterpolationDerivs(const double pcoords[3], double derivs[12]);
196
200 void InterpolateFunctions(const double pcoords[3], double weights[4]) override
201 {
202 vtkTetra::InterpolationFunctions(pcoords, weights);
203 }
204 void InterpolateDerivs(const double pcoords[3], double derivs[12]) override
205 {
206 vtkTetra::InterpolationDerivs(pcoords, derivs);
207 }
209
211
219 static const vtkIdType* GetEdgeArray(vtkIdType edgeId) VTK_SIZEHINT(2);
220 static const vtkIdType* GetFaceArray(vtkIdType faceId) VTK_SIZEHINT(3);
222
226 static const vtkIdType* GetEdgeToAdjacentFacesArray(vtkIdType edgeId) VTK_SIZEHINT(2);
227
231 static const vtkIdType* GetFaceToAdjacentFacesArray(vtkIdType faceId) VTK_SIZEHINT(3);
232
236 static const vtkIdType* GetPointToIncidentEdgesArray(vtkIdType pointId) VTK_SIZEHINT(3);
237
241 static const vtkIdType* GetPointToIncidentFacesArray(vtkIdType pointId) VTK_SIZEHINT(3);
242
246 static const vtkIdType* GetPointToOneRingPointsArray(vtkIdType pointId) VTK_SIZEHINT(3);
247
251 static bool ComputeCentroid(vtkPoints* points, const vtkIdType* pointIds, double centroid[3]);
252
253 protected:
254 vtkTetra();
255 ~vtkTetra() override;
256
257 vtkLine* Line;
258 vtkTriangle* Triangle;
259
260 private:
261 vtkTetra(const vtkTetra&) = delete;
262 void operator=(const vtkTetra&) = delete;
263 };
264
265 inline int vtkTetra::GetParametricCenter(double pcoords[3])
266 {
267 pcoords[0] = pcoords[1] = pcoords[2] = 0.25;
268 return 0;
269 }
270
271 VTK_ABI_NAMESPACE_END
272 #endif
vtkCell3D
abstract class to specify 3D cell interface
Definition: vtkCell3D.h:28
vtkCellArray
object to represent cell connectivity
Definition: vtkCellArray.h:185
vtkCellData
represent and manipulate cell attribute data
Definition: vtkCellData.h:40
vtkCell
abstract class to specify cell behavior
Definition: vtkCell.h:59
vtkCell::GetParametricCenter
virtual int GetParametricCenter(double pcoords[3])
Return center of the cell in parametric coordinates.
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:54
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:32
vtkIncrementalPointLocator
Abstract class in support of both point location and point insertion.
Definition: vtkIncrementalPointLocator.h:41
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:38
vtkLine
cell represents a 1D line
Definition: vtkLine.h:32
vtkPointData
represent and manipulate point attribute data
Definition: vtkPointData.h:39
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:38
vtkTetra
a 3D cell that represents a tetrahedron
Definition: vtkTetra.h:43
vtkTetra::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTetra::Derivatives
void Derivatives(int subId, const double pcoords[3], const double *values, int dim, double *derivs) override
See the vtkCell API for descriptions of these methods.
vtkTetra::GetCentroid
bool GetCentroid(double centroid[3]) const override
See vtkCell3D API for description of these methods.
vtkTetra::GetFaceToAdjacentFacesArray
static const vtkIdType * GetFaceToAdjacentFacesArray(vtkIdType faceId)
Static method version of GetFaceToAdjacentFaces.
vtkTetra::GetEdgeToAdjacentFacesArray
static const vtkIdType * GetEdgeToAdjacentFacesArray(vtkIdType edgeId)
Static method version of GetEdgeToAdjacentFaces.
vtkTetra::vtkTetra
vtkTetra()
vtkTetra::GetEdgeToAdjacentFaces
void GetEdgeToAdjacentFaces(vtkIdType edgeId, const vtkIdType *&pts) override
See vtkCell3D API for description of these methods.
vtkTetra::IntersectWithLine
int IntersectWithLine(const double p1[3], const double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId) override
See the vtkCell API for descriptions of these methods.
vtkTetra::InterpolationDerivs
static void InterpolationDerivs(const double pcoords[3], double derivs[12])
vtkTetra::TetraCenter
static void TetraCenter(double p1[3], double p2[3], double p3[3], double p4[3], double center[3])
Compute the center of the tetrahedron,.
vtkTetra::Clip
void Clip(double value, vtkDataArray *cellScalars, vtkIncrementalPointLocator *locator, vtkCellArray *connectivity, vtkPointData *inPd, vtkPointData *outPd, vtkCellData *inCd, vtkIdType cellId, vtkCellData *outCd, int insideOut) override
See the vtkCell API for descriptions of these methods.
vtkTetra::GetPointToIncidentEdges
vtkIdType GetPointToIncidentEdges(vtkIdType pointId, const vtkIdType *&edgeIds) override
See vtkCell3D API for description of these methods.
vtkTetra::GetFaceArray
static const vtkIdType * GetFaceArray(vtkIdType faceId)
Return the ids of the vertices defining edge/face (edgeId/‘faceId’).
vtkTetra::GetParametricDistance
double GetParametricDistance(const double pcoords[3]) override
Return the distance of the parametric coordinate provided to the cell.
vtkTetra::GetParametricCenter
int GetParametricCenter(double pcoords[3]) override
Return the center of the tetrahedron in parametric coordinates.
Definition: vtkTetra.h:265
vtkTetra::GetPointToOneRingPointsArray
static const vtkIdType * GetPointToOneRingPointsArray(vtkIdType pointId)
Static method version of GetPointToOneRingPoints.
vtkTetra::Triangle
vtkTriangle * Triangle
Definition: vtkTetra.h:258
vtkTetra::GetEdge
vtkCell * GetEdge(int edgeId) override
See the vtkCell API for descriptions of these methods.
vtkTetra::EvaluateLocation
void EvaluateLocation(int &subId, const double pcoords[3], double x[3], double *weights) override
See the vtkCell API for descriptions of these methods.
vtkTetra::GetTriangleCases
static int * GetTriangleCases(int caseId)
Return the case table for table-based isocontouring (aka marching cubes style implementations).
vtkTetra::IsInsideOut
bool IsInsideOut() override
See vtkCell3D API for description of these methods.
vtkTetra::~vtkTetra
~vtkTetra() override
vtkTetra::InterpolateFunctions
void InterpolateFunctions(const double pcoords[3], double weights[4]) override
Compute the interpolation functions/derivatives (aka shape functions/derivatives)
Definition: vtkTetra.h:200
vtkTetra::GetPointToIncidentFacesArray
static const vtkIdType * GetPointToIncidentFacesArray(vtkIdType pointId)
Static method version of GetPointToIncidentFacesArray.
vtkTetra::GetFace
vtkCell * GetFace(int faceId) override
See the vtkCell API for descriptions of these methods.
vtkTetra::GetEdgeArray
static const vtkIdType * GetEdgeArray(vtkIdType edgeId)
Return the ids of the vertices defining edge/face (edgeId/‘faceId’).
vtkTetra::BarycentricCoords
static int BarycentricCoords(double x[3], double x1[3], double x2[3], double x3[3], double x4[3], double bcoords[4])
Given a 3D point x[3], determine the barycentric coordinates of the point.
vtkTetra::ComputeVolume
static double ComputeVolume(double p1[3], double p2[3], double p3[3], double p4[3])
Compute the volume of a tetrahedron defined by the four points p1, p2, p3, and p4.
vtkTetra::ComputeCentroid
static bool ComputeCentroid(vtkPoints *points, const vtkIdType *pointIds, double centroid[3])
Static method version of GetCentroid.
vtkTetra::JacobianInverse
int JacobianInverse(double **inverse, double derivs[12])
Given parametric coordinates compute inverse Jacobian transformation matrix.
vtkTetra::New
static vtkTetra * New()
vtkTetra::GetPointToIncidentEdgesArray
static const vtkIdType * GetPointToIncidentEdgesArray(vtkIdType pointId)
Static method version of GetPointToIncidentEdgesArray.
vtkTetra::GetNumberOfEdges
int GetNumberOfEdges() override
See the vtkCell API for descriptions of these methods.
Definition: vtkTetra.h:97
vtkTetra::GetFacePoints
vtkIdType GetFacePoints(vtkIdType faceId, const vtkIdType *&pts) override
See vtkCell3D API for description of these methods.
vtkTetra::Insphere
static double Insphere(double p1[3], double p2[3], double p3[3], double p4[3], double center[3])
Compute the center (center[3]) and radius (method return value) of a sphere that just fits inside the...
vtkTetra::GetEdgePoints
void GetEdgePoints(vtkIdType edgeId, const vtkIdType *&pts) override
See vtkCell3D API for description of these methods.
vtkTetra::Triangulate
int Triangulate(int index, vtkIdList *ptIds, vtkPoints *pts) override
See the vtkCell API for descriptions of these methods.
vtkTetra::GetPointToIncidentFaces
vtkIdType GetPointToIncidentFaces(vtkIdType pointId, const vtkIdType *&faceIds) override
See vtkCell3D API for description of these methods.
vtkTetra::EvaluatePosition
int EvaluatePosition(const double x[3], double closestPoint[3], int &subId, double pcoords[3], double &dist2, double weights[]) override
See the vtkCell API for descriptions of these methods.
vtkTetra::GetFaceToAdjacentFaces
vtkIdType GetFaceToAdjacentFaces(vtkIdType faceId, const vtkIdType *&faceIds) override
See vtkCell3D API for description of these methods.
vtkTetra::GetNumberOfFaces
int GetNumberOfFaces() override
See the vtkCell API for descriptions of these methods.
Definition: vtkTetra.h:98
vtkTetra::GetPointToOneRingPoints
vtkIdType GetPointToOneRingPoints(vtkIdType pointId, const vtkIdType *&pts) override
See vtkCell3D API for description of these methods.
vtkTetra::Circumsphere
static double Circumsphere(double x1[3], double x2[3], double x3[3], double x4[3], double center[3])
Compute the circumcenter (center[3]) and radius squared (method return value) of a tetrahedron define...
vtkTetra::GetParametricCoords
double * GetParametricCoords() override
See the vtkCell API for descriptions of these methods.
vtkTetra::Line
vtkLine * Line
Definition: vtkTetra.h:257
vtkTetra::Contour
void Contour(double value, vtkDataArray *cellScalars, vtkIncrementalPointLocator *locator, vtkCellArray *verts, vtkCellArray *lines, vtkCellArray *polys, vtkPointData *inPd, vtkPointData *outPd, vtkCellData *inCd, vtkIdType cellId, vtkCellData *outCd) override
See the vtkCell API for descriptions of these methods.
vtkTetra::CellBoundary
int CellBoundary(int subId, const double pcoords[3], vtkIdList *pts) override
Returns the set of points that are on the boundary of the tetrahedron that are closest parametrically...
vtkTetra::GetCellType
int GetCellType() override
See the vtkCell API for descriptions of these methods.
Definition: vtkTetra.h:96
vtkTetra::InterpolateDerivs
void InterpolateDerivs(const double pcoords[3], double derivs[12]) override
Compute the interpolation functions/derivatives (aka shape functions/derivatives)
Definition: vtkTetra.h:204
vtkTetra::InterpolationFunctions
static void InterpolationFunctions(const double pcoords[3], double weights[4])
vtkTriangle
a cell that represents a triangle
Definition: vtkTriangle.h:37
vtkUnstructuredGrid
dataset represents arbitrary combinations of all possible cell types
Definition: vtkUnstructuredGrid.h:99
vtkX3D::points
@ points
Definition: vtkX3D.h:446
vtkX3D::value
@ value
Definition: vtkX3D.h:220
vtkX3D::center
@ center
Definition: vtkX3D.h:230
vtkX3D::index
@ index
Definition: vtkX3D.h:246
vtkCell3D.h
VTK_TETRA
@ VTK_TETRA
Definition: vtkCellType.h:56
vtkIdType
int vtkIdType
Definition: vtkType.h:315
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:36