#include "outline_ordered.h" #include "exterior_edges.h" #include template IGL_INLINE void igl::outline_ordered( const Eigen::PlainObjectBase & F, std::vector >& L) { using namespace std; using namespace Eigen; MatrixXi E = exterior_edges(F); set unseen; for (int i = 0; i < E.rows(); ++i) { unseen.insert(unseen.end(),i); } while (!unseen.empty()) { vector l; // Get first vertex of loop int startEdge = *unseen.begin(); unseen.erase(unseen.begin()); int start = E(startEdge,0); int next = E(startEdge,1); l.push_back(start); while (start != next) { l.push_back(next); // Find next edge int nextEdge; set::iterator it; for (it=unseen.begin(); it != unseen.end() ; ++it) { if (E(*it,0) == next || E(*it,1) == next) { nextEdge = *it; break; } } unseen.erase(nextEdge); next = (E(nextEdge,0) == next) ? E(nextEdge,1) : E(nextEdge,0); } L.push_back(l); } }