Exemple #1
0
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;
}
Exemple #2
0
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]));
   }
}
Exemple #3
0
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++;
      }
   }
}