VTK  9.2.6
vtkQuadricDecimation.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkQuadricDecimation.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
78 #ifndef vtkQuadricDecimation_h
79 #define vtkQuadricDecimation_h
80 
81 #include "vtkFiltersCoreModule.h" // For export macro
82 #include "vtkPolyDataAlgorithm.h"
83 
84 class vtkEdgeTable;
85 class vtkIdList;
86 class vtkPointData;
87 class vtkPriorityQueue;
88 class vtkDoubleArray;
89 
90 class VTKFILTERSCORE_EXPORT vtkQuadricDecimation : public vtkPolyDataAlgorithm
91 {
92 public:
94  void PrintSelf(ostream& os, vtkIndent indent) override;
96 
98 
103  vtkSetClampMacro(TargetReduction, double, 0.0, 1.0);
104  vtkGetMacro(TargetReduction, double);
106 
108 
113  vtkSetMacro(AttributeErrorMetric, vtkTypeBool);
114  vtkGetMacro(AttributeErrorMetric, vtkTypeBool);
115  vtkBooleanMacro(AttributeErrorMetric, vtkTypeBool);
117 
119 
126  vtkSetMacro(VolumePreservation, vtkTypeBool);
127  vtkGetMacro(VolumePreservation, vtkTypeBool);
128  vtkBooleanMacro(VolumePreservation, vtkTypeBool);
130 
132 
138  vtkSetMacro(ScalarsAttribute, vtkTypeBool);
139  vtkGetMacro(ScalarsAttribute, vtkTypeBool);
140  vtkBooleanMacro(ScalarsAttribute, vtkTypeBool);
141  vtkSetMacro(VectorsAttribute, vtkTypeBool);
142  vtkGetMacro(VectorsAttribute, vtkTypeBool);
143  vtkBooleanMacro(VectorsAttribute, vtkTypeBool);
144  vtkSetMacro(NormalsAttribute, vtkTypeBool);
145  vtkGetMacro(NormalsAttribute, vtkTypeBool);
146  vtkBooleanMacro(NormalsAttribute, vtkTypeBool);
147  vtkSetMacro(TCoordsAttribute, vtkTypeBool);
148  vtkGetMacro(TCoordsAttribute, vtkTypeBool);
149  vtkBooleanMacro(TCoordsAttribute, vtkTypeBool);
150  vtkSetMacro(TensorsAttribute, vtkTypeBool);
151  vtkGetMacro(TensorsAttribute, vtkTypeBool);
152  vtkBooleanMacro(TensorsAttribute, vtkTypeBool);
154 
156 
161  vtkSetMacro(ScalarsWeight, double);
162  vtkSetMacro(VectorsWeight, double);
163  vtkSetMacro(NormalsWeight, double);
164  vtkSetMacro(TCoordsWeight, double);
165  vtkSetMacro(TensorsWeight, double);
166  vtkGetMacro(ScalarsWeight, double);
167  vtkGetMacro(VectorsWeight, double);
168  vtkGetMacro(NormalsWeight, double);
169  vtkGetMacro(TCoordsWeight, double);
170  vtkGetMacro(TensorsWeight, double);
172 
174 
178  vtkGetMacro(ActualReduction, double);
180 
181 protected:
184 
186 
191  int CollapseEdge(vtkIdType pt0Id, vtkIdType pt1Id);
192 
197 
202 
206  void ComputeQuadric(vtkIdType pointId);
207 
212  void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId);
213 
215 
219  double ComputeCost(vtkIdType edgeId, double* x);
220  double ComputeCost2(vtkIdType edgeId, double* x);
222 
229 
234 
235  int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double* x);
237  const double t0[3], const double t1[3], const double t2[3], const double* x);
239  void UpdateEdgeData(vtkIdType pt0Id, vtkIdType pt1Id);
240 
242 
245  void SetPointAttributeArray(vtkIdType ptId, const double* x);
246  void GetPointAttributeArray(vtkIdType ptId, double* x);
248 
254 
259 
265 
271 
280 
282  {
283  double* Quadric;
284  };
285 
286  // One ErrorQuadric per point
288 
289  // Contains 4 doubles per point. Length = nPoints * 4
291  int AttributeComponents[6];
292  double AttributeScale[6];
293 
294  // Temporary variables for performance
296  double* TempX;
297  double* TempQuad;
298  double* TempB;
299  double** TempA;
300  double* TempData;
301 
302 private:
304  void operator=(const vtkQuadricDecimation&) = delete;
305 };
306 
307 #endif
dynamic, self-adjusting array of double
keep track of edges (edge is pair of integer id's)
Definition: vtkEdgeTable.h:41
list of point or cell ids
Definition: vtkIdList.h:143
a simple class to control print indentation
Definition: vtkIndent.h:119
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate point attribute data
Definition: vtkPointData.h:151
Superclass for algorithms that produce only polydata as output.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:200
a list of ids arranged in priority order
reduce the number of triangles in a mesh
void SetPointAttributeArray(vtkIdType ptId, const double *x)
Helper function to set and get the point and it's attributes as an array.
void AddBoundaryConstraints(void)
Free boundary edges are weighted.
vtkDoubleArray * TargetPoints
void FindAffectedEdges(vtkIdType p1Id, vtkIdType p2Id, vtkIdList *edges)
Find all edges that will have an endpoint change ids because of an edge collapse.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void ComputeQuadric(vtkIdType pointId)
Compute quadric for this vertex.
void GetAttributeComponents()
Find out how many components there are for each attribute for this poly data.
double ComputeCost2(vtkIdType edgeId, double *x)
Compute cost for contracting this edge and the point that gives us this cost.
void GetPointAttributeArray(vtkIdType ptId, double *x)
Helper function to set and get the point and it's attributes as an array.
vtkIdType GetEdgeCellId(vtkIdType p1Id, vtkIdType p2Id)
Find a cell that uses this edge.
double ComputeCost(vtkIdType edgeId, double *x)
Compute cost for contracting this edge and the point that gives us this cost.
int CollapseEdge(vtkIdType pt0Id, vtkIdType pt1Id)
Do the dirty work of eliminating the edge; return the number of triangles deleted.
vtkPriorityQueue * EdgeCosts
~vtkQuadricDecimation() override
int TrianglePlaneCheck(const double t0[3], const double t1[3], const double t2[3], const double *x)
void ComputeNumberOfComponents(void)
void InitializeQuadrics(vtkIdType numPts)
Compute quadric for all vertices.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId)
Add the quadrics for these 2 points since the edge between them has been collapsed.
static vtkQuadricDecimation * New()
int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double *x)
void UpdateEdgeData(vtkIdType pt0Id, vtkIdType pt1Id)
int vtkTypeBool
Definition: vtkABI.h:69
std::pair< boost::graph_traits< vtkGraph * >::edge_iterator, boost::graph_traits< vtkGraph * >::edge_iterator > edges(vtkGraph *g)
int vtkIdType
Definition: vtkType.h:332