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=========================================================================*/
55
56#ifndef vtkQuadricDecimation_h
57#define vtkQuadricDecimation_h
58
59#include "vtkFiltersCoreModule.h" // For export macro
61
62class vtkEdgeTable;
63class vtkIdList;
64class vtkPointData;
66class vtkDoubleArray;
67
68class VTKFILTERSCORE_EXPORT vtkQuadricDecimation : public vtkPolyDataAlgorithm
69{
70public:
72 void PrintSelf(ostream& os, vtkIndent indent) override;
74
76
81 vtkSetClampMacro(TargetReduction, double, 0.0, 1.0);
82 vtkGetMacro(TargetReduction, double);
84
86
95
97
108
110
118 vtkBooleanMacro(ScalarsAttribute, vtkTypeBool);
121 vtkBooleanMacro(VectorsAttribute, vtkTypeBool);
124 vtkBooleanMacro(NormalsAttribute, vtkTypeBool);
127 vtkBooleanMacro(TCoordsAttribute, vtkTypeBool);
130 vtkBooleanMacro(TensorsAttribute, vtkTypeBool);
132
134
139 vtkSetMacro(ScalarsWeight, double);
140 vtkSetMacro(VectorsWeight, double);
141 vtkSetMacro(NormalsWeight, double);
142 vtkSetMacro(TCoordsWeight, double);
143 vtkSetMacro(TensorsWeight, double);
144 vtkGetMacro(ScalarsWeight, double);
145 vtkGetMacro(VectorsWeight, double);
146 vtkGetMacro(NormalsWeight, double);
147 vtkGetMacro(TCoordsWeight, double);
148 vtkGetMacro(TensorsWeight, double);
150
152
156 vtkGetMacro(ActualReduction, double);
158
159protected:
162
164
170
175
180
185
190 void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId);
191
193
197 double ComputeCost(vtkIdType edgeId, double* x);
198 double ComputeCost2(vtkIdType edgeId, double* x);
200
207
212
213 int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double* x);
215 const double t0[3], const double t1[3], const double t2[3], const double* x);
218
220
223 void SetPointAttributeArray(vtkIdType ptId, const double* x);
224 void GetPointAttributeArray(vtkIdType ptId, double* x);
226
232
237
243
249
258
260 {
261 double* Quadric;
262 };
263
264 // One ErrorQuadric per point
266
267 // Contains 4 doubles per point. Length = nPoints * 4
270 double AttributeScale[6];
271
272 // Temporary variables for performance
274 double* TempX;
275 double* TempQuad;
276 double* TempB;
277 double** TempA;
278 double* TempData;
279
280private:
282 void operator=(const vtkQuadricDecimation&) = delete;
283};
284
285#endif
dynamic, self-adjusting array of double
keep track of edges (edge is pair of integer id's)
list of point or cell ids
Definition vtkIdList.h:31
a simple class to control print indentation
Definition vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate point attribute data
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:85
a list of ids arranged in priority order
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.
static vtkQuadricDecimation * New()
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.
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