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

dox/Graphics/vtkQuadricDecimation.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkQuadricDecimation.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 =========================================================================*/ 00062 #ifndef __vtkQuadricDecimation_h 00063 #define __vtkQuadricDecimation_h 00064 00065 #include "vtkPolyDataToPolyDataFilter.h" 00066 00067 class vtkEdgeTable; 00068 class vtkIdList; 00069 class vtkPointData; 00070 class vtkPriorityQueue; 00071 class vtkFloatArray; 00072 00073 class VTK_GRAPHICS_EXPORT vtkQuadricDecimation : public vtkPolyDataToPolyDataFilter 00074 { 00075 public: 00076 vtkTypeRevisionMacro(vtkQuadricDecimation, vtkPolyDataToPolyDataFilter); 00077 void PrintSelf(ostream& os, vtkIndent indent); 00078 static vtkQuadricDecimation *New(); 00079 00081 00084 vtkSetClampMacro(TargetReduction, float, 0.0, 1.0); 00085 vtkGetMacro(TargetReduction, float); 00087 00089 00092 vtkSetMacro(AttributeErrorMetric, int); 00093 vtkGetMacro(AttributeErrorMetric, int); 00094 vtkBooleanMacro(AttributeErrorMetric, int); 00096 00098 00102 vtkSetMacro(ScalarsAttribute, int); 00103 vtkGetMacro(ScalarsAttribute, int); 00104 vtkBooleanMacro(ScalarsAttribute, int); 00105 vtkSetMacro(VectorsAttribute, int); 00106 vtkGetMacro(VectorsAttribute, int); 00107 vtkBooleanMacro(VectorsAttribute, int); 00108 vtkSetMacro(NormalsAttribute, int); 00109 vtkGetMacro(NormalsAttribute, int); 00110 vtkBooleanMacro(NormalsAttribute, int); 00111 vtkSetMacro(TCoordsAttribute, int); 00112 vtkGetMacro(TCoordsAttribute, int); 00113 vtkBooleanMacro(TCoordsAttribute, int); 00114 vtkSetMacro(TensorsAttribute, int); 00115 vtkGetMacro(TensorsAttribute, int); 00116 vtkBooleanMacro(TensorsAttribute, int); 00118 00120 00123 vtkSetMacro(ScalarsWeight, float); 00124 vtkSetMacro(VectorsWeight, float); 00125 vtkSetMacro(NormalsWeight, float); 00126 vtkSetMacro(TCoordsWeight, float); 00127 vtkSetMacro(TensorsWeight, float); 00128 vtkGetMacro(ScalarsWeight, float); 00129 vtkGetMacro(VectorsWeight, float); 00130 vtkGetMacro(NormalsWeight, float); 00131 vtkGetMacro(TCoordsWeight, float); 00132 vtkGetMacro(TensorsWeight, float); 00134 00136 00138 vtkGetMacro(ActualReduction, float); 00140 00141 protected: 00142 vtkQuadricDecimation(); 00143 ~vtkQuadricDecimation(); 00144 00145 void Execute(); 00146 00149 int CollapseEdge(vtkIdType pt0Id, vtkIdType pt1Id); 00150 00152 void InitializeQuadrics(vtkIdType numPts); 00153 00155 void AddBoundaryConstraints(void); 00156 00158 void ComputeQuadric(vtkIdType pointId); 00159 00162 void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId); 00163 00165 00167 double ComputeCost(vtkIdType edgeId, double *x); 00168 double ComputeCost2(vtkIdType edgeId, double *x); 00170 00174 void FindAffectedEdges(vtkIdType p1Id, vtkIdType p2Id, vtkIdList *edges); 00175 00177 vtkIdType GetEdgeCellId(vtkIdType p1Id, vtkIdType p2Id); 00178 00179 int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double *x); 00180 int TrianglePlaneCheck(const float t0[3], const float t1[3], 00181 const float t2[3], const double *x); 00182 void ComputeNumberOfComponents(void); 00183 void UpdateEdgeData(vtkIdType ptoId, vtkIdType pt1Id); 00184 00186 00188 void SetPointAttributeArray(vtkIdType ptId, const double *x); 00189 void GetPointAttributeArray(vtkIdType ptId, double *x); 00191 00194 void GetAttributeComponents(); 00195 00196 float TargetReduction; 00197 float ActualReduction; 00198 int AttributeErrorMetric; 00199 00200 int ScalarsAttribute; 00201 int VectorsAttribute; 00202 int NormalsAttribute; 00203 int TCoordsAttribute; 00204 int TensorsAttribute; 00205 00206 float ScalarsWeight; 00207 float VectorsWeight; 00208 float NormalsWeight; 00209 float TCoordsWeight; 00210 float TensorsWeight; 00211 00212 int NumberOfEdgeCollapses; 00213 vtkEdgeTable *Edges; 00214 vtkIdList *EndPoint1List; 00215 vtkIdList *EndPoint2List; 00216 vtkPriorityQueue *EdgeCosts; 00217 vtkFloatArray *TargetPoints; 00218 int NumberOfComponents; 00219 vtkPolyData *Mesh; 00220 00221 //BTX 00222 struct ErrorQuadric 00223 { 00224 double *Quadric; 00225 }; 00226 //ETX 00227 00228 ErrorQuadric *ErrorQuadrics; 00229 int AttributeComponents[6]; 00230 double AttributeScale[6]; 00231 00232 // Temporary variables for performance 00233 vtkIdList *CollapseCellIds; 00234 double *TempX; 00235 double *TempQuad; 00236 double *TempB; 00237 double **TempA; 00238 double *TempData; 00239 00240 private: 00241 vtkQuadricDecimation(const vtkQuadricDecimation&); // Not implemented. 00242 void operator=(const vtkQuadricDecimation&); // Not implemented. 00243 }; 00244 00245 #endif