vtkQuadricDecimation Class Reference
#include <vtkQuadricDecimation.h>
Inheritance diagram for vtkQuadricDecimation:
[legend]Collaboration diagram for vtkQuadricDecimation:
[legend]List of all members.
Detailed Description
reduce the number of triangles in a mesh
vtkQuadricDecimation is a filter to reduce the number of triangles in a triangle mesh, forming a good approximation to the original geometry. The input to vtkQuadricDecimation is a vtkPolyData object, and only triangles are treated. If you desire to decimate polygonal meshes, first triangulate the polygons with vtkTriangleFilter.
The algorithm is based on repeated edge collapses until the requested mesh reduction is achieved. Edges are placed in a priority queue based on the "cost" to delete the edge. The cost is an approximate measure of error (distance to the original surface)--described by the so-called quadric error measure. The quadric error measure is associated with each vertex of the mesh and represents a matrix of planes incident on that vertex. The distance of the planes to the vertex is the error in the position of the vertex (originally the vertex error iz zero). As edges are deleted, the quadric error measure associated with the two end points of the edge are summed (this combines the plane equations) and an optimal collapse point can be computed. Edges connected to the collapse point are then reinserted into the queue after computing the new cost to delete them. The process continues until the desired reduction level is reached or topological constraints prevent further reduction. Note that this basic algorithm can be extended to higher dimensions by taking into account variation in attributes (i.e., scalars, vectors, and so on).
This paper is based on the work of Garland and Heckbert who first presented the quadric error measure at Siggraph '97 "Surface Simplification Using Quadric Error Metrics". For details of the algorithm Michael Garland's Ph.D. thesis is also recommended. Hughues Hoppe's Vis '99 paper, "New Quadric Metric for Simplifying Meshes with Appearance Attributes" is also a good take on the subject especially as it pertains to the error metric applied to attributes.
- Thanks:
- Thanks to Bradley Lowekamp of the National Library of Medicine/NIH for contributing this class.
- Created by:
-
- CVS contributions (if > 5%):
- Schroeder, Will (50%)
- Henderson, Amy (35%)
- CVS logs (CVSweb):
.cxx (/Graphics/vtkQuadricDecimation
.cxx)
.h (/Graphics/vtkQuadricDecimation
.h)
- Tests:
- vtkQuadricDecimation (Tests)
Definition at line 80 of file vtkQuadricDecimation.h.
|
Public Types |
typedef vtkPolyDataToPolyDataFilter | Superclass |
Public Member Functions |
virtual const char * | GetClassName () |
virtual int | IsA (const char *type) |
void | PrintSelf (ostream &os, vtkIndent indent) |
|
virtual void | SetTargetReduction (double) |
virtual double | GetTargetReduction () |
|
virtual void | SetAttributeErrorMetric (int) |
virtual int | GetAttributeErrorMetric () |
virtual void | AttributeErrorMetricOn () |
virtual void | AttributeErrorMetricOff () |
|
virtual void | SetScalarsAttribute (int) |
virtual int | GetScalarsAttribute () |
virtual void | ScalarsAttributeOn () |
virtual void | ScalarsAttributeOff () |
virtual void | SetVectorsAttribute (int) |
virtual int | GetVectorsAttribute () |
virtual void | VectorsAttributeOn () |
virtual void | VectorsAttributeOff () |
virtual void | SetNormalsAttribute (int) |
virtual int | GetNormalsAttribute () |
virtual void | NormalsAttributeOn () |
virtual void | NormalsAttributeOff () |
virtual void | SetTCoordsAttribute (int) |
virtual int | GetTCoordsAttribute () |
virtual void | TCoordsAttributeOn () |
virtual void | TCoordsAttributeOff () |
virtual void | SetTensorsAttribute (int) |
virtual int | GetTensorsAttribute () |
virtual void | TensorsAttributeOn () |
virtual void | TensorsAttributeOff () |
|
virtual void | SetScalarsWeight (double) |
virtual void | SetVectorsWeight (double) |
virtual void | SetNormalsWeight (double) |
virtual void | SetTCoordsWeight (double) |
virtual void | SetTensorsWeight (double) |
virtual double | GetScalarsWeight () |
virtual double | GetVectorsWeight () |
virtual double | GetNormalsWeight () |
virtual double | GetTCoordsWeight () |
virtual double | GetTensorsWeight () |
|
virtual double | GetActualReduction () |
Static Public Member Functions |
int | IsTypeOf (const char *type) |
vtkQuadricDecimation * | SafeDownCast (vtkObject *o) |
vtkQuadricDecimation * | New () |
Protected Member Functions |
| vtkQuadricDecimation () |
| ~vtkQuadricDecimation () |
void | Execute () |
int | CollapseEdge (vtkIdType pt0Id, vtkIdType pt1Id) |
void | InitializeQuadrics (vtkIdType numPts) |
void | AddBoundaryConstraints (void) |
void | ComputeQuadric (vtkIdType pointId) |
void | AddQuadric (vtkIdType oldPtId, vtkIdType newPtId) |
void | FindAffectedEdges (vtkIdType p1Id, vtkIdType p2Id, vtkIdList *edges) |
vtkIdType | GetEdgeCellId (vtkIdType p1Id, vtkIdType p2Id) |
int | IsGoodPlacement (vtkIdType pt0Id, vtkIdType pt1Id, const double *x) |
int | TrianglePlaneCheck (const double t0[3], const double t1[3], const double t2[3], const double *x) |
void | ComputeNumberOfComponents (void) |
void | UpdateEdgeData (vtkIdType ptoId, vtkIdType pt1Id) |
void | GetAttributeComponents () |
|
double | ComputeCost (vtkIdType edgeId, double *x) |
double | ComputeCost2 (vtkIdType edgeId, double *x) |
|
void | SetPointAttributeArray (vtkIdType ptId, const double *x) |
void | GetPointAttributeArray (vtkIdType ptId, double *x) |
Protected Attributes |
double | TargetReduction |
double | ActualReduction |
int | AttributeErrorMetric |
int | ScalarsAttribute |
int | VectorsAttribute |
int | NormalsAttribute |
int | TCoordsAttribute |
int | TensorsAttribute |
double | ScalarsWeight |
double | VectorsWeight |
double | NormalsWeight |
double | TCoordsWeight |
double | TensorsWeight |
int | NumberOfEdgeCollapses |
vtkEdgeTable * | Edges |
vtkIdList * | EndPoint1List |
vtkIdList * | EndPoint2List |
vtkPriorityQueue * | EdgeCosts |
vtkDoubleArray * | TargetPoints |
int | NumberOfComponents |
vtkPolyData * | Mesh |
ErrorQuadric * | ErrorQuadrics |
int | AttributeComponents [6] |
double | AttributeScale [6] |
vtkIdList * | CollapseCellIds |
double * | TempX |
double * | TempQuad |
double * | TempB |
double ** | TempA |
double * | TempData |
Member Typedef Documentation
Constructor & Destructor Documentation
vtkQuadricDecimation::vtkQuadricDecimation |
( |
|
) |
[protected] |
|
Member Function Documentation
virtual const char* vtkQuadricDecimation::GetClassName |
( |
|
) |
[virtual] |
|
int vtkQuadricDecimation::IsTypeOf |
( |
const char * |
type |
) |
[static] |
|
|
Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.
Reimplemented from vtkPolyDataToPolyDataFilter. |
virtual int vtkQuadricDecimation::IsA |
( |
const char * |
type |
) |
[virtual] |
|
|
Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.
Reimplemented from vtkPolyDataToPolyDataFilter. |
void vtkQuadricDecimation::PrintSelf |
( |
ostream & |
os, |
|
|
vtkIndent |
indent |
|
) |
[virtual] |
|
|
Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from vtkPolyDataToPolyDataFilter. |
|
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
Reimplemented from vtkAlgorithm. |
virtual void vtkQuadricDecimation::SetTargetReduction |
( |
double |
|
) |
[virtual] |
|
|
Set/Get the desired reduction (expressed as a fraction of the original number of triangles). The actual reduction may be less depending on triangulation and topological constraints. |
virtual double vtkQuadricDecimation::GetTargetReduction |
( |
|
) |
[virtual] |
|
|
Set/Get the desired reduction (expressed as a fraction of the original number of triangles). The actual reduction may be less depending on triangulation and topological constraints. |
virtual void vtkQuadricDecimation::SetAttributeErrorMetric |
( |
int |
|
) |
[virtual] |
|
|
Decide whether to include data attributes in the error metric. If off, then only geometric error is used to control the decimation. By default the attribute errors are off. |
virtual int vtkQuadricDecimation::GetAttributeErrorMetric |
( |
|
) |
[virtual] |
|
|
Decide whether to include data attributes in the error metric. If off, then only geometric error is used to control the decimation. By default the attribute errors are off. |
virtual void vtkQuadricDecimation::AttributeErrorMetricOn |
( |
|
) |
[virtual] |
|
|
Decide whether to include data attributes in the error metric. If off, then only geometric error is used to control the decimation. By default the attribute errors are off. |
virtual void vtkQuadricDecimation::AttributeErrorMetricOff |
( |
|
) |
[virtual] |
|
|
Decide whether to include data attributes in the error metric. If off, then only geometric error is used to control the decimation. By default the attribute errors are off. |
virtual void vtkQuadricDecimation::SetScalarsAttribute |
( |
int |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual int vtkQuadricDecimation::GetScalarsAttribute |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::ScalarsAttributeOn |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::ScalarsAttributeOff |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::SetVectorsAttribute |
( |
int |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual int vtkQuadricDecimation::GetVectorsAttribute |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::VectorsAttributeOn |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::VectorsAttributeOff |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::SetNormalsAttribute |
( |
int |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual int vtkQuadricDecimation::GetNormalsAttribute |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::NormalsAttributeOn |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::NormalsAttributeOff |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::SetTCoordsAttribute |
( |
int |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual int vtkQuadricDecimation::GetTCoordsAttribute |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::TCoordsAttributeOn |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::TCoordsAttributeOff |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::SetTensorsAttribute |
( |
int |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual int vtkQuadricDecimation::GetTensorsAttribute |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::TensorsAttributeOn |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::TensorsAttributeOff |
( |
|
) |
[virtual] |
|
|
If attribute errors are to be included in the metric (i.e., AttributeErrorMetric is on), then the following flags control which attributes are to be included in the error calculation. By default all of these are on. |
virtual void vtkQuadricDecimation::SetScalarsWeight |
( |
double |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual void vtkQuadricDecimation::SetVectorsWeight |
( |
double |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual void vtkQuadricDecimation::SetNormalsWeight |
( |
double |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual void vtkQuadricDecimation::SetTCoordsWeight |
( |
double |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual void vtkQuadricDecimation::SetTensorsWeight |
( |
double |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual double vtkQuadricDecimation::GetScalarsWeight |
( |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual double vtkQuadricDecimation::GetVectorsWeight |
( |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual double vtkQuadricDecimation::GetNormalsWeight |
( |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual double vtkQuadricDecimation::GetTCoordsWeight |
( |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual double vtkQuadricDecimation::GetTensorsWeight |
( |
|
) |
[virtual] |
|
|
Set/Get the scaling weight contribution of the attribute. These values are used to weight the contribution of the attributes towards the error metric. |
virtual double vtkQuadricDecimation::GetActualReduction |
( |
|
) |
[virtual] |
|
|
Get the actual reduction. This value is only valid after the filter has executed. |
void vtkQuadricDecimation::Execute |
( |
|
) |
[protected, virtual] |
|
|
This method is the old style execute method
Reimplemented from vtkSource. |
|
Do the dirty work of eliminating the edge; return the number of triangles deleted. |
void vtkQuadricDecimation::InitializeQuadrics |
( |
vtkIdType |
numPts |
) |
[protected] |
|
|
Compute quadric for all vertices |
void vtkQuadricDecimation::AddBoundaryConstraints |
( |
void |
|
) |
[protected] |
|
|
Free boundary edges are weighted |
void vtkQuadricDecimation::ComputeQuadric |
( |
vtkIdType |
pointId |
) |
[protected] |
|
|
Compute quadric for this vertex. |
void vtkQuadricDecimation::AddQuadric |
( |
vtkIdType |
oldPtId, |
|
|
vtkIdType |
newPtId |
|
) |
[protected] |
|
|
Add the quadrics for these 2 points since the edge between them has been collapsed. |
double vtkQuadricDecimation::ComputeCost |
( |
vtkIdType |
edgeId, |
|
|
double * |
x |
|
) |
[protected] |
|
|
Compute cost for contracting this edge and the point that gives us this cost. |
double vtkQuadricDecimation::ComputeCost2 |
( |
vtkIdType |
edgeId, |
|
|
double * |
x |
|
) |
[protected] |
|
|
Compute cost for contracting this edge and the point that gives us this cost. |
|
Find all edges that will have an endpoint change ids because of an edge collapse. p1Id and p2Id are the endpoints of the edge. p2Id is the pointId being removed. |
|
Find a cell that uses this edge. |
int vtkQuadricDecimation::IsGoodPlacement |
( |
vtkIdType |
pt0Id, |
|
|
vtkIdType |
pt1Id, |
|
|
const double * |
x |
|
) |
[protected] |
|
int vtkQuadricDecimation::TrianglePlaneCheck |
( |
const double |
t0[3], |
|
|
const double |
t1[3], |
|
|
const double |
t2[3], |
|
|
const double * |
x |
|
) |
[protected] |
|
void vtkQuadricDecimation::ComputeNumberOfComponents |
( |
void |
|
) |
[protected] |
|
void vtkQuadricDecimation::UpdateEdgeData |
( |
vtkIdType |
ptoId, |
|
|
vtkIdType |
pt1Id |
|
) |
[protected] |
|
void vtkQuadricDecimation::SetPointAttributeArray |
( |
vtkIdType |
ptId, |
|
|
const double * |
x |
|
) |
[protected] |
|
|
Helper function to set and get the point and it's attributes as an array |
void vtkQuadricDecimation::GetPointAttributeArray |
( |
vtkIdType |
ptId, |
|
|
double * |
x |
|
) |
[protected] |
|
|
Helper function to set and get the point and it's attributes as an array |
void vtkQuadricDecimation::GetAttributeComponents |
( |
|
) |
[protected] |
|
|
Find out how many components there are for each attribute for this poly data. |
Member Data Documentation
The documentation for this class was generated from the following file: