VTK
vtkQuadraticPolygon.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkQuadraticPolygon.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=========================================================================*/
36#ifndef vtkQuadraticPolygon_h
37#define vtkQuadraticPolygon_h
38
39#include "vtkCommonDataModelModule.h" // For export macro
40#include "vtkNonLinearCell.h"
41
43class vtkPolygon;
44class vtkIdTypeArray;
45
46class VTKCOMMONDATAMODEL_EXPORT vtkQuadraticPolygon : public vtkNonLinearCell
47{
48public:
51 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
52
57 int GetCellType() VTK_OVERRIDE { return VTK_QUADRATIC_POLYGON; }
58 int GetCellDimension() VTK_OVERRIDE { return 2;}
59 int GetNumberOfEdges() VTK_OVERRIDE { return this->GetNumberOfPoints() / 2; }
60 int GetNumberOfFaces() VTK_OVERRIDE { return 0; }
61 vtkCell *GetEdge(int) VTK_OVERRIDE;
62 vtkCell *GetFace(int) VTK_OVERRIDE { return 0; }
63 int IsPrimaryCell() VTK_OVERRIDE { return 0; }
64
66
72 int CellBoundary(int subId, double pcoords[3], vtkIdList *pts) VTK_OVERRIDE;
73 void Contour(double value, vtkDataArray *cellScalars,
75 vtkCellArray *lines, vtkCellArray *polys,
76 vtkPointData *inPd, vtkPointData *outPd,
77 vtkCellData *inCd, vtkIdType cellId, vtkCellData *outCd) VTK_OVERRIDE;
78 void Clip(double value, vtkDataArray *cellScalars,
80 vtkPointData *inPd, vtkPointData *outPd,
81 vtkCellData *inCd, vtkIdType cellId, vtkCellData *outCd,
82 int insideOut) VTK_OVERRIDE;
83 int EvaluatePosition(double x[3], double* closestPoint,
84 int& subId, double pcoords[3],
85 double& dist2, double *weights) VTK_OVERRIDE;
86 void EvaluateLocation(int& subId, double pcoords[3], double x[3],
87 double *weights) VTK_OVERRIDE;
88 int IntersectWithLine(double p1[3], double p2[3], double tol, double& t,
89 double x[3], double pcoords[3], int& subId) VTK_OVERRIDE;
90 void InterpolateFunctions(double x[3], double *weights) VTK_OVERRIDE;
92 double centroid[3]);
93 int ParameterizePolygon(double p0[3], double p10[3], double &l10,
94 double p20[3], double &l20, double n[3]);
95 static int PointInPolygon(double x[3], int numPts, double *pts,
96 double bounds[6], double n[3]);
97 int Triangulate(vtkIdList *outTris);
98 int Triangulate(int index, vtkIdList *ptIds, vtkPoints *pts) VTK_OVERRIDE;
100 static double DistanceToPolygon(double x[3], int numPts, double *pts,
101 double bounds[6], double closest[3]);
102 static int IntersectPolygonWithPolygon(int npts, double *pts, double bounds[6],
103 int npts2, double *pts2,
104 double bounds2[3], double tol,
105 double x[3]);
106 static int IntersectConvex2DCells(vtkCell *cell1, vtkCell *cell2,
107 double tol, double p0[3], double p1[3]);
109
110 // Not implemented
111 void Derivatives(int subId, double pcoords[3], double *values,
112 int dim, double *derivs) VTK_OVERRIDE;
113
115
121 vtkGetMacro(UseMVCInterpolation, bool);
122 vtkSetMacro(UseMVCInterpolation, bool);
124
125protected:
127 ~vtkQuadraticPolygon() VTK_OVERRIDE;
128
129 // variables used by instances of this class
130 vtkPolygon *Polygon;
132
133 // Parameter indicating whether to use Mean Value Coordinate algorithm
134 // for interpolation. The parameter is true by default.
135 bool UseMVCInterpolation;
136
138
142 static void GetPermutationFromPolygon(vtkIdType nb, vtkIdList *permutation);
143 static void PermuteToPolygon(vtkIdType nbPoints, double *inPoints, double *outPoints);
144 static void PermuteToPolygon(vtkCell *inCell, vtkCell *outCell);
145 static void PermuteToPolygon(vtkPoints *inPoints, vtkPoints *outPoints);
146 static void PermuteToPolygon(vtkIdTypeArray *inIds, vtkIdTypeArray *outIds);
147 static void PermuteToPolygon(vtkDataArray *inDataArray, vtkDataArray *outDataArray);
148 void InitializePolygon();
150
152
156 static void GetPermutationToPolygon(vtkIdType nb, vtkIdList *permutation);
157 static void PermuteFromPolygon(vtkIdType nb, double *values);
158 static void ConvertFromPolygon(vtkIdList *ids);
160
161private:
162 vtkQuadraticPolygon(const vtkQuadraticPolygon&) VTK_DELETE_FUNCTION;
163 void operator=(const vtkQuadraticPolygon&) VTK_DELETE_FUNCTION;
164};
165
166#endif
object to represent cell connectivity
Definition: vtkCellArray.h:51
represent and manipulate cell attribute data
Definition: vtkCellData.h:39
abstract class to specify cell behavior
Definition: vtkCell.h:60
vtkIdType GetNumberOfPoints()
Return the number of points in the cell.
Definition: vtkCell.h:132
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:55
list of point or cell ids
Definition: vtkIdList.h:37
dynamic, self-adjusting array of vtkIdType
Abstract class in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:40
abstract superclass for non-linear cells
represent and manipulate point attribute data
Definition: vtkPointData.h:38
represent and manipulate 3D points
Definition: vtkPoints.h:40
a cell that represents an n-sided polygon
Definition: vtkPolygon.h:46
cell represents a parabolic, isoparametric edge
a cell that represents a parabolic n-sided polygon
static vtkQuadraticPolygon * New()
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 GetCellDimension() override
Return the topological dimensional of the cell (0,1,2, or 3).
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.
int Triangulate(int index, vtkIdList *ptIds, vtkPoints *pts) override
Generate simplices of proper dimension.
int Triangulate(vtkIdList *outTris)
vtkCell * GetFace(int) override
Return the face cell from the faceId of the cell.
int GetNumberOfEdges() override
Return the number of edges in the cell.
void EvaluateLocation(int &subId, double pcoords[3], double x[3], double *weights) override
Determine global coordinate (x[3]) from subId and parametric coordinates.
~vtkQuadraticPolygon() override
vtkCell * GetEdge(int) override
Return the edge cell from the edgeId of the cell.
int GetNumberOfFaces() override
Return the number of faces in the cell.
int CellBoundary(int subId, double pcoords[3], vtkIdList *pts) override
These methods are based on the vtkPolygon ones : the vtkQuadraticPolygon (with n edges and 2*n points...
void Derivatives(int subId, double pcoords[3], double *values, int dim, double *derivs) override
Compute derivatives given cell subId and parametric coordinates.
static void ComputeCentroid(vtkIdTypeArray *ids, vtkPoints *pts, double centroid[3])
int EvaluatePosition(double x[3], double *closestPoint, 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...
static int PointInPolygon(double x[3], int numPts, double *pts, double bounds[6], double n[3])
int NonDegenerateTriangulate(vtkIdList *outTris)
void InterpolateFunctions(double x[3], double *weights) override
int ParameterizePolygon(double p0[3], double p10[3], double &l10, double p20[3], double &l20, double n[3])
int IntersectWithLine(double p1[3], double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId) override
Intersect with a ray.
int IsPrimaryCell() override
Return whether this cell type has a fixed topology or whether the topology varies depending on the da...
static int IntersectPolygonWithPolygon(int npts, double *pts, double bounds[6], int npts2, double *pts2, double bounds2[3], double tol, double x[3])
static double DistanceToPolygon(double x[3], int numPts, double *pts, double bounds[6], double closest[3])
int GetCellType() override
Implement the vtkCell API.
static int IntersectConvex2DCells(vtkCell *cell1, vtkCell *cell2, double tol, double p0[3], double p1[3])
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
@ value
Definition: vtkX3D.h:220
@ index
Definition: vtkX3D.h:246
@ VTK_QUADRATIC_POLYGON
Definition: vtkCellType.h:67
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
int vtkIdType
Definition: vtkType.h:287