(HalfEdgeMesh) Improve interface for iteration
For much of HalfEdgeMesh, the interface returns a copy of the underlying storage vector, or pre-iterates through all of the elements to construct a new list. This can probably be accounted for with some clever iterable classes.
Similarly, one can currently iterate over the edges of a face with a range-based for loop:
for(const auto& e : face) {
// do something
}
However, we currently primarily work for FacePtr, leading to the awkward syntax:
for(const auto& e : *face) {
// do something
}
Change to face->edges()?