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

Graphics/vtkPolyDataNormals.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkPolyDataNormals.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00060 #ifndef __vtkPolyDataNormals_h
00061 #define __vtkPolyDataNormals_h
00062 
00063 #include "vtkPolyDataToPolyDataFilter.h"
00064 
00065 class vtkFloatArray;
00066 class vtkIdList;
00067 class vtkPolyData;
00068 
00069 class VTK_GRAPHICS_EXPORT vtkPolyDataNormals : public vtkPolyDataToPolyDataFilter
00070 {
00071 public:
00072   vtkTypeRevisionMacro(vtkPolyDataNormals,vtkPolyDataToPolyDataFilter);
00073   void PrintSelf(ostream& os, vtkIndent indent);
00074 
00078   static vtkPolyDataNormals *New();
00079 
00081 
00084   vtkSetClampMacro(FeatureAngle,float,0.0,180.0);
00085   vtkGetMacro(FeatureAngle,float);
00087 
00089 
00090   vtkSetMacro(Splitting,int);
00091   vtkGetMacro(Splitting,int);
00092   vtkBooleanMacro(Splitting,int);
00094 
00096 
00097   vtkSetMacro(Consistency,int);
00098   vtkGetMacro(Consistency,int);
00099   vtkBooleanMacro(Consistency,int);
00101 
00103 
00104   vtkSetMacro(ComputePointNormals,int);
00105   vtkGetMacro(ComputePointNormals,int);
00106   vtkBooleanMacro(ComputePointNormals,int);
00108 
00110 
00111   vtkSetMacro(ComputeCellNormals,int);
00112   vtkGetMacro(ComputeCellNormals,int);
00113   vtkBooleanMacro(ComputeCellNormals,int);
00115 
00117 
00121   vtkSetMacro(FlipNormals,int);
00122   vtkGetMacro(FlipNormals,int);
00123   vtkBooleanMacro(FlipNormals,int);
00125 
00127 
00130   vtkSetMacro(NonManifoldTraversal,int);
00131   vtkGetMacro(NonManifoldTraversal,int);
00132   vtkBooleanMacro(NonManifoldTraversal,int);
00134   
00135 protected:
00136   vtkPolyDataNormals();
00137   ~vtkPolyDataNormals() {};
00138 
00139   // Usual data generation method
00140   void Execute();
00141 
00142   float FeatureAngle;
00143   int Splitting;
00144   int Consistency;
00145   int FlipNormals;
00146   int NonManifoldTraversal;
00147   int ComputePointNormals;
00148   int ComputeCellNormals;
00149   int NumFlips;
00150 
00151 private:
00152   vtkIdList *Wave;
00153   vtkIdList *Wave2;
00154   vtkIdList *CellIds;
00155   vtkIdList *Map;
00156   vtkPolyData *OldMesh;
00157   vtkPolyData *NewMesh;
00158   int *Visited;
00159   vtkFloatArray *PolyNormals;
00160   float CosAngle;
00161 
00162   // Uses the list of cell ids (this->Wave) to propagate a wave of
00163   // checked and properly ordered polygons.
00164   void TraverseAndOrder(void);
00165 
00166   // Check the point id give to see whether it lies on a feature
00167   // edge. If so, split the point (i.e., duplicate it) to topologically
00168   // separate the mesh.
00169   void MarkAndSplit(vtkIdType ptId);
00170 
00171 private:
00172   vtkPolyDataNormals(const vtkPolyDataNormals&);  // Not implemented.
00173   void operator=(const vtkPolyDataNormals&);  // Not implemented.
00174 };
00175 
00176 #endif