The vertex split object is the building block of the progressive mesh representation proposed by Hoppe ("Progressive meshes", SIGGRAPH, 1996). It encodes an edge collapse operation and its inverse the "vertex split". The implementation of vertex split in GTS is somewhat more general than the original version of Hoppe. Non-manifold edges can be collapsed and non-manifold vertices can be split.
The vertex split object. If v1 is a GtsSplit the corresponding vertex can be found in GTS_SPLIT(v1)->v. This conversion is performed directly by the two macros GTS_SPLIT_V1 and GTS_SPLIT_V2. Together with the current GtsSplit, v1 and v2 define one level of a vertex split tree. If v1 or v2 are both GtsVertex, the current vertex split is a leaf of the tree.
Collapses the vertex split vs. Any new edge created during the process will
be of class klass. If heap is not NULL, the new edges will be inserted
into it and the destroyed edges will be removed from it.
Traverses the GtsSplit tree having root as root. Calls func for each
GtsSplit of the tree in the order specified by order. If order is set
to G_PRE_ORDER func is called for the GtsSplit then its children, if order
is set to G_POST_ORDER func is called for the children and then for the
the order in which nodes are visited - G_PRE_ORDER or G_POST_ORDER.
the maximum depth of the traversal. Nodes below this depth
will not be visited. If depth is -1 all nodes in the tree are
visited. If depth is 1, only the root is visited. If depth is 2,
the root and its children are visited. And so on.