00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00093 #ifndef __vtkDelaunay3D_h
00094 #define __vtkDelaunay3D_h
00095
00096 #include "vtkUnstructuredGridAlgorithm.h"
00097
00098 class vtkIdList;
00099 class vtkPointLocator;
00100 class vtkPointSet;
00101 class vtkPoints;
00102 class vtkTetraArray;
00103 class vtkIncrementalPointLocator;
00104
00105 class VTK_GRAPHICS_EXPORT vtkDelaunay3D : public vtkUnstructuredGridAlgorithm
00106 {
00107 public:
00108 vtkTypeRevisionMacro(vtkDelaunay3D,vtkUnstructuredGridAlgorithm);
00109 void PrintSelf(ostream& os, vtkIndent indent);
00110
00113 static vtkDelaunay3D *New();
00114
00116
00120 vtkSetClampMacro(Alpha,double,0.0,VTK_DOUBLE_MAX);
00121 vtkGetMacro(Alpha,double);
00123
00125
00128 vtkSetClampMacro(Tolerance,double,0.0,1.0);
00129 vtkGetMacro(Tolerance,double);
00131
00133
00135 vtkSetClampMacro(Offset,double,2.5,VTK_DOUBLE_MAX);
00136 vtkGetMacro(Offset,double);
00138
00140
00144 vtkSetMacro(BoundingTriangulation,int);
00145 vtkGetMacro(BoundingTriangulation,int);
00146 vtkBooleanMacro(BoundingTriangulation,int);
00148
00150
00152 void SetLocator(vtkIncrementalPointLocator *locator);
00153 vtkGetObjectMacro(Locator,vtkIncrementalPointLocator);
00155
00158 void CreateDefaultLocator();
00159
00161
00171 vtkUnstructuredGrid *InitPointInsertion(double center[3], double length,
00172 vtkIdType numPts, vtkPoints* &pts);
00174
00176
00185 void InsertPoint(vtkUnstructuredGrid *Mesh, vtkPoints *points,
00186 vtkIdType id, double x[3], vtkIdList *holeTetras);
00188
00193 void EndPointInsertion();
00194
00196 unsigned long GetMTime();
00197
00198 protected:
00199 vtkDelaunay3D();
00200 ~vtkDelaunay3D();
00201
00202 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00203
00204 double Alpha;
00205 double Tolerance;
00206 int BoundingTriangulation;
00207 double Offset;
00208
00209 vtkIncrementalPointLocator *Locator;
00210
00211 vtkTetraArray *TetraArray;
00212 int FindTetra(vtkUnstructuredGrid *Mesh, double x[3], vtkIdType tetId,
00213 int depth);
00214 int InSphere(double x[3], vtkIdType tetraId);
00215 void InsertTetra(vtkUnstructuredGrid *Mesh, vtkPoints *pts,
00216 vtkIdType tetraId);
00217
00218 int NumberOfDuplicatePoints;
00219 int NumberOfDegeneracies;
00220
00221
00222 int *References;
00223
00224 vtkIdType FindEnclosingFaces(double x[3], vtkUnstructuredGrid *Mesh,
00225 vtkIdList *tetras, vtkIdList *faces,
00226 vtkIncrementalPointLocator *Locator);
00227
00228 virtual int FillInputPortInformation(int, vtkInformation*);
00229 private:
00230 vtkIdList *Tetras;
00231 vtkIdList *Faces;
00232 vtkIdList *BoundaryPts;
00233 vtkIdList *CheckedTetras;
00234 vtkIdList *NeiTetras;
00235
00236 private:
00237 vtkDelaunay3D(const vtkDelaunay3D&);
00238 void operator=(const vtkDelaunay3D&);
00239 };
00240
00241 #endif
00242
00243