00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00060 #ifndef __vtkQuadricDecimation_h
00061 #define __vtkQuadricDecimation_h
00062
00063 #include "vtkPolyDataToPolyDataFilter.h"
00064 #include "vtkEdgeTable.h"
00065 #include "vtkPriorityQueue.h"
00066 #include "vtkIdList.h"
00067
00068 typedef struct {
00069 float *Quadric;
00070 } VTK_ERROR_QUADRIC;
00071
00072 class VTK_EXPORT vtkQuadricDecimation : public vtkPolyDataToPolyDataFilter
00073 {
00074 public:
00075 vtkTypeMacro(vtkQuadricDecimation, vtkPolyDataToPolyDataFilter);
00076 void PrintSelf(ostream& os, vtkIndent indent);
00077
00078 static vtkQuadricDecimation *New();
00079
00081 vtkSetMacro(MaximumCost, float);
00082 vtkGetMacro(MaximumCost, float);
00083
00085 vtkSetMacro(MaximumCollapsedEdges, int);
00086 vtkGetMacro(MaximumCollapsedEdges, int);
00087
00089 vtkPolyData *GetTestOutput() {return this->GetOutput(1);}
00090
00091 protected:
00092 vtkQuadricDecimation();
00093 ~vtkQuadricDecimation();
00094 vtkQuadricDecimation(const vtkQuadricDecimation&) {};
00095 void operator=(const vtkQuadricDecimation&) {};
00096
00097 void Execute();
00098
00100 void ComputeQuadric(int pointId);
00101
00104 void AddQuadric(int oldPtId, int newPtId);
00105
00108 float ComputeCost(int edgeId, float x[3], vtkPointData *pd);
00109
00113 void FindAffectedEdges(int p1Id, int p2Id, vtkIdList *edges);
00114
00116 int GetEdgeCellId(int p1Id, int p2Id);
00117
00120 void GetAttributeComponents();
00121
00122 float MaximumCost;
00123 int MaximumCollapsedEdges;
00124 int NumberOfCollapsedEdges;
00125 vtkEdgeTable *Edges;
00126 vtkIdList *EndPoint1List;
00127 vtkIdList *EndPoint2List;
00128 vtkPriorityQueue *EdgeCosts;
00129 VTK_ERROR_QUADRIC *ErrorQuadrics;
00130 int AttributeComponents[6];
00131 int NumberOfComponents;
00132 vtkPolyData *Mesh;
00133 };
00134
00135 #endif