VTK  9.1.0
vtkHigherOrderWedge.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkHigherOrderWedge.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=========================================================================*/
34#ifndef vtkHigherOrderWedge_h
35#define vtkHigherOrderWedge_h
36
37#include <functional> //For std::function
38
39#include "vtkCellType.h" // For GetCellType.
40#include "vtkCommonDataModelModule.h" // For export macro
41#include "vtkDeprecation.h" // For deprecation macros
42#include "vtkNew.h" // For member variable.
43#include "vtkNonLinearCell.h"
44#include "vtkSmartPointer.h" // For member variable.
45
46class vtkCellData;
47class vtkDoubleArray;
48class vtkWedge;
49class vtkIdList;
50class vtkPointData;
51class vtkPoints;
52class vtkVector3d;
53class vtkVector3i;
58
59class VTKCOMMONDATAMODEL_EXPORT vtkHigherOrderWedge : public vtkNonLinearCell
60{
61public:
63 void PrintSelf(ostream& os, vtkIndent indent) override;
64
65 int GetCellType() override = 0;
66 int GetCellDimension() override { return 3; }
67 int RequiresInitialization() override { return 1; }
68 int GetNumberOfEdges() override { return 9; }
69 int GetNumberOfFaces() override { return 5; }
70 vtkCell* GetEdge(int edgeId) override = 0;
71 void SetEdgeIdsAndPoints(int edgeId,
72 const std::function<void(const vtkIdType&)>& set_number_of_ids_and_points,
73 const std::function<void(const vtkIdType&, const vtkIdType&)>& set_ids_and_points);
74 vtkCell* GetFace(int faceId) override = 0;
75
76 void Initialize() override;
77
78 int CellBoundary(int subId, const double pcoords[3], vtkIdList* pts) override;
79 int EvaluatePosition(const double x[3], double closestPoint[3], int& subId, double pcoords[3],
80 double& dist2, double weights[]) override;
81 void EvaluateLocation(int& subId, const double pcoords[3], double x[3], double* weights) override;
82 void Contour(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
83 vtkCellArray* verts, vtkCellArray* lines, vtkCellArray* polys, vtkPointData* inPd,
84 vtkPointData* outPd, vtkCellData* inCd, vtkIdType cellId, vtkCellData* outCd) override;
85 void Clip(double value, vtkDataArray* cellScalars, vtkIncrementalPointLocator* locator,
86 vtkCellArray* polys, vtkPointData* inPd, vtkPointData* outPd, vtkCellData* inCd,
87 vtkIdType cellId, vtkCellData* outCd, int insideOut) override;
88 int IntersectWithLine(const double p1[3], const double p2[3], double tol, double& t, double x[3],
89 double pcoords[3], int& subId) override;
90 int Triangulate(int index, vtkIdList* ptIds, vtkPoints* pts) override;
92 int subId, const double pcoords[3], const double* values, int dim, double* derivs) override;
94 double* GetParametricCoords() override;
95 int GetParametricCenter(double center[3]) override;
96
97 double GetParametricDistance(const double pcoords[3]) override;
98
100 vtkCellData* cell_data, const vtkIdType numPts, const vtkIdType cell_id);
101 virtual void SetUniformOrderFromNumPoints(const vtkIdType numPts);
102 virtual void SetOrder(const int s, const int t, const int u, const vtkIdType numPts);
103 virtual const int* GetOrder();
104 virtual int GetOrder(int i) { return this->GetOrder()[i]; }
105
106 void InterpolateFunctions(const double pcoords[3], double* weights) override = 0;
107 void InterpolateDerivs(const double pcoords[3], double* derivs) override = 0;
108
110 bool SubCellCoordinatesFromId(int& i, int& j, int& k, int subId);
111 static int PointIndexFromIJK(int i, int j, int k, const int* order);
112 int PointIndexFromIJK(int i, int j, int k);
113 bool TransformApproxToCellParams(int subCell, double* pcoords);
114 bool TransformFaceToCellParams(int bdyFace, double* pcoords);
115
116 static int GetNumberOfApproximatingWedges(const int* order);
118 {
120 }
121 VTK_DEPRECATED_IN_9_1_0("renamed to GetBoundaryQuad")
122 virtual vtkHigherOrderQuadrilateral* getBdyQuad();
123 virtual vtkHigherOrderQuadrilateral* GetBoundaryQuad() = 0;
124 VTK_DEPRECATED_IN_9_1_0("renamed to GetBoundaryTri")
125 virtual vtkHigherOrderTriangle* getBdyTri();
126 virtual vtkHigherOrderTriangle* GetBoundaryTri() = 0;
127 VTK_DEPRECATED_IN_9_1_0("renamed to GetEdgeCell")
128 virtual vtkHigherOrderCurve* getEdgeCell();
129 virtual vtkHigherOrderCurve* GetEdgeCell() = 0;
130 VTK_DEPRECATED_IN_9_1_0("renamed to GetInterpolation")
131 virtual vtkHigherOrderInterpolation* getInterp();
132 virtual vtkHigherOrderInterpolation* GetInterpolation() = 0;
133
134protected:
137
138 vtkWedge* GetApprox();
139 void PrepareApproxData(
140 vtkPointData* pd, vtkCellData* cd, vtkIdType cellId, vtkDataArray* cellScalars);
141 vtkWedge* GetApproximateWedge(
142 int subId, vtkDataArray* scalarsIn = nullptr, vtkDataArray* scalarsOut = nullptr);
143
144 void GetTriangularFace(vtkHigherOrderTriangle* result, int faceId,
145 const std::function<void(const vtkIdType&)>& set_number_of_ids_and_points,
146 const std::function<void(const vtkIdType&, const vtkIdType&)>& set_ids_and_points);
147 void GetQuadrilateralFace(vtkHigherOrderQuadrilateral* result, int faceId,
148 const std::function<void(const vtkIdType&)>& set_number_of_ids_and_points,
149 const std::function<void(const vtkIdType&, const vtkIdType&)>& set_ids_and_points);
150
151 int Order[4];
152 vtkSmartPointer<vtkPoints> PointParametricCoordinates;
156 vtkNew<vtkDoubleArray> CellScalars;
160
161private:
163 void operator=(const vtkHigherOrderWedge&) = delete;
164};
165
166inline int vtkHigherOrderWedge::GetParametricCenter(double center[3])
167{
168 center[0] = center[1] = 1. / 3.;
169 center[2] = 0.5;
170 return 0;
171}
172
173#endif // vtkHigherOrderWedge_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
A 2D cell that represents an arbitrary order HigherOrder triangle.
A 3D cell that represents an arbitrary order HigherOrder wedge.
int PointIndexFromIJK(int i, int j, int k)
bool TransformFaceToCellParams(int bdyFace, double *pcoords)
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 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...
bool TransformApproxToCellParams(int subCell, double *pcoords)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkCell * GetFace(int faceId) override=0
Return the face cell from the faceId of the cell.
bool SubCellCoordinatesFromId(vtkVector3i &ijk, int subId)
static int GetNumberOfApproximatingWedges(const int *order)
virtual void SetUniformOrderFromNumPoints(const vtkIdType numPts)
virtual const int * GetOrder()
void InterpolateDerivs(const double pcoords[3], double *derivs) override=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...
void InterpolateFunctions(const double pcoords[3], double *weights) override=0
double GetParametricDistance(const double pcoords[3]) override
Return the distance of the parametric coordinate provided to the cell.
vtkCell * GetEdge(int edgeId) override=0
Return the edge cell from the edgeId of the cell.
virtual int GetOrder(int i)
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.
static int PointIndexFromIJK(int i, int j, int k, const int *order)
int Triangulate(int index, vtkIdList *ptIds, vtkPoints *pts) override
Generate simplices of proper dimension.
int GetCellDimension() override
Return the topological dimensional of the cell (0,1,2, or 3).
int GetNumberOfEdges() override
Return the number of edges in the cell.
int GetCellType() override=0
Return the type of cell.
virtual void SetOrderFromCellData(vtkCellData *cell_data, const vtkIdType numPts, const vtkIdType cell_id)
int GetNumberOfFaces() override
Return the number of faces in the cell.
double * GetParametricCoords() override
Return a contiguous array of parametric coordinates of the points defining this cell.
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)
bool SubCellCoordinatesFromId(int &i, int &j, int &k, int subId)
virtual void SetOrder(const int s, const int t, const int u, const vtkIdType numPts)
int RequiresInitialization() override
Some cells require initialization prior to access.
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.
void Initialize() override
void Derivatives(int subId, const double pcoords[3], const double *values, int dim, double *derivs) override
Compute derivatives given cell subId and parametric coordinates.
void EvaluateLocation(int &subId, const double pcoords[3], double x[3], double *weights) override
Determine global coordinate (x[3]) from subId and parametric coordinates.
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
Hold a reference to a vtkObjectBase instance.
a 3D cell that represents a linear wedge
Definition: vtkWedge.h:93
#define VTK_DEPRECATED_IN_9_1_0(reason)
int vtkIdType
Definition: vtkType.h:332