The concept EdgeCollapseSimplificationVisitor describes the requirements for the visitor object which is used to track the edge collapse simplification algorithm.

The several callbacks given as member functions in the visitor are called from certain places in the algorithm implementation.


The type of the surface to simplify. Must be a model of the EdgeCollapsableMesh concept.

A field type representing the collapse cost

typename boost::graph_traits<ECM>::edge_descriptor
edge_descriptor; A BGL edge descriptor representing an undirected edge of the surface.
typename CGAL::halfedge_graph_traits<ECM>::Point
Point; The point type of the vertex. Must be a model of Point_3.
An integer type representing the number of edges


void v.OnStarted ( ECM& surface) Called before the algorithm starts.

void v.OnFinished ( ECM& surface) Called after the algorithm finishes.

void v.OnStopConditionReached ( ECM& surface)
Called when the StopPredicate returned true (but not if the algorithm terminates because the surface could not be simplified any further).

void v.OnCollected ( edge_descriptor edge, ECM& surface)
Called during the collecting phase (when a cost is assigned to the edges), for each edge collected.

v.OnSelected ( edge_descriptor edge,
ECM& surface,
boost::optional<double> cost,
size_type initial_count,
size_type current_count)
Called during the processing phase (when edges are collapsed), for each edge that is selected.
This method is called before the algorithm checks if the edge is collapsable.
cost indicates the current collapse cost for the edge. If absent (meaning that it could not be computed) the edge will not be collapsed.
initial_count and current_count refer to the number of edges.

void v.OnCollapsing ( edge_descriptor edge, ECM& surface, boost::optional<Point> placement)
Called when edge is about to be collapsed and replaced by a vertex whose position is *placement.
If placement is absent (meaning that it could not be computed) the edge will not be collapsed.

void v.OnNonCollapsable ( edge_descriptor edge, ECM& surface)
Called for each selected edge which cannot be collapsed because doing so would change the topological type of the surface (turn it into a non-manifold for instance).