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

The type of the edge profile cache. Must be a model of the EdgeProfile concept.

typename CGAL::halfedge_graph_traits<ECM>::Point
Point; The point type for the surface 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 ( Profile profile, boost::optional<FT> cost)
Called during the collecting phase (when a cost is assigned to the edges), for each edge collected.

v.OnSelected ( Profile profile,
boost::optional<FT> 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 ( Profile profile, boost::optional<Point> placement)
Called when an 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 ( Profile profile)
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).