00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00054 #ifndef __vtkPolygon_h
00055 #define __vtkPolygon_h
00056 
00057 #include "vtkCell.h"
00058 #include "vtkPoints.h"
00059 #include "vtkLine.h"
00060 #include "vtkTriangle.h"
00061 #include "vtkQuad.h"
00062 
00063 class VTK_EXPORT vtkPolygon : public vtkCell
00064 {
00065 public:
00066   static vtkPolygon *New();
00067   vtkTypeMacro(vtkPolygon,vtkCell);
00068 
00070   vtkCell *MakeObject();
00071   int GetCellType() {return VTK_POLYGON;};
00072   int GetCellDimension() {return 2;};
00073   int GetNumberOfEdges() {return this->GetNumberOfPoints();};
00074   int GetNumberOfFaces() {return 0;};
00075   vtkCell *GetEdge(int edgeId);
00076   vtkCell *GetFace(int) {return 0;};
00077   int CellBoundary(int subId, float pcoords[3], vtkIdList *pts);
00078   void Contour(float value, vtkScalars *cellScalars, 
00079                vtkPointLocator *locator,vtkCellArray *verts, 
00080                vtkCellArray *lines, vtkCellArray *polys,
00081                vtkPointData *inPd, vtkPointData *outPd,
00082                vtkCellData *inCd, int cellId, vtkCellData *outCd);
00083   void Clip(float value, vtkScalars *cellScalars, 
00084             vtkPointLocator *locator, vtkCellArray *tris,
00085             vtkPointData *inPd, vtkPointData *outPd,
00086             vtkCellData *inCd, int cellId, vtkCellData *outCd, int insideOut);
00087   int EvaluatePosition(float x[3], float* closestPoint,
00088                        int& subId, float pcoords[3],
00089                        float& dist2, float *weights);
00090   void EvaluateLocation(int& subId, float pcoords[3], float x[3],
00091                         float *weights);
00092   int IntersectWithLine(float p1[3], float p2[3], float tol, float& t,
00093                         float x[3], float pcoords[3], int& subId);
00094   int Triangulate(int index, vtkIdList *ptIds, vtkPoints *pts);
00095   void Derivatives(int subId, float pcoords[3], float *values, 
00096                    int dim, float *derivs);
00097 
00099   static void ComputeNormal(vtkPoints *p, int numPts, int *pts, float n[3]);
00100   static void ComputeNormal(vtkPoints *p, float n[3]);
00101   
00105   static void ComputeNormal(int numPts, float *pts, float n[3]);
00106 
00108   void ComputeWeights(float x[3], float *weights);
00109 
00110 
00116   int ParameterizePolygon(float p0[3], float p10[3], float &l10, 
00117                           float p20[3], float &l20, float n[3]);
00118   
00123   static int PointInPolygon(float x[3], int numPts, float *pts, 
00124              float bounds[6], float n[3]);  
00125 
00130   int Triangulate(vtkIdList *outTris);
00131   
00138   static int IntersectPolygonWithPolygon(int npts, float *pts, float bounds[6],
00139                                          int npts2, float *pts2, 
00140                                          float bounds2[3], float tol,
00141                                          float x[3]);
00142 
00143 #ifndef VTK_REMOVE_LEGACY_CODE
00144 
00145   int CellBoundary(int subId, float pcoords[3], vtkIdList &pts)
00146     {VTK_LEGACY_METHOD(CellBoundary,"3.2"); return this->CellBoundary(subId, pcoords, &pts);}
00147   int Triangulate(int index, vtkIdList &ptIds, vtkPoints &pts)
00148     {VTK_LEGACY_METHOD(Triangulate,"3.2"); return this->Triangulate(index, &ptIds, &pts);}
00149   int Triangulate(vtkIdList &outTris)
00150     {VTK_LEGACY_METHOD(Triangulate,"3.2"); return this->Triangulate(&outTris);}
00151 #endif
00152   
00153 protected:
00154   vtkPolygon();
00155   ~vtkPolygon();
00156   vtkPolygon(const vtkPolygon&) {};
00157   void operator=(const vtkPolygon&) {};
00158 
00159   
00160   float   Tolerance; 
00161   int     SuccessfulTriangulation; 
00162   float   Normal[3]; 
00163   vtkIdList *Tris;
00164   vtkTriangle *Triangle;
00165   vtkQuad *Quad;
00166   vtkScalars *TriScalars;
00167   vtkLine *Line;
00168 
00169   
00174   int EarCutTriangulation();
00175 
00176 };
00177 
00178 #endif
00179