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
00131 #ifndef __vtkDelaunay2D_h
00132 #define __vtkDelaunay2D_h
00133
00134 #include "vtkPointSet.h"
00135 #include "vtkPolyDataSource.h"
00136
00137 class VTK_EXPORT vtkDelaunay2D : public vtkPolyDataSource
00138 {
00139 public:
00140 vtkTypeMacro(vtkDelaunay2D,vtkPolyDataSource);
00141 void PrintSelf(ostream& os, vtkIndent indent);
00142
00145 static vtkDelaunay2D *New();
00146
00150 void SetSource(vtkPolyData *);
00151 vtkPolyData *GetSource();
00152
00157 vtkSetClampMacro(Alpha,double,0.0,VTK_LARGE_FLOAT);
00158 vtkGetMacro(Alpha,double);
00159
00163 vtkSetClampMacro(Tolerance,double,0.0,1.0);
00164 vtkGetMacro(Tolerance,double);
00165
00168 vtkSetClampMacro(Offset,double,0.75,VTK_LARGE_FLOAT);
00169 vtkGetMacro(Offset,double);
00170
00175 vtkSetMacro(BoundingTriangulation,int);
00176 vtkGetMacro(BoundingTriangulation,int);
00177 vtkBooleanMacro(BoundingTriangulation,int);
00178
00180 virtual void SetInput(vtkPointSet *input);
00181 vtkPointSet *GetInput();
00182
00183 protected:
00184 vtkDelaunay2D();
00185 ~vtkDelaunay2D();
00186 vtkDelaunay2D(const vtkDelaunay2D&) {};
00187 void operator=(const vtkDelaunay2D&) {};
00188
00189 void Execute();
00190
00191 double Alpha;
00192 double Tolerance;
00193 int BoundingTriangulation;
00194 double Offset;
00195
00196 private:
00197 vtkPolyData *Mesh;
00198 double *Points;
00199 void SetPoint(int id, double *x)
00200 {int idx=3*id;
00201 this->Points[idx] = x[0];
00202 this->Points[idx+1] = x[1];
00203 this->Points[idx+2] = x[2];
00204 }
00205
00206 void GetPoint(int id, double x[3])
00207 {double *ptr = this->Points + 3*id;
00208 x[0] = *ptr++;
00209 x[1] = *ptr++;
00210 x[2] = *ptr;
00211 }
00212
00213 int NumberOfDuplicatePoints;
00214 int NumberOfDegeneracies;
00215
00216 int *RecoverBoundary();
00217 int RecoverEdge(int p1, int p2);
00218 void FillPolygons(vtkCellArray *polys, int *triUse);
00219
00220 int InCircle (double x[3], double x1[3], double x2[3], double x3[3]);
00221 int FindTriangle(double x[3], int ptIds[3], int tri, double tol,
00222 int nei[3], vtkIdList *neighbors);
00223 void CheckEdge(int ptId, double x[3], int p1, int p2, int tri);
00224
00225 };
00226
00227 #endif
00228
00229