EdgeStrip EdgeStrip::get_filtered(CSimplexFilter& filter) const { EdgeStrip ret; for (int i=0; i<num(); i++) if (filter.accept(edge(i))) ret.add(vert(i), edge(i)); return ret; }
inline void make_strip(Bvert_list chain, int k0, int k1, EdgeStrip& strip) { assert(chain.forms_chain()); assert(0 <= k0 && k0 < (int)chain.size() && 0 <= k1 && k1 < (int)chain.size()); assert(k0 != k1); if (k0 > k1) { std::reverse(chain.begin(), chain.end()); int n = chain.size()-1; k0 = n - k0; k1 = n - k1; } strip.reset(); for (int i=k0; i<k1; i++) { strip.add(chain[i], lookup_edge(chain[i], chain[i+1])); } }
inline void add_to_strip(Bvert* v, CEdgeStrip& source, EdgeStrip& ret) { assert(v); CBvert_list& verts = source.verts(); CBedge_list& edges = source.edges(); int k = verts.get_index(v); assert(verts.valid_index(k) && edges[k]->flag()); while (verts.valid_index(k) && edges[k]->flag()) { edges[k]->clear_flag(); ret.add(verts[k], edges[k]); if (source.has_break(k+1)) { k = verts.get_index(source.next_vert(k)); } else { k++; } } }