VTK  9.1.0
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=========================================================================*/
65#ifndef vtkQuadricDecimation_h
66#define vtkQuadricDecimation_h
67
68#include "vtkFiltersCoreModule.h" // For export macro
70
71class vtkEdgeTable;
72class vtkIdList;
73class vtkPointData;
75class vtkDoubleArray;
76
77class VTKFILTERSCORE_EXPORT vtkQuadricDecimation : public vtkPolyDataAlgorithm
78{
79public:
81 void PrintSelf(ostream& os, vtkIndent indent) override;
83
85
90 vtkSetClampMacro(TargetReduction, double, 0.0, 1.0);
91 vtkGetMacro(TargetReduction, double);
93
95
100 vtkSetMacro(AttributeErrorMetric, vtkTypeBool);
101 vtkGetMacro(AttributeErrorMetric, vtkTypeBool);
102 vtkBooleanMacro(AttributeErrorMetric, vtkTypeBool);
104
106
113 vtkSetMacro(VolumePreservation, vtkTypeBool);
114 vtkGetMacro(VolumePreservation, vtkTypeBool);
115 vtkBooleanMacro(VolumePreservation, vtkTypeBool);
117
119
125 vtkSetMacro(ScalarsAttribute, vtkTypeBool);
126 vtkGetMacro(ScalarsAttribute, vtkTypeBool);
127 vtkBooleanMacro(ScalarsAttribute, vtkTypeBool);
128 vtkSetMacro(VectorsAttribute, vtkTypeBool);
129 vtkGetMacro(VectorsAttribute, vtkTypeBool);
130 vtkBooleanMacro(VectorsAttribute, vtkTypeBool);
131 vtkSetMacro(NormalsAttribute, vtkTypeBool);
132 vtkGetMacro(NormalsAttribute, vtkTypeBool);
133 vtkBooleanMacro(NormalsAttribute, vtkTypeBool);
134 vtkSetMacro(TCoordsAttribute, vtkTypeBool);
135 vtkGetMacro(TCoordsAttribute, vtkTypeBool);
136 vtkBooleanMacro(TCoordsAttribute, vtkTypeBool);
137 vtkSetMacro(TensorsAttribute, vtkTypeBool);
138 vtkGetMacro(TensorsAttribute, vtkTypeBool);
139 vtkBooleanMacro(TensorsAttribute, vtkTypeBool);
141
143
148 vtkSetMacro(ScalarsWeight, double);
149 vtkSetMacro(VectorsWeight, double);
150 vtkSetMacro(NormalsWeight, double);
151 vtkSetMacro(TCoordsWeight, double);
152 vtkSetMacro(TensorsWeight, double);
153 vtkGetMacro(ScalarsWeight, double);
154 vtkGetMacro(VectorsWeight, double);
155 vtkGetMacro(NormalsWeight, double);
156 vtkGetMacro(TCoordsWeight, double);
157 vtkGetMacro(TensorsWeight, double);
159
161
165 vtkGetMacro(ActualReduction, double);
167
168protected:
171
173
179
184
189
194
199 void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId);
200
202
206 double ComputeCost(vtkIdType edgeId, double* x);
207 double ComputeCost2(vtkIdType edgeId, double* x);
209
216
221
222 int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double* x);
224 const double t0[3], const double t1[3], const double t2[3], const double* x);
227
229
232 void SetPointAttributeArray(vtkIdType ptId, const double* x);
233 void GetPointAttributeArray(vtkIdType ptId, double* x);
235
241
246
252
258
267
269 {
270 double* Quadric;
271 };
272
273 // One ErrorQuadric per point
275
276 // Contains 4 doubles per point. Length = nPoints * 4
278 int AttributeComponents[6];
279 double AttributeScale[6];
280
281 // Temporary variables for performance
283 double* TempX;
284 double* TempQuad;
285 double* TempB;
286 double** TempA;
287 double* TempData;
288
289private:
291 void operator=(const vtkQuadricDecimation&) = delete;
292};
293
294#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:40
a simple class to control print indentation
Definition: vtkIndent.h:43
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate point attribute data
Definition: vtkPointData.h:42
Superclass for algorithms that produce only polydata as output.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:95
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.
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