00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00041 #ifndef __vtkPolyDataNormals_h
00042 #define __vtkPolyDataNormals_h
00043
00044 #include "vtkPolyDataAlgorithm.h"
00045
00046 class vtkFloatArray;
00047 class vtkIdList;
00048 class vtkPolyData;
00049
00050 class VTK_GRAPHICS_EXPORT vtkPolyDataNormals : public vtkPolyDataAlgorithm
00051 {
00052 public:
00053 vtkTypeRevisionMacro(vtkPolyDataNormals,vtkPolyDataAlgorithm);
00054 void PrintSelf(ostream& os, vtkIndent indent);
00055
00059 static vtkPolyDataNormals *New();
00060
00062
00065 vtkSetClampMacro(FeatureAngle,double,0.0,180.0);
00066 vtkGetMacro(FeatureAngle,double);
00068
00070
00071 vtkSetMacro(Splitting,int);
00072 vtkGetMacro(Splitting,int);
00073 vtkBooleanMacro(Splitting,int);
00075
00077
00078 vtkSetMacro(Consistency,int);
00079 vtkGetMacro(Consistency,int);
00080 vtkBooleanMacro(Consistency,int);
00082
00084
00092 vtkSetMacro(AutoOrientNormals, int);
00093 vtkGetMacro(AutoOrientNormals, int);
00094 vtkBooleanMacro(AutoOrientNormals, int);
00096
00098
00099 vtkSetMacro(ComputePointNormals,int);
00100 vtkGetMacro(ComputePointNormals,int);
00101 vtkBooleanMacro(ComputePointNormals,int);
00103
00105
00106 vtkSetMacro(ComputeCellNormals,int);
00107 vtkGetMacro(ComputeCellNormals,int);
00108 vtkBooleanMacro(ComputeCellNormals,int);
00110
00112
00116 vtkSetMacro(FlipNormals,int);
00117 vtkGetMacro(FlipNormals,int);
00118 vtkBooleanMacro(FlipNormals,int);
00120
00122
00125 vtkSetMacro(NonManifoldTraversal,int);
00126 vtkGetMacro(NonManifoldTraversal,int);
00127 vtkBooleanMacro(NonManifoldTraversal,int);
00129
00130 protected:
00131 vtkPolyDataNormals();
00132 ~vtkPolyDataNormals() {};
00133
00134
00135 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00136
00137 double FeatureAngle;
00138 int Splitting;
00139 int Consistency;
00140 int FlipNormals;
00141 int AutoOrientNormals;
00142 int NonManifoldTraversal;
00143 int ComputePointNormals;
00144 int ComputeCellNormals;
00145 int NumFlips;
00146
00147 private:
00148 vtkIdList *Wave;
00149 vtkIdList *Wave2;
00150 vtkIdList *CellIds;
00151 vtkIdList *Map;
00152 vtkPolyData *OldMesh;
00153 vtkPolyData *NewMesh;
00154 int *Visited;
00155 vtkFloatArray *PolyNormals;
00156 double CosAngle;
00157
00158
00159
00160 void TraverseAndOrder(void);
00161
00162
00163
00164
00165 void MarkAndSplit(vtkIdType ptId);
00166
00167 private:
00168 vtkPolyDataNormals(const vtkPolyDataNormals&);
00169 void operator=(const vtkPolyDataNormals&);
00170 };
00171
00172 #endif