VTK  9.1.0
vtkHigherOrderQuadrilateral.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkHigherOrderQuadrilateral.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15// .NAME vtkHigherOrderQuadrilateral
16// .SECTION Description
17// .SECTION See Also
18
19#ifndef vtkHigherOrderQuadrilateral_h
20#define vtkHigherOrderQuadrilateral_h
21
22#include <functional> //For std::function
23
24#include "vtkCellType.h" // For GetCellType.
25#include "vtkCommonDataModelModule.h" // For export macro
26#include "vtkDeprecation.h" // For deprecation macros
27#include "vtkNew.h" // For member variable.
28#include "vtkNonLinearCell.h"
29#include "vtkSmartPointer.h" // For member variable.
30
31class vtkCellData;
32class vtkDoubleArray;
33class vtkIdList;
35class vtkPointData;
36class vtkPoints;
37class vtkQuad;
38class vtkVector3d;
39class vtkVector3i;
40
41class VTKCOMMONDATAMODEL_EXPORT vtkHigherOrderQuadrilateral : public vtkNonLinearCell
42{
43public:
45 void PrintSelf(ostream& os, vtkIndent indent) override;
46
47 int GetCellType() override = 0;
48 int GetCellDimension() override { return 2; }
49 int RequiresInitialization() override { return 0; }
50 int GetNumberOfEdges() override { return 4; }
51 int GetNumberOfFaces() override { return 0; }
52 vtkCell* GetEdge(int edgeId) override = 0;
53 vtkCell* GetFace(int vtkNotUsed(faceId)) override { return nullptr; }
54 void SetEdgeIdsAndPoints(int edgeId,
55 const std::function<void(const vtkIdType&)>& set_number_of_ids_and_points,
56 const std::function<void(const vtkIdType&, const vtkIdType&)>& set_ids_and_points);
57
58 void Initialize() override;
59
60 int CellBoundary(int subId, const double pcoords[3], vtkIdList* pts) override;
61 int EvaluatePosition(const double x[3], double closestPoint[3], int& subId, double pcoords[3],
62 double& dist2, double weights[]) override;
63 void EvaluateLocation(int& subId, const double pcoords[3], double x[3], double* weights) override;
64 void Contour(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
65 vtkCellArray* verts, vtkCellArray* lines, vtkCellArray* polys, vtkPointData* inPd,
66 vtkPointData* outPd, vtkCellData* inCd, vtkIdType cellId, vtkCellData* outCd) override;
67 void Clip(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
68 vtkCellArray* polys, vtkPointData* inPd, vtkPointData* outPd, vtkCellData* inCd,
69 vtkIdType cellId, vtkCellData* outCd, int insideOut) override;
70 int IntersectWithLine(const double p1[3], const double p2[3], double tol, double& t, double x[3],
71 double pcoords[3], int& subId) override;
72 int Triangulate(int index, vtkIdList* ptIds, vtkPoints* pts) override;
74 int subId, const double pcoords[3], const double* values, int dim, double* derivs) override;
76 double* GetParametricCoords() override;
77 int GetParametricCenter(double center[3]) override;
78
79 double GetParametricDistance(const double pcoords[3]) override;
80
82 vtkCellData* cell_data, const vtkIdType numPts, const vtkIdType cell_id);
83 virtual void SetUniformOrderFromNumPoints(const vtkIdType numPts);
84 virtual void SetOrder(const int s, const int t);
85 virtual const int* GetOrder();
86 virtual int GetOrder(int i) { return this->GetOrder()[i]; }
87
88 void InterpolateFunctions(const double pcoords[3], double* weights) override = 0;
89 void InterpolateDerivs(const double pcoords[3], double* derivs) override = 0;
90
92 bool SubCellCoordinatesFromId(int& i, int& j, int& k, int subId);
93 int PointIndexFromIJK(int i, int j, int k);
94 static int PointIndexFromIJK(int i, int j, const int* order);
95 bool TransformApproxToCellParams(int subCell, double* pcoords);
96
98 VTK_DEPRECATED_IN_9_1_0("renamed to GetEdgeCell")
99 virtual vtkHigherOrderCurve* getEdgeCell();
100
101protected:
104
105 vtkQuad* GetApprox();
106 // The verion of GetApproximateQuad between Lagrange and Bezier is different because Bezier is
107 // non-interpolatory
108 void PrepareApproxData(
109 vtkPointData* pd, vtkCellData* cd, vtkIdType cellId, vtkDataArray* cellScalars);
110 virtual vtkQuad* GetApproximateQuad(
111 int subId, vtkDataArray* scalarsIn = nullptr, vtkDataArray* scalarsOut = nullptr) = 0;
112
113 int Order[3];
114 vtkSmartPointer<vtkPoints> PointParametricCoordinates;
118 vtkNew<vtkDoubleArray> CellScalars;
122
123private:
125 void operator=(const vtkHigherOrderQuadrilateral&) = delete;
126};
127
128inline int vtkHigherOrderQuadrilateral::GetParametricCenter(double center[3])
129{
130 center[0] = center[1] = 0.5;
131 center[2] = 0.0;
132 return 0;
133}
134
135#endif // vtkHigherOrderQuadrilateral_h
object to represent cell connectivity
Definition: vtkCellArray.h:290
represent and manipulate cell attribute data
Definition: vtkCellData.h:142
abstract class to specify cell behavior
Definition: vtkCell.h:147
virtual int GetParametricCenter(double pcoords[3])
Return center of the cell in parametric coordinates.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
dynamic, self-adjusting array of double
void Clip(double value, vtkDataArray *cellScalars, vtkIncrementalPointLocator *locator, vtkCellArray *polys, vtkPointData *inPd, vtkPointData *outPd, vtkCellData *inCd, vtkIdType cellId, vtkCellData *outCd, int insideOut) override
Cut (or clip) the cell based on the input cellScalars and the specified value.
vtkCell * GetFace(int vtkNotUsed(faceId)) override
virtual void SetUniformOrderFromNumPoints(const vtkIdType numPts)
bool SubCellCoordinatesFromId(vtkVector3i &ijk, int subId)
int GetNumberOfEdges() override
Return the number of edges in the cell.
int GetNumberOfFaces() override
Return the number of faces in the cell.
int IntersectWithLine(const double p1[3], const double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId) override
Intersect with a ray.
bool SubCellCoordinatesFromId(int &i, int &j, int &k, int subId)
virtual void SetOrderFromCellData(vtkCellData *cell_data, const vtkIdType numPts, const vtkIdType cell_id)
int PointIndexFromIJK(int i, int j, int k)
int RequiresInitialization() override
Some cells require initialization prior to access.
int GetCellDimension() override
Return the topological dimensional of the cell (0,1,2, or 3).
virtual void SetOrder(const int s, const int t)
void SetEdgeIdsAndPoints(int edgeId, const std::function< void(const vtkIdType &)> &set_number_of_ids_and_points, const std::function< void(const vtkIdType &, const vtkIdType &)> &set_ids_and_points)
static int PointIndexFromIJK(int i, int j, const int *order)
double GetParametricDistance(const double pcoords[3]) override
Return the distance of the parametric coordinate provided to the cell.
void EvaluateLocation(int &subId, const double pcoords[3], double x[3], double *weights) override
Determine global coordinate (x[3]) from subId and parametric coordinates.
void Initialize() override
void InterpolateDerivs(const double pcoords[3], double *derivs) override=0
virtual const int * GetOrder()
void Derivatives(int subId, const double pcoords[3], const double *values, int dim, double *derivs) override
Compute derivatives given cell subId and parametric coordinates.
double * GetParametricCoords() override
Return a contiguous array of parametric coordinates of the points defining this cell.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkCell * GetEdge(int edgeId) override=0
Return the edge cell from the edgeId of the cell.
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
Generate contouring primitives.
int Triangulate(int index, vtkIdList *ptIds, vtkPoints *pts) override
Generate simplices of proper dimension.
void InterpolateFunctions(const double pcoords[3], double *weights) override=0
virtual vtkHigherOrderCurve * GetEdgeCell()=0
int EvaluatePosition(const double x[3], double closestPoint[3], int &subId, double pcoords[3], double &dist2, double weights[]) override
Given a point x[3] return inside(=1), outside(=0) cell, or (-1) computational problem encountered; ev...
int CellBoundary(int subId, const double pcoords[3], vtkIdList *pts) override
Given parametric coordinates of a point, return the closest cell boundary, and whether the point is i...
int GetCellType() override=0
Return the type of cell.
bool TransformApproxToCellParams(int subCell, double *pcoords)
list of point or cell ids
Definition: vtkIdList.h:140
Abstract class in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:113
Allocate and hold a VTK object.
Definition: vtkNew.h:165
abstract superclass for non-linear cells
represent and manipulate point attribute data
Definition: vtkPointData.h:142
represent and manipulate 3D points
Definition: vtkPoints.h:143
a cell that represents a 2D quadrilateral
Definition: vtkQuad.h:95
Hold a reference to a vtkObjectBase instance.
#define VTK_DEPRECATED_IN_9_1_0(reason)
int vtkIdType
Definition: vtkType.h:332