Esempio n. 1
0
int  
ProxySurface::grow_proxy_surface()
{
   assert(_proxy_mesh);
   int n = 0; //number of edges that will be grown

   // Get the boundary of the current proxy surface
   EdgeStrip boundary = _proxy_mesh->faces().get_boundary();
   //cerr << "ProxySurface::grow_proxy_surface " << boundary.num() << " total "<< endl;
   for(int i=0; i < boundary.num(); ++i)
   {        
      //cerr << "ProxySurface::grow_proxy_surface now: " << i << endl;
      if(is_inside_bounding_box(boundary.edge(i))){ 
         grow_quad_from_edge(_proxy_mesh, &boundary, i);        
          _proxy_mesh->changed();
         n++;         
      }
      
   }
  
   return n;
}
Esempio n. 2
0
inline Bedge_list
quad_cell_end_edges(PCell* cell)
{
   // if the cell is a quad (4 sides) and has one neigbhor,
   // return the side opposite from the neighbor.

   assert(cell && cell->num_corners() == 4);

   PCell_list nbrs = cell->nbrs();
   if (nbrs.size() != 1) {
      err_adv(debug, "quad_cell_end_edges: neighbors: %d != 1", nbrs.size());
      return Bedge_list();
   }
   // find an edge of the shared boundary.
   // do it now before messing with flags...
   assert(!cell->shared_boundary(nbrs[0]).empty());
   Bedge* e = cell->shared_boundary(nbrs[0]).front();
   assert(e);

   EdgeStrip boundary = cell->get_boundary();
   assert(boundary.num_line_strips() == 1);

   // iterate around the boundary, setting edge flags to value
   // k that is incremented whenever we pass a cell corner.
   int k = 0;
   PCellCornerVertFilter filter;
   for (int i=0; i<boundary.num(); i++) {
      if (filter.accept(boundary.vert(i)))
         k = (k + 1)%4;
      boundary.edge(i)->set_flag(k);
   }

   // we want the edges with flag == k + 2 mod 4
   return boundary.edges().filter(
      SimplexFlagFilter((e->flag() + 2)%4)
      );
}