Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

vtkSimpleCellTessellator.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkSimpleCellTessellator.h,v $
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00047 #ifndef __vtkSimpleCellTessellator_h
00048 #define __vtkSimpleCellTessellator_h
00049 
00050 #include "vtkGenericCellTessellator.h"
00051 
00052 class vtkTriangleTile;
00053 class vtkTetraTile;
00054 class vtkCellArray;
00055 class vtkDoubleArray;
00056 class vtkGenericEdgeTable;
00057 class vtkGenericSubdivisionErrorMetric;
00058 class vtkGenericAttributeCollection;
00059 class vtkGenericAdaptorCell;
00060 class vtkGenericCellIterator;
00061 class vtkPointData;
00062 class vtkOrderedTriangulator;
00063 class vtkPolygon;
00064 class vtkIdList;
00065 
00066 //-----------------------------------------------------------------------------
00067 //
00068 // The tessellation object
00069 class VTK_FILTERING_EXPORT vtkSimpleCellTessellator : public vtkGenericCellTessellator
00070 {
00071 public:
00072   static vtkSimpleCellTessellator *New();
00073   vtkTypeRevisionMacro(vtkSimpleCellTessellator,vtkGenericCellTessellator);
00074   void PrintSelf(ostream& os, vtkIndent indent);
00075 
00077 
00078   vtkGetObjectMacro(GenericCell, vtkGenericAdaptorCell);
00080 
00082 
00089   void TessellateFace(vtkGenericAdaptorCell *cell,
00090                       vtkGenericAttributeCollection *att,
00091                       vtkIdType index,
00092                       vtkDoubleArray *points,
00093                       vtkCellArray *cellArray,
00094                       vtkPointData *internalPd);
00096 
00098 
00104   void Tessellate(vtkGenericAdaptorCell *cell,
00105                   vtkGenericAttributeCollection *att,
00106                   vtkDoubleArray *points, 
00107                   vtkCellArray *cellArray,
00108                   vtkPointData *internalPd );
00110 
00112 
00118   void Triangulate(vtkGenericAdaptorCell *cell,
00119                    vtkGenericAttributeCollection *att,
00120                    vtkDoubleArray *points,
00121                    vtkCellArray *cellArray,
00122                    vtkPointData *internalPd);
00124   
00126   void Reset();
00127 
00128  
00130   void Initialize(vtkGenericDataSet *ds);
00131   
00141   int GetFixedSubdivisions();
00142   
00149   int GetMaxSubdivisionLevel();
00150   
00153   int GetMaxAdaptiveSubdivisions();
00154   
00159   void SetFixedSubdivisions(int level);
00160   
00165   void SetMaxSubdivisionLevel(int level);
00166   
00168 
00174   void SetSubdivisionLevels(int fixed,
00175                             int maxLevel);
00177   
00178   
00179 protected:
00180   vtkSimpleCellTessellator();
00181   ~vtkSimpleCellTessellator();
00182   
00185   void CopyPoint(vtkIdType pointId);
00186   
00188   vtkGenericEdgeTable *EdgeTable;
00189   
00190   void InsertEdgesIntoEdgeTable( vtkTriangleTile &tri );
00191   void RemoveEdgesFromEdgeTable( vtkTriangleTile &tri );
00192   void InsertPointsIntoEdgeTable( vtkTriangleTile &tri );
00193 
00194   void InsertEdgesIntoEdgeTable( vtkTetraTile &tetra );
00195   void RemoveEdgesFromEdgeTable( vtkTetraTile &tetra );
00196 
00198 
00208   void InitTetraTile(vtkTetraTile &root,
00209                      vtkIdType *localIds,
00210                      vtkIdType *ids,
00211                      int *edgeIds,
00212                      int *faceIds);
00214   
00216 
00225   void TriangulateTriangle(vtkGenericAdaptorCell *cell,
00226                            vtkIdType *localIds,
00227                            vtkIdType *ids,
00228                            int *edgeIds,
00229                            vtkGenericAttributeCollection *att,
00230                            vtkDoubleArray *points,
00231                            vtkCellArray *cellArray,
00232                            vtkPointData *internalPd);
00234   
00236   vtkGenericAdaptorCell *GenericCell;
00237 
00240   void AllocateScalars(int size);
00241   
00246   // Scalar buffer that stores the global coordinates, parametric coordinates,
00247   // attributes at left, mid and right point. The format is:
00248   // lxlylz lrlslt [lalb lcldle...] mxmymz mrmsmt [mamb mcmdme...] 
00249   // rxryrz rrrsrt [rarb rcrdre...]
00250   // The ScalarsCapacity>=(6+attributeCollection->GetNumberOfComponents())*3
00251   
00252   double *Scalars;
00253   int ScalarsCapacity;
00254   
00257   int PointOffset;
00258   
00260   vtkGenericCellIterator    *CellIterator;
00261 
00263   vtkGenericAttributeCollection *AttributeCollection;
00264 
00266 
00267   vtkDoubleArray     *TessellatePoints;  //Allow to use GetPointer
00268   vtkCellArray       *TessellateCellArray;
00269   vtkPointData *TessellatePointData;
00271 
00272   int FindEdgeReferenceCount(double p1[3], double p2[3], 
00273                              vtkIdType &e1, vtkIdType &e2);
00274 
00275   int GetNumberOfCellsUsingFace( int faceId );
00276   int GetNumberOfCellsUsingEdge( int edgeId );
00277   
00283   int IsEdgeOnFace(double p1[3], double p2[3]);
00284   
00290   int FindEdgeParent2D(double p1[3], double p2[3], int &localId);
00291   
00298   int FindEdgeParent(double p1[3], double p2[3], int &localId);
00299   
00302   void AllocatePointIds(int size);
00303   
00305 
00308   int FacesAreEqual(int *originalFace,
00309                     int face[3]);
00311   
00313   vtkGenericDataSet *DataSet;
00314   
00316   vtkIdType NumberOfPoints;
00317   
00318   int FixedSubdivisions;
00319   int MaxSubdivisionLevel;
00320   int CurrentSubdivisionLevel;
00321   
00323 
00325   int *EdgeIds;
00326   // Description:
00327   // For each face (4) of the sub-tetra, there is the id of the original face
00328   // or -1 if the face is not an original face
00329   int *FaceIds;
00331   
00332   // The following variables are for complex cells.
00333   
00334   // Used to create tetra from more complex cells, because the tessellator
00335   // is supposed to deal with simplices only.
00336   vtkOrderedTriangulator *Triangulator;
00337   
00338   // Used to store the sub-tetra during the tessellation of complex
00339   // cells.
00340   vtkCellArray *Connectivity;
00341   
00342   // Used to create triangles from a face of a complex cell.
00343   vtkPolygon *Polygon;
00344   
00345   // Used to store the sub-triangles during the tessellation of complex cells.
00346   vtkIdList *TriangleIds;
00347   
00348   vtkIdType *PointIds;
00349   int PointIdsCapacity;
00350   
00351 private:
00352   vtkSimpleCellTessellator(const vtkSimpleCellTessellator&);  // Not implemented.
00353   void operator=(const vtkSimpleCellTessellator&);  // Not implemented.
00354   
00355   //BTX
00356   friend class vtkTetraTile;
00357   friend class vtkTriangleTile;
00358   //ETX
00359 };
00360 
00361 #endif

Generated on Mon Jan 21 23:07:21 2008 for VTK by  doxygen 1.4.3-20050530