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 =========================================================================*/
75 #ifndef vtkQuadricDecimation_h
76 #define vtkQuadricDecimation_h
77 
78 #include "vtkFiltersCoreModule.h" // For export macro
79 #include "vtkPolyDataAlgorithm.h"
80 
81 class vtkEdgeTable;
82 class vtkIdList;
83 class vtkPointData;
84 class vtkPriorityQueue;
85 class vtkDoubleArray;
86 
87 class VTKFILTERSCORE_EXPORT vtkQuadricDecimation : public vtkPolyDataAlgorithm
88 {
89 public:
91  void PrintSelf(ostream& os, vtkIndent indent) override;
93 
95 
100  vtkSetClampMacro(TargetReduction, double, 0.0, 1.0);
101  vtkGetMacro(TargetReduction, double);
103 
105 
110  vtkSetMacro(AttributeErrorMetric, vtkTypeBool);
111  vtkGetMacro(AttributeErrorMetric, vtkTypeBool);
112  vtkBooleanMacro(AttributeErrorMetric, vtkTypeBool);
114 
116 
123  vtkSetMacro(VolumePreservation, vtkTypeBool);
124  vtkGetMacro(VolumePreservation, vtkTypeBool);
125  vtkBooleanMacro(VolumePreservation, vtkTypeBool);
127 
129 
135  vtkSetMacro(ScalarsAttribute, vtkTypeBool);
136  vtkGetMacro(ScalarsAttribute, vtkTypeBool);
137  vtkBooleanMacro(ScalarsAttribute, vtkTypeBool);
138  vtkSetMacro(VectorsAttribute, vtkTypeBool);
139  vtkGetMacro(VectorsAttribute, vtkTypeBool);
140  vtkBooleanMacro(VectorsAttribute, vtkTypeBool);
141  vtkSetMacro(NormalsAttribute, vtkTypeBool);
142  vtkGetMacro(NormalsAttribute, vtkTypeBool);
143  vtkBooleanMacro(NormalsAttribute, vtkTypeBool);
144  vtkSetMacro(TCoordsAttribute, vtkTypeBool);
145  vtkGetMacro(TCoordsAttribute, vtkTypeBool);
146  vtkBooleanMacro(TCoordsAttribute, vtkTypeBool);
147  vtkSetMacro(TensorsAttribute, vtkTypeBool);
148  vtkGetMacro(TensorsAttribute, vtkTypeBool);
149  vtkBooleanMacro(TensorsAttribute, vtkTypeBool);
151 
153 
158  vtkSetMacro(ScalarsWeight, double);
159  vtkSetMacro(VectorsWeight, double);
160  vtkSetMacro(NormalsWeight, double);
161  vtkSetMacro(TCoordsWeight, double);
162  vtkSetMacro(TensorsWeight, double);
163  vtkGetMacro(ScalarsWeight, double);
164  vtkGetMacro(VectorsWeight, double);
165  vtkGetMacro(NormalsWeight, double);
166  vtkGetMacro(TCoordsWeight, double);
167  vtkGetMacro(TensorsWeight, double);
169 
171 
175  vtkGetMacro(ActualReduction, double);
177 
178 protected:
181 
183 
188  int CollapseEdge(vtkIdType pt0Id, vtkIdType pt1Id);
189 
194 
199 
203  void ComputeQuadric(vtkIdType pointId);
204 
209  void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId);
210 
212 
216  double ComputeCost(vtkIdType edgeId, double* x);
217  double ComputeCost2(vtkIdType edgeId, double* x);
219 
226 
231 
232  int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double* x);
234  const double t0[3], const double t1[3], const double t2[3], const double* x);
236  void UpdateEdgeData(vtkIdType pt0Id, vtkIdType pt1Id);
237 
239 
242  void SetPointAttributeArray(vtkIdType ptId, const double* x);
243  void GetPointAttributeArray(vtkIdType ptId, double* x);
245 
251 
256 
262 
268 
277 
279  {
280  double* Quadric;
281  };
282 
283  // One ErrorQuadric per point
285 
286  // Contains 4 doubles per point. Length = nPoints * 4
288  int AttributeComponents[6];
289  double AttributeScale[6];
290 
291  // Temporary variables for performance
293  double* TempX;
294  double* TempQuad;
295  double* TempB;
296  double** TempA;
297  double* TempData;
298 
299 private:
301  void operator=(const vtkQuadricDecimation&) = delete;
302 };
303 
304 #endif
vtkQuadricDecimation::NormalsAttribute
vtkTypeBool NormalsAttribute
Definition: vtkQuadricDecimation.h:259
vtkQuadricDecimation::~vtkQuadricDecimation
~vtkQuadricDecimation() override
vtkQuadricDecimation::FindAffectedEdges
void FindAffectedEdges(vtkIdType p1Id, vtkIdType p2Id, vtkIdList *edges)
Find all edges that will have an endpoint change ids because of an edge collapse.
vtkQuadricDecimation::VolumeConstraints
double * VolumeConstraints
Definition: vtkQuadricDecimation.h:287
vtkPointData
represent and manipulate point attribute data
Definition: vtkPointData.h:142
vtkIdType
int vtkIdType
Definition: vtkType.h:332
vtkQuadricDecimation::Mesh
vtkPolyData * Mesh
Definition: vtkQuadricDecimation.h:276
vtkQuadricDecimation::TempA
double ** TempA
Definition: vtkQuadricDecimation.h:296
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:145
vtkQuadricDecimation::SetPointAttributeArray
void SetPointAttributeArray(vtkIdType ptId, const double *x)
Helper function to set and get the point and it's attributes as an array.
vtkQuadricDecimation::TempData
double * TempData
Definition: vtkQuadricDecimation.h:297
vtkQuadricDecimation::New
static vtkQuadricDecimation * New()
vtkPriorityQueue
a list of ids arranged in priority order
Definition: vtkPriorityQueue.h:47
vtkQuadricDecimation::ComputeQuadric
void ComputeQuadric(vtkIdType pointId)
Compute quadric for this vertex.
vtkQuadricDecimation::ComputeCost
double ComputeCost(vtkIdType edgeId, double *x)
Compute cost for contracting this edge and the point that gives us this cost.
vtkQuadricDecimation::CollapseEdge
int CollapseEdge(vtkIdType pt0Id, vtkIdType pt1Id)
Do the dirty work of eliminating the edge; return the number of triangles deleted.
vtkQuadricDecimation::RequestData
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
vtkQuadricDecimation::EdgeCosts
vtkPriorityQueue * EdgeCosts
Definition: vtkQuadricDecimation.h:273
vtkQuadricDecimation::Edges
vtkEdgeTable * Edges
Definition: vtkQuadricDecimation.h:270
vtkQuadricDecimation::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkEdgeTable
keep track of edges (edge is pair of integer id's)
Definition: vtkEdgeTable.h:41
vtkQuadricDecimation::VectorsAttribute
vtkTypeBool VectorsAttribute
Definition: vtkQuadricDecimation.h:258
vtkQuadricDecimation::ErrorQuadric
Definition: vtkQuadricDecimation.h:279
vtkQuadricDecimation::CollapseCellIds
vtkIdList * CollapseCellIds
Definition: vtkQuadricDecimation.h:292
vtkQuadricDecimation::AddBoundaryConstraints
void AddBoundaryConstraints(void)
Free boundary edges are weighted.
vtkPolyDataAlgorithm.h
vtkQuadricDecimation::VectorsWeight
double VectorsWeight
Definition: vtkQuadricDecimation.h:264
vtkQuadricDecimation::GetAttributeComponents
void GetAttributeComponents()
Find out how many components there are for each attribute for this poly data.
vtkQuadricDecimation::NumberOfComponents
int NumberOfComponents
Definition: vtkQuadricDecimation.h:275
vtkQuadricDecimation::NumberOfEdgeCollapses
int NumberOfEdgeCollapses
Definition: vtkQuadricDecimation.h:269
vtkQuadricDecimation::TCoordsAttribute
vtkTypeBool TCoordsAttribute
Definition: vtkQuadricDecimation.h:260
vtkQuadricDecimation::IsGoodPlacement
int IsGoodPlacement(vtkIdType pt0Id, vtkIdType pt1Id, const double *x)
vtkQuadricDecimation::InitializeQuadrics
void InitializeQuadrics(vtkIdType numPts)
Compute quadric for all vertices.
vtkQuadricDecimation::TempB
double * TempB
Definition: vtkQuadricDecimation.h:295
vtkQuadricDecimation::GetPointAttributeArray
void GetPointAttributeArray(vtkIdType ptId, double *x)
Helper function to set and get the point and it's attributes as an array.
vtkQuadricDecimation::ActualReduction
double ActualReduction
Definition: vtkQuadricDecimation.h:253
vtkQuadricDecimation::TempX
double * TempX
Definition: vtkQuadricDecimation.h:293
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
vtkQuadricDecimation::GetEdgeCellId
vtkIdType GetEdgeCellId(vtkIdType p1Id, vtkIdType p2Id)
Find a cell that uses this edge.
vtkQuadricDecimation::TrianglePlaneCheck
int TrianglePlaneCheck(const double t0[3], const double t1[3], const double t2[3], const double *x)
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:140
vtkQuadricDecimation::AddQuadric
void AddQuadric(vtkIdType oldPtId, vtkIdType newPtId)
Add the quadrics for these 2 points since the edge between them has been collapsed.
vtkQuadricDecimation::ErrorQuadric::Quadric
double * Quadric
Definition: vtkQuadricDecimation.h:280
vtkQuadricDecimation::ComputeNumberOfComponents
void ComputeNumberOfComponents(void)
vtkQuadricDecimation::TensorsAttribute
vtkTypeBool TensorsAttribute
Definition: vtkQuadricDecimation.h:261
vtkQuadricDecimation::TargetReduction
double TargetReduction
Definition: vtkQuadricDecimation.h:252
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:183
vtkQuadricDecimation::NormalsWeight
double NormalsWeight
Definition: vtkQuadricDecimation.h:265
vtkQuadricDecimation::ScalarsWeight
double ScalarsWeight
Definition: vtkQuadricDecimation.h:263
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
vtkQuadricDecimation::TempQuad
double * TempQuad
Definition: vtkQuadricDecimation.h:294
vtkQuadricDecimation::ErrorQuadrics
ErrorQuadric * ErrorQuadrics
Definition: vtkQuadricDecimation.h:284
vtkQuadricDecimation::TargetPoints
vtkDoubleArray * TargetPoints
Definition: vtkQuadricDecimation.h:274
vtkQuadricDecimation::EndPoint2List
vtkIdList * EndPoint2List
Definition: vtkQuadricDecimation.h:272
edges
std::pair< boost::graph_traits< vtkGraph * >::edge_iterator, boost::graph_traits< vtkGraph * >::edge_iterator > edges(vtkGraph *g)
Definition: vtkBoostGraphAdapter.h:1027
vtkDoubleArray
dynamic, self-adjusting array of double
Definition: vtkDoubleArray.h:145
vtkQuadricDecimation::AttributeErrorMetric
vtkTypeBool AttributeErrorMetric
Definition: vtkQuadricDecimation.h:254
vtkQuadricDecimation
reduce the number of triangles in a mesh
Definition: vtkQuadricDecimation.h:88
vtkQuadricDecimation::EndPoint1List
vtkIdList * EndPoint1List
Definition: vtkQuadricDecimation.h:271
vtkQuadricDecimation::ComputeCost2
double ComputeCost2(vtkIdType edgeId, double *x)
Compute cost for contracting this edge and the point that gives us this cost.
vtkQuadricDecimation::VolumePreservation
vtkTypeBool VolumePreservation
Definition: vtkQuadricDecimation.h:255
vtkQuadricDecimation::TensorsWeight
double TensorsWeight
Definition: vtkQuadricDecimation.h:267
vtkQuadricDecimation::UpdateEdgeData
void UpdateEdgeData(vtkIdType pt0Id, vtkIdType pt1Id)
vtkQuadricDecimation::vtkQuadricDecimation
vtkQuadricDecimation()
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkQuadricDecimation::ScalarsAttribute
vtkTypeBool ScalarsAttribute
Definition: vtkQuadricDecimation.h:257
vtkQuadricDecimation::TCoordsWeight
double TCoordsWeight
Definition: vtkQuadricDecimation.h:266
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:151