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