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

Graphics/vtkDelaunay3D.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkDelaunay3D.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 =========================================================================*/
00122 #ifndef __vtkDelaunay3D_h
00123 #define __vtkDelaunay3D_h
00124 
00125 #include "vtkUnstructuredGridSource.h"
00126 
00127 class vtkTetraArray;
00128 
00129 class VTK_GRAPHICS_EXPORT vtkDelaunay3D : public vtkUnstructuredGridSource
00130 {
00131 public:
00132   vtkTypeMacro(vtkDelaunay3D,vtkUnstructuredGridSource);
00133   void PrintSelf(ostream& os, vtkIndent indent);
00134 
00137   static vtkDelaunay3D *New();
00138 
00140 
00144   vtkSetClampMacro(Alpha,float,0.0,VTK_LARGE_FLOAT);
00145   vtkGetMacro(Alpha,float);
00147 
00149 
00152   vtkSetClampMacro(Tolerance,float,0.0,1.0);
00153   vtkGetMacro(Tolerance,float);
00155 
00157 
00159   vtkSetClampMacro(Offset,float,2.5,VTK_LARGE_FLOAT);
00160   vtkGetMacro(Offset,float);
00162 
00164 
00168   vtkSetMacro(BoundingTriangulation,int);
00169   vtkGetMacro(BoundingTriangulation,int);
00170   vtkBooleanMacro(BoundingTriangulation,int);
00172 
00174 
00176   void SetLocator(vtkPointLocator *locator);
00177   vtkGetObjectMacro(Locator,vtkPointLocator);
00179 
00182   void CreateDefaultLocator();
00183 
00185 
00195   vtkUnstructuredGrid *InitPointInsertion(float center[3], float length, 
00196                                           vtkIdType numPts, vtkPoints* &pts);
00198 
00200 
00209   void InsertPoint(vtkUnstructuredGrid *Mesh, vtkPoints *points,
00210                    vtkIdType id, float x[3], vtkIdList *holeTetras);
00212 
00217   void EndPointInsertion();
00218 
00220   unsigned long GetMTime();
00221 
00223 
00224   virtual void SetInput(vtkPointSet *input);
00225   vtkPointSet *GetInput();
00227 
00228 protected:
00229   vtkDelaunay3D();
00230   ~vtkDelaunay3D();
00231 
00232   void Execute();
00233 
00234   float Alpha;
00235   float Tolerance;
00236   int BoundingTriangulation;
00237   float Offset;
00238 
00239   vtkPointLocator *Locator;  //help locate points faster
00240   
00241   vtkTetraArray *TetraArray; //used to keep track of circumspheres/neighbors
00242   int FindTetra(vtkUnstructuredGrid *Mesh, double x[3], vtkIdType tetId,
00243                 int depth);
00244   int InSphere(double x[3], vtkIdType tetraId);
00245   void InsertTetra(vtkUnstructuredGrid *Mesh, vtkPoints *pts,
00246                    vtkIdType tetraId);
00247 
00248   int NumberOfDuplicatePoints; //keep track of bad data
00249   int NumberOfDegeneracies;
00250 
00251   // Keep track of number of references to points to avoid new/delete calls
00252   int *References;
00253 
00254   vtkIdType FindEnclosingFaces(float x[3], vtkUnstructuredGrid *Mesh,
00255                                vtkIdList *tetras, vtkIdList *faces, 
00256                                vtkPointLocator *Locator);
00257   
00258 private: //members added for performance
00259   vtkIdList *Tetras; //used in InsertPoint
00260   vtkIdList *Faces;  //used in InsertPoint
00261   vtkIdList *BoundaryPts; //used by InsertPoint
00262   vtkIdList *CheckedTetras; //used by InsertPoint
00263   vtkIdList *NeiTetras; //used by InsertPoint
00264 
00265 private:
00266   vtkDelaunay3D(const vtkDelaunay3D&);  // Not implemented.
00267   void operator=(const vtkDelaunay3D&);  // Not implemented.
00268 };
00269 
00270 #endif
00271 
00272 

Generated on Thu Mar 28 14:19:20 2002 for VTK by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001