Exemple #1
0
EdgeMemeList 
Bbase::find_boss_ememes(CBedge_list& edges) 
{
   // Convenience: lookup boss memes for a whole list of edges

   EdgeMemeList ret(edges.num());
   for (int i=0; i<edges.num(); i++) {
      EdgeMeme* vm = find_boss_ememe(edges[i]);
      if (vm)
         ret += vm;
   }
   return ret;
}
Exemple #2
0
void
EdgeStrip::build_with_tips(CBedge_list& edges, CSimplexFilter& filter)
{
   // Build the strip from the given pool of edges, with the
   // given filter.  Try to start the edge strip at the "tips" of
   // chains of edges of the desired type. The given filter
   // should just screen for edges of the desired kind;
   // internally this method also screens for edges that have not
   // yet been reached (added to the strip).

   // Clear edge flags to screen for unreached edges:
   set_adjacent_edges(edges.get_verts(), 1);
   edges.clear_flags();

   // Pull out the edge tips:
   Bedge_list tips = edges.filter(ChainTipEdgeFilter(filter));

   // Construct the filter that screens out previously reached
   // edges:
   UnreachedSimplexFilter unreached;
   AndFilter       wanted = unreached + filter;

   int k;

   // Start from all the tips first:
   for (k=0; k<tips.num(); k++) {
      Bedge* e = tips[k];
      Bvert* v = (e->v2()->degree(filter) != 2) ? e->v2() : e->v1();
      build(v, e, wanted);
   }

   // Now check the rest:
   for (k=0; k<edges.num(); k++)
      build(0, edges[k], wanted);
}
Exemple #3
0
inline void
update_edges(CBedge_list& edges)
{
   // helper for LMESH::update_subdivision(CBface_list& faces)
   for (int i=0; i<edges.num(); i++)
      ((Ledge*)edges[i])->update_subdivision();
}
Exemple #4
0
bool 
Skin::copy_edges(CBedge_list& edges) const
{
   bool ret = true;
   for (int i=0; i<edges.num(); i++)
      if (!copy_edge(edges[i]))
         ret = false;
   return ret;
}
Exemple #5
0
void
EdgeStrip::build(CBedge_list& edges, CSimplexFilter& filter)
{
   // Given a list of edges to search, build the strip from edges
   // that satisfy a given property.

   reset();

   for (int k=0; k<edges.num(); k++)
      build(0, edges[k], filter);
}
Exemple #6
0
void
Bbase::add_edge_memes(CBedge_list& edges)
{
   if (!(_mesh && _mesh == edges.mesh())) {
      err_msg("Bbase::add_edge_memes: Error: bad mesh");
      return;
   }

   for (int i=0; i<edges.num(); i++)
      add_edge_meme((Ledge*)edges[i]);
}
Exemple #7
0
void
EdgeStrip::build_ccw_boundaries(
   CBedge_list& edges,
   CSimplexFilter& face_filter
   )
{
   // Similar to previous...
   //
   // XXX - needs comments

   // Clear edge flags to screen for unreached edges:
   // set edge flags to 1 in 1-ring of verts,
   // then clear edge flags of internal edges
   set_adjacent_edges(edges.get_verts(), 1);
   edges.clear_flags();

   // get an edge filter that accepts "boundary" edges WRT the
   // given face filter
   BoundaryEdgeFilter boundary(face_filter);

   // Pull out the edge tips:
   Bedge_list tips = edges.filter(ChainTipEdgeFilter(boundary));

   // Construct the filter that screens out previously reached
   // edges:
   UnreachedSimplexFilter unreached;
   AndFilter       wanted = unreached + boundary;

   int k;

   // Start from all the tips first:
   for (k=0; k<tips.num(); k++) {
      Bedge* e = tips[k];
      Bvert* v = (e->v2()->degree(boundary) != 2) ? e->v2() : e->v1();
      Bface* f = e->screen_face(face_filter);
      assert(f); // e must have 1 face satisfying the filter

      // If this will start out running ccw, take it.
      // otherwise skip:
      if (f->next_vert_ccw(v) == e->other_vertex(v))
         build(v, e, wanted);
   }

   // Now check the rest:
   for (k=0; k<edges.num(); k++) {
      Bedge* e = edges[k];
      Bface* f = e->screen_face(face_filter);
      assert(f); // e must have 1 face satisfying the filter

      // Go CCW around faces
      build(f->leading_vert_ccw(e), e, wanted);
   }
}