Graphics/vtkPolyDataNormals.h
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00044 #ifndef __vtkPolyDataNormals_h
00045 #define __vtkPolyDataNormals_h
00046 
00047 #include "vtkPolyDataToPolyDataFilter.h"
00048 
00049 class vtkFloatArray;
00050 class vtkIdList;
00051 class vtkPolyData;
00052 
00053 class VTK_GRAPHICS_EXPORT vtkPolyDataNormals : public vtkPolyDataToPolyDataFilter
00054 {
00055 public:
00056   vtkTypeRevisionMacro(vtkPolyDataNormals,vtkPolyDataToPolyDataFilter);
00057   void PrintSelf(ostream& os, vtkIndent indent);
00058 
00062   static vtkPolyDataNormals *New();
00063 
00065 
00068   vtkSetClampMacro(FeatureAngle,double,0.0,180.0);
00069   vtkGetMacro(FeatureAngle,double);
00071 
00073 
00074   vtkSetMacro(Splitting,int);
00075   vtkGetMacro(Splitting,int);
00076   vtkBooleanMacro(Splitting,int);
00078 
00080 
00081   vtkSetMacro(Consistency,int);
00082   vtkGetMacro(Consistency,int);
00083   vtkBooleanMacro(Consistency,int);
00085 
00087 
00095   vtkSetMacro(AutoOrientNormals, int);
00096   vtkGetMacro(AutoOrientNormals, int);
00097   vtkBooleanMacro(AutoOrientNormals, int);
00099 
00101 
00102   vtkSetMacro(ComputePointNormals,int);
00103   vtkGetMacro(ComputePointNormals,int);
00104   vtkBooleanMacro(ComputePointNormals,int);
00106 
00108 
00109   vtkSetMacro(ComputeCellNormals,int);
00110   vtkGetMacro(ComputeCellNormals,int);
00111   vtkBooleanMacro(ComputeCellNormals,int);
00113 
00115 
00119   vtkSetMacro(FlipNormals,int);
00120   vtkGetMacro(FlipNormals,int);
00121   vtkBooleanMacro(FlipNormals,int);
00123 
00125 
00128   vtkSetMacro(NonManifoldTraversal,int);
00129   vtkGetMacro(NonManifoldTraversal,int);
00130   vtkBooleanMacro(NonManifoldTraversal,int);
00132   
00133 protected:
00134   vtkPolyDataNormals();
00135   ~vtkPolyDataNormals() {};
00136 
00137   
00138   void Execute();
00139 
00140   double FeatureAngle;
00141   int Splitting;
00142   int Consistency;
00143   int FlipNormals;
00144   int AutoOrientNormals;
00145   int NonManifoldTraversal;
00146   int ComputePointNormals;
00147   int ComputeCellNormals;
00148   int NumFlips;
00149 
00150 private:
00151   vtkIdList *Wave;
00152   vtkIdList *Wave2;
00153   vtkIdList *CellIds;
00154   vtkIdList *Map;
00155   vtkPolyData *OldMesh;
00156   vtkPolyData *NewMesh;
00157   int *Visited;
00158   vtkFloatArray *PolyNormals;
00159   double CosAngle;
00160 
00161   
00162   
00163   void TraverseAndOrder(void);
00164 
00165   
00166   
00167   
00168   void MarkAndSplit(vtkIdType ptId);
00169 
00170 private:
00171   vtkPolyDataNormals(const vtkPolyDataNormals&);  
00172   void operator=(const vtkPolyDataNormals&);  
00173 };
00174 
00175 #endif