VTK
vtkDelaunay2D.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDelaunay2D.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
125 #ifndef vtkDelaunay2D_h
126 #define vtkDelaunay2D_h
127 
128 #include "vtkFiltersCoreModule.h" // For export macro
129 #include "vtkPolyDataAlgorithm.h"
130 
132 class vtkCellArray;
133 class vtkIdList;
134 class vtkPointSet;
135 
136 #define VTK_DELAUNAY_XY_PLANE 0
137 #define VTK_SET_TRANSFORM_PLANE 1
138 #define VTK_BEST_FITTING_PLANE 2
139 
140 class VTKFILTERSCORE_EXPORT vtkDelaunay2D : public vtkPolyDataAlgorithm
141 {
142 public:
144  void PrintSelf(ostream& os, vtkIndent indent) override;
145 
150  static vtkDelaunay2D *New();
151 
161  void SetSourceData(vtkPolyData *);
162 
171  void SetSourceConnection(vtkAlgorithmOutput *algOutput);
172 
176  vtkPolyData *GetSource();
177 
179 
185  vtkSetClampMacro(Alpha,double,0.0,VTK_DOUBLE_MAX);
186  vtkGetMacro(Alpha,double);
188 
190 
195  vtkSetClampMacro(Tolerance,double,0.0,1.0);
196  vtkGetMacro(Tolerance,double);
198 
200 
204  vtkSetClampMacro(Offset,double,0.75,VTK_DOUBLE_MAX);
205  vtkGetMacro(Offset,double);
207 
209 
215  vtkSetMacro(BoundingTriangulation,vtkTypeBool);
216  vtkGetMacro(BoundingTriangulation,vtkTypeBool);
217  vtkBooleanMacro(BoundingTriangulation,vtkTypeBool);
219 
221 
231  virtual void SetTransform(vtkAbstractTransform*);
232  vtkGetObjectMacro(Transform, vtkAbstractTransform);
234 
236 
244  vtkSetClampMacro(ProjectionPlaneMode,int,
246  vtkGetMacro(ProjectionPlaneMode,int);
248 
255  static vtkAbstractTransform* ComputeBestFittingPlane(vtkPointSet *input);
256 
257 protected:
258  vtkDelaunay2D();
259  ~vtkDelaunay2D() override;
260 
262 
263  double Alpha;
264  double Tolerance;
266  double Offset;
267 
269 
270  int ProjectionPlaneMode; //selects the plane in 3D where the Delaunay triangulation will be computed.
271 
272 private:
273  vtkPolyData *Mesh; //the created mesh
274  double *Points; //the raw points in double precision
275  void SetPoint(vtkIdType id, double *x)
276  {vtkIdType idx=3*id;
277  this->Points[idx] = x[0];
278  this->Points[idx+1] = x[1];
279  this->Points[idx+2] = x[2];
280  }
281 
282  void GetPoint(vtkIdType id, double x[3])
283  {double *ptr = this->Points + 3*id;
284  x[0] = *ptr++;
285  x[1] = *ptr++;
286  x[2] = *ptr;
287  }
288 
289  int NumberOfDuplicatePoints;
290  int NumberOfDegeneracies;
291 
292  int *RecoverBoundary(vtkPolyData *source);
293  int RecoverEdge(vtkPolyData* source, vtkIdType p1, vtkIdType p2);
294  void FillPolygons(vtkCellArray *polys, int *triUse);
295 
296  int InCircle (double x[3], double x1[3], double x2[3], double x3[3]);
297  vtkIdType FindTriangle(double x[3], vtkIdType ptIds[3], vtkIdType tri,
298  double tol, vtkIdType nei[3], vtkIdList *neighbors);
299  void CheckEdge(vtkIdType ptId, double x[3], vtkIdType p1, vtkIdType p2,
300  vtkIdType tri, bool recursive);
301 
302  int FillInputPortInformation(int, vtkInformation*) override;
303 
304 private:
305  vtkDelaunay2D(const vtkDelaunay2D&) = delete;
306  void operator=(const vtkDelaunay2D&) = delete;
307 };
308 
309 #endif
#define VTK_DOUBLE_MAX
Definition: vtkType.h:169
Store vtkAlgorithm input/output information.
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
This is called by the superclass.
abstract class for specifying dataset behavior
Definition: vtkPointSet.h:39
int vtkIdType
Definition: vtkType.h:347
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
void GetPoint(const int i, const int j, const int k, double pnt[3])
Proxy object to connect input/output ports.
static vtkPolyDataAlgorithm * New()
int vtkTypeBool
Definition: vtkABI.h:69
Superclass for algorithms that produce only polydata as output.
a simple class to control print indentation
Definition: vtkIndent.h:33
list of point or cell ids
Definition: vtkIdList.h:30
superclass for all geometric transformations
vtkAbstractTransform * Transform
#define VTK_BEST_FITTING_PLANE
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
object to represent cell connectivity
Definition: vtkCellArray.h:44
create 2D Delaunay triangulation of input points
vtkTypeBool BoundingTriangulation
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
Store zero or more vtkInformation instances.
#define VTK_DELAUNAY_XY_PLANE
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
Transform
Definition: ADIOSDefs.h:40