inline Bface_list ctrl_faces(CBedge_list& edges) { if (!dynamic_pointer_cast<LMESH>(edges.mesh())) return Bface_list(); Bface_list ret(edges.size()); for (Bedge_list::size_type i=0; i<edges.size(); i++) { Bface* f = ((Ledge*)edges[i])->ctrl_face(); if (f) ret.push_back(f); } return ret.unique_elements().quad_complete_faces(); }
inline Bvert_list reorder(CBedge_list& edges) { Bvert_list ret; Bvert_list verts = edges.get_verts(); for (Bvert_list::size_type i = 0; i < verts.size(); i++) if (Bpoint::find_controller(verts[i]) || Bcurve::find_controller(verts[i])) { ret.push_back(verts[i]); break; } if (ret.empty()) return ret; for (Bvert_list::size_type i = 1; i < verts.size(); i++) { for (Bedge_list::size_type j = 0; j < edges.size(); j++) { Bvert* v = edges[j]->other_vertex(ret.back()); if (v && std::find(ret.begin(), ret.end(), v) == ret.end()) { ret.push_back(v); break; } } } err_adv(debug, " reorder: num of verts: %d", ret.size()); return ret; }
inline void update_edges(CBedge_list& edges) { // helper for LMESH::update_subdivision(CBface_list& faces) for (Bedge_list::size_type i=0; i<edges.size(); i++) ((Ledge*)edges[i])->update_subdivision(); }
inline bool copy_edges(CBedge_list& edges, CVertMapper& vmap) { bool ret = true; for (Bedge_list::size_type i=0; i<edges.size(); i++) if (!copy_edge(edges[i], vmap)) ret = false; return ret; }