예제 #1
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]);
}
예제 #2
0
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();
}
예제 #3
0
inline double
compute_yardstick(CBedge_list& edges, bool debug=false)
{
   double ret = 0.6 * edges.strong_edges().avg_len();

   BMESHptr mk = edges.mesh();
   BMESHptr m0 = get_top_level(edges.get_faces()).mesh();

   int    lk = 0;       // mesh level of edges
   int    l0 = 0;       // mesh level of edges' control region
   double  s = 1;       // scaling factor
   if (mk && m0) {
      lk = mk->subdiv_level();
      l0 = m0->subdiv_level();
      s = (1 << (lk - l0));
   }
   err_adv(debug, "lk: %d, l0: %d, scaling: %f", lk, l0, s);
   return s * ret;
}