Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

graphics/vtkDelaunay2D.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkDelaunay2D.h,v $
00005   Language:  C++
00006 
00007 
00008 Copyright (c) 1993-2001 Ken Martin, Will Schroeder, Bill Lorensen 
00009 All rights reserved.
00010 
00011 Redistribution and use in source and binary forms, with or without
00012 modification, are permitted provided that the following conditions are met:
00013 
00014  * Redistributions of source code must retain the above copyright notice,
00015    this list of conditions and the following disclaimer.
00016 
00017  * Redistributions in binary form must reproduce the above copyright notice,
00018    this list of conditions and the following disclaimer in the documentation
00019    and/or other materials provided with the distribution.
00020 
00021  * Neither name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names
00022    of any contributors may be used to endorse or promote products derived
00023    from this software without specific prior written permission.
00024 
00025  * Modified source versions must be plainly marked as such, and must not be
00026    misrepresented as being the original software.
00027 
00028 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00029 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00030 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00031 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
00032 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00033 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00034 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00035 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00036 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00037 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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; //the created mesh
00198   double *Points;    //the raw points in double precision
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 

Generated on Wed Nov 21 12:26:58 2001 for VTK by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001