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; }
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) ); }