Sturcture : | HalfEdge |

source file: | halfedge.c |

Definition:

struct halfedge{ Edge *hedge; Loop *hloop; Vertex *hvert; HalfEdge *next; HalfEdge *prev; int aliveh; };

Data Members:

- hedge - the nonoriented edge to which the current halfedge is attached.
- hloop - the loop structure, the current halfedge belongs to
- hvert - starting vertex of current halfedge
- next,prev - halfedge pointers in the loop. Next pointer are arranged so that the loop is ccw
- aliveh- indicating if current halfedge is alive

Methods:

- void HalfEdgeConstruct( Loop **l, Vertex * s);

construct a halfedge within the loop l, with starting vertex s - void HalfEdgeDestruct( HalfEdge ** l);

Destruct the halfedge l - HalfEdge * HalfEdgeMate( HalfEdge * l);

Find the mate of halfedge l, suppose it is r. Then l and r have the same vertices, but opposite orientation - Vertex * HalfEdgeStartVertex( HalfEdge * l);

Find the starting vertex of halfedge l. - Vertex * HalfEdgeEndVertex( HalfEdge * l);

Find the ending vertex of halfedge l - void HalfEdgeMerge( HalfEdge * l);

### Edge Collapse

In the mesh, merge the end vertex of l to the start vertex of l, change all neighor structures of l, keep the mesh still a manifold. The neighor structures are inactive, not not really removed. - void HalfEdgeExtend( HalfEdge * l);

### Vertex Split

Suppose after edge collapsation, l is the last halfedge collapsed, then recover the mesh by extending l again. - double HalfEdgeCost( HalfEdge * , double ( * )( Face * ) );

Given cost function of face, calculate halfedge cost.

You can redefine HalfEdgeCost function by yourself. One way is to collapse a halfedge, and do some measurement, get the cost, then recover the mesh. You evaluate all the halfedges, then select the minimum one to collapse.