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

Graphics/vtkDataSetSurfaceFilter.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkDataSetSurfaceFilter.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 =========================================================================*/
00030 #ifndef __vtkDataSetSurfaceFilter_h
00031 #define __vtkDataSetSurfaceFilter_h
00032 
00033 #include "vtkDataSetToPolyDataFilter.h"
00034 
00035 
00036 class vtkPointData;
00037 class vtkPoints;
00038 //BTX
00039 // Helper structure for hashing faces.
00040 struct vtkFastGeomQuadStruct
00041 {
00042   vtkIdType p0;
00043   vtkIdType p1;
00044   vtkIdType p2;
00045   vtkIdType p3;
00046   vtkIdType SourceId;
00047   struct vtkFastGeomQuadStruct *Next;
00048 };
00049 typedef struct vtkFastGeomQuadStruct vtkFastGeomQuad;
00050 //ETX
00051 
00052 class VTK_GRAPHICS_EXPORT vtkDataSetSurfaceFilter : public vtkDataSetToPolyDataFilter
00053 {
00054 public:
00055   static vtkDataSetSurfaceFilter *New();
00056   vtkTypeRevisionMacro(vtkDataSetSurfaceFilter,vtkDataSetToPolyDataFilter);
00057   void PrintSelf(ostream& os, vtkIndent indent);
00058 
00060 
00063   vtkSetMacro(UseStrips, int);
00064   vtkGetMacro(UseStrips, int);
00065   vtkBooleanMacro(UseStrips, int);
00067 
00068 protected:
00069   vtkDataSetSurfaceFilter();
00070   ~vtkDataSetSurfaceFilter();
00071 
00072   int UseStrips;
00073   
00074   void ComputeInputUpdateExtents(vtkDataObject *output);
00075 
00076   void Execute();
00077   void StructuredExecute(vtkDataSet *input, int *ext);
00078   void UnstructuredGridExecute();
00079   void DataSetExecute();
00080   void ExecuteInformation();
00081 
00082   // Helper methods.
00083   void ExecuteFaceStrips(vtkDataSet *input, int maxFlag, int *ext,
00084                          int aAxis, int bAxis, int cAxis);
00085   void ExecuteFaceQuads(vtkDataSet *input, int maxFlag, int *ext,
00086                         int aAxis, int bAxis, int cAxis);
00087 
00088   void InitializeQuadHash(vtkIdType numPoints);
00089   void DeleteQuadHash();
00090   void InsertQuadInHash(vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType d,
00091                         vtkIdType sourceId);
00092   void InsertTriInHash(vtkIdType a, vtkIdType b, vtkIdType c,
00093                        vtkIdType sourceId);
00094   void InitQuadHashTraversal();
00095   vtkFastGeomQuad *GetNextVisibleQuadFromHash();
00096 
00097   vtkFastGeomQuad **QuadHash;
00098   vtkIdType QuadHashLength;
00099   vtkFastGeomQuad *QuadHashTraversal;
00100   vtkIdType QuadHashTraversalIndex;
00101 
00102   vtkIdType *PointMap;
00103   vtkIdType GetOutputPointId(vtkIdType inPtId, vtkDataSet *input, 
00104                              vtkPoints *outPts, vtkPointData *outPD);
00105   
00106   vtkIdType NumberOfNewCells;
00107   
00108   // Better memory allocation for faces (hash)
00109   void InitFastGeomQuadAllocation(int numberOfCells);
00110   vtkFastGeomQuad* NewFastGeomQuad();
00111   void DeleteAllFastGeomQuads();
00112   // -----
00113   int FastGeomQuadArrayLength;
00114   int NumberOfFastGeomQuadArrays;
00115   vtkFastGeomQuad** FastGeomQuadArrays;
00116   // These indexes allow us to find the next available face.
00117   int NextArrayIndex;
00118   int NextQuadIndex;
00119 
00120 private:
00121   vtkDataSetSurfaceFilter(const vtkDataSetSurfaceFilter&);  // Not implemented.
00122   void operator=(const vtkDataSetSurfaceFilter&);  // Not implemented.
00123 };
00124 
00125 #endif
00126 
00127