00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00043 #ifndef __vtkBiQuadraticQuadraticWedge_h
00044 #define __vtkBiQuadraticQuadraticWedge_h
00045
00046 #include "vtkNonLinearCell.h"
00047
00048 class vtkQuadraticEdge;
00049 class vtkBiQuadraticQuad;
00050 class vtkQuadraticTriangle;
00051 class vtkWedge;
00052 class vtkDoubleArray;
00053
00054 class VTK_FILTERING_EXPORT vtkBiQuadraticQuadraticWedge : public vtkNonLinearCell
00055 {
00056 public:
00057 static vtkBiQuadraticQuadraticWedge *New ();
00058 vtkTypeMacro(vtkBiQuadraticQuadraticWedge,vtkNonLinearCell);
00059 void PrintSelf (ostream & os, vtkIndent indent);
00060
00062
00064 int GetCellType () { return VTK_BIQUADRATIC_QUADRATIC_WEDGE; }
00065 int GetCellDimension () { return 3; }
00066 int GetNumberOfEdges () { return 9; }
00067 int GetNumberOfFaces () { return 5; }
00068 vtkCell *GetEdge (int edgeId);
00069 vtkCell *GetFace (int faceId);
00071
00072 int CellBoundary (int subId, double pcoords[3], vtkIdList * pts);
00073 void Contour (double value, vtkDataArray * cellScalars,
00074 vtkIncrementalPointLocator * locator, vtkCellArray * verts,
00075 vtkCellArray * lines, vtkCellArray * polys,
00076 vtkPointData * inPd, vtkPointData * outPd, vtkCellData * inCd,
00077 vtkIdType cellId, vtkCellData * outCd);
00078 int EvaluatePosition (double x[3], double *closestPoint,
00079 int &subId, double pcoords[3], double &dist2, double *weights);
00080 void EvaluateLocation (int &subId, double pcoords[3], double x[3],
00081 double *weights);
00082 int Triangulate (int index, vtkIdList * ptIds, vtkPoints * pts);
00083 void Derivatives (int subId, double pcoords[3], double *values, int dim,
00084 double *derivs);
00085 virtual double *GetParametricCoords ();
00086
00088
00091 void Clip (double value, vtkDataArray * cellScalars,
00092 vtkIncrementalPointLocator * locator, vtkCellArray * tetras,
00093 vtkPointData * inPd, vtkPointData * outPd,
00094 vtkCellData * inCd, vtkIdType cellId, vtkCellData * outCd,
00095 int insideOut);
00097
00099
00101 int IntersectWithLine (double p1[3], double p2[3], double tol, double &t,
00102 double x[3], double pcoords[3], int &subId);
00104
00105
00107 int GetParametricCenter (double pcoords[3]);
00108
00110
00112 static void InterpolationFunctions (double pcoords[3], double weights[15]);
00113
00114
00115 static void InterpolationDerivs (double pcoords[3], double derivs[45]);
00116
00117
00118
00119 virtual void InterpolateFunctions (double pcoords[3], double weights[15])
00120 {
00121 vtkBiQuadraticQuadraticWedge::InterpolationFunctions(pcoords,weights);
00122 }
00123 virtual void InterpolateDerivs (double pcoords[3], double derivs[45])
00124 {
00125 vtkBiQuadraticQuadraticWedge::InterpolationDerivs(pcoords,derivs);
00126 }
00127
00128
00129
00130 static int *GetEdgeArray(int edgeId);
00131 static int *GetFaceArray(int faceId);
00133
00137 void JacobianInverse (double pcoords[3], double **inverse, double derivs[45]);
00138
00139 protected:
00140 vtkBiQuadraticQuadraticWedge ();
00141 ~vtkBiQuadraticQuadraticWedge ();
00142
00143 vtkQuadraticEdge *Edge;
00144 vtkQuadraticTriangle *TriangleFace;
00145 vtkBiQuadraticQuad *Face;
00146 vtkWedge *Wedge;
00147 vtkDoubleArray *Scalars;
00148
00149 private:
00150 vtkBiQuadraticQuadraticWedge (const vtkBiQuadraticQuadraticWedge &);
00151 void operator = (const vtkBiQuadraticQuadraticWedge &);
00152 };
00153
00154
00155 inline int vtkBiQuadraticQuadraticWedge::GetParametricCenter(double pcoords[3])
00156 {
00157 pcoords[0] = pcoords[1] = 1./3;
00158 pcoords[2] = 0.5;
00159 return 0;
00160 }
00161
00162
00163 #endif