00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00134
#ifndef __vtkDelaunay2D_h
00135
#define __vtkDelaunay2D_h
00136
00137
#include "vtkPolyDataSource.h"
00138
00139
class vtkAbstractTransform;
00140
class vtkCellArray;
00141
class vtkIdList;
00142
class vtkPointSet;
00143
00144 class VTK_GRAPHICS_EXPORT vtkDelaunay2D :
public vtkPolyDataSource
00145 {
00146
public:
00147 vtkTypeRevisionMacro(vtkDelaunay2D,
vtkPolyDataSource);
00148
void PrintSelf(ostream& os,
vtkIndent indent);
00149
00152
static vtkDelaunay2D *
New();
00153
00155
00160
void SetSource(
vtkPolyData *);
00161
vtkPolyData *GetSource();
00163
00165
00169 vtkSetClampMacro(Alpha,
double,0.0,VTK_LARGE_FLOAT);
00170 vtkGetMacro(Alpha,
double);
00172
00174
00177 vtkSetClampMacro(Tolerance,
double,0.0,1.0);
00178 vtkGetMacro(Tolerance,
double);
00180
00182
00184 vtkSetClampMacro(Offset,
double,0.75,VTK_LARGE_FLOAT);
00185 vtkGetMacro(Offset,
double);
00187
00189
00193 vtkSetMacro(BoundingTriangulation,
int);
00194 vtkGetMacro(BoundingTriangulation,
int);
00195 vtkBooleanMacro(BoundingTriangulation,
int);
00197
00199
00200
virtual void SetInput(
vtkPointSet *input);
00201
vtkPointSet *GetInput();
00203
00205
00213
virtual void SetTransform(
vtkAbstractTransform*);
00214 vtkGetObjectMacro(Transform,
vtkAbstractTransform);
00216
00217
protected:
00218 vtkDelaunay2D();
00219 ~vtkDelaunay2D();
00220
00221
void Execute();
00222
00223 double Alpha;
00224 double Tolerance;
00225 int BoundingTriangulation;
00226 double Offset;
00227
00228 vtkAbstractTransform *Transform;
00229
00230
private:
00231
vtkPolyData *Mesh;
00232
double *Points;
00233
void SetPoint(
vtkIdType id,
double *x)
00234 {
vtkIdType idx=3*
id;
00235 this->Points[idx] = x[0];
00236 this->Points[idx+1] = x[1];
00237 this->Points[idx+2] = x[2];
00238 }
00239
00240
void GetPoint(
vtkIdType id,
double x[3])
00241 {
double *ptr = this->Points + 3*
id;
00242 x[0] = *ptr++;
00243 x[1] = *ptr++;
00244 x[2] = *ptr;
00245 }
00246
00247
int NumberOfDuplicatePoints;
00248
int NumberOfDegeneracies;
00249
00250
int *RecoverBoundary();
00251
int RecoverEdge(
vtkIdType p1,
vtkIdType p2);
00252
void FillPolygons(
vtkCellArray *polys,
int *triUse);
00253
00254
int InCircle (
double x[3],
double x1[3],
double x2[3],
double x3[3]);
00255
vtkIdType FindTriangle(
double x[3],
vtkIdType ptIds[3],
vtkIdType tri,
00256
double tol,
vtkIdType nei[3],
vtkIdList *neighbors);
00257
void CheckEdge(
vtkIdType ptId,
double x[3],
vtkIdType p1,
vtkIdType p2,
00258
vtkIdType tri);
00259
00260
private:
00261 vtkDelaunay2D(
const vtkDelaunay2D&);
00262
void operator=(
const vtkDelaunay2D&);
00263 };
00264
00265
#endif
00266
00267