Example #1
0
inline ARRAY<double>
get_offset_scales(CBvert_list& skels, CSimplexFilter& filter)
{
   ARRAY<double> ret(skels.num());
   for (int i=0; i<skels.num(); i++)
      ret += offset_scale(skels[i], filter);
   return ret;
}
Example #2
0
inline Wpt_list
centroids(CBvert_list& verts)
{
   Wpt_list ret(verts.num());
   for (int i=0; i<verts.num(); i++) {
      ret += verts[i]->qr_centroid();
   }
   return ret;
}
Example #3
0
inline PIXEL_list
get_pixels(CBvert_list& verts, ProxySurface* p)
{
   PIXEL_list ret(verts.num());
   for (int i=0; i<verts.num(); i++) {
      ret += PixelsData::get_pix(verts[i], p);
   }
   return ret;
}
Example #4
0
Bvert_list
Skin::sticky_verts(CBvert_list& verts) const
{
   Bvert_list ret(verts.num());
   for (int i=0; i<verts.num(); i++) {
      SkinMeme* m = SkinMeme::upcast(find_meme(verts[i]));
      if (m && m->is_sticky()) {
         ret += m->vert();
      }
   }
   return ret;
}
Example #5
0
VertMemeList 
Bbase::find_boss_vmemes(CBvert_list& verts) 
{
   // Convenience: lookup boss memes for a whole list of vertices

   VertMemeList ret(verts.num());
   for (int i=0; i<verts.num(); i++) {
      VertMeme* vm = find_boss_vmeme(verts[i]);
      if (vm)
         ret += vm;
   }
   return ret;
}
Example #6
0
Wpt_list
Skin::track_points(CBvert_list& verts) const
{
   Wpt_list ret(verts.num());
   for (int i=0; i<verts.num(); i++) {
      SkinMeme* m = SkinMeme::upcast(find_meme(verts[i]));
      if (m && m->is_tracking()) {
         ret += m->track_pt();
      } else {
         ret += verts[i]->loc();
      }
   }
   return ret;
}
Example #7
0
inline bool
join(CBvert_list& o, CBvert_list& c, MULTI_CMDptr& cmd, Cstr_ptr& msg)
{
   // Used in Skin::join_to_skel() to join seams of a mesh together.

   JOIN_SEAM_CMDptr join = new JOIN_SEAM_CMD(o, c);
   if (join->doit()) {
      err_adv(debug, "  joined %s (%d verts to %d verts)",
              **msg, o.num(), c.num());
      cmd->add(join);
      return true;
   } else {
      err_adv(debug, "  error: can't join %s", **msg);
      return false;
   }
}
Example #8
0
 // Do a whole list of vertices at a shot:
 static bool gen_twins(CBvert_list& verts, double h,
                       CSimplexFilter& filter) {
    bool ret = true;
    for (int i=0; i<verts.num(); i++)
       ret = gen_twins(verts[i], h, filter) && ret;
    return ret;
 }
Example #9
0
inline void
update_verts(CBvert_list& verts)
{
   // helper for LMESH::update_subdivision(CBface_list& faces)
   for (int i=0; i<verts.num(); i++)
      ((Lvert*)verts[i])->update_subdivision();
}
Example #10
0
int
Skin::set_offsets(CBvert_list& verts, double h) const
{
   int ret = 0;
   for (int i=0; i<verts.num(); i++) {
      ret += ::set_offset(SkinMeme::upcast(find_meme(verts[i])), h);
   }
   return ret;
}
Example #11
0
int
Skin::set_sticky(CBvert_list& verts, bool sticky) const
{
   int ret = 0;
   for (int i=0; i<verts.num(); i++) {
      ret += ::set_sticky(SkinMeme::upcast(find_meme(verts[i])), sticky);
   }
   return ret;
}
Example #12
0
void
Skin::set_stay_outside(CBvert_list& verts, bool b) const
{
   for (int i=0; i<verts.num(); i++) {
      SkinMeme* m = SkinMeme::upcast(find_meme(verts[i]));
      if (m) {
         m->set_stay_outside(b);
      }
   }
}
Example #13
0
bool
Skin::gen_verts(CBvert_list& skel_verts)
{
   // replicate skel verts to create new skin verts.
   // ignores verts that have already been done.
   bool ret = true;
   for (int i=0; i<skel_verts.num(); i++)
      if (!gen_vert(skel_verts[i]))
         ret = false;
   return ret;
}
Example #14
0
void
Skin::restrict(CBvert_list& verts, SimplexFilter* f) const
{
   assert(f);
   for (int i=0; i<verts.num(); i++) {
      SkinMeme* m = SkinMeme::upcast(find_meme(verts[i]));
      if (m) {
         //assert(m->track_simplex() == 0 || f->accept(m->track_simplex()));
         m->set_track_filter(f);
      }
   }
}
Example #15
0
inline void
clear_face_flags(CBvert_list& verts)
{
   // Helper method used below in get_parents();
   // clear flags of faces adjacent to the given vertices,
   // including faces that are not stricly adjacent, but
   // that are part of a quad that contains the vertex.

   Bface_list star;
   for (int i=0; i<verts.num(); i++) {
      verts[i]->get_q_faces(star);
      star.clear_flags();
   }
}
Example #16
0
inline Bface_list
get_q_faces(CBvert_list& verts)
{
   // Helper method used below in get_parents();
   // return all faces adjacent to the given vertices,
   // including faces that are not stricly adjacent, but
   // that are part of a quad that contains the vertex.

   Bface_list ret, star;
   for (int i=0; i<verts.num(); i++) {
      verts[i]->get_q_faces(star);
      try_append(ret, star);
   }
   return ret;
}
Example #17
0
inline void
get_parents(CBvert_list& verts, Bvert_list& vp, Bedge_list& ep)
{
   // Helper method used below in get_parents();
   // from the given list of vertices, return the parent
   // simplices in two lists: one of Lverts, one of Ledges.

   if (verts.empty())
      return;

   assert(LMESH::isa(verts.mesh()));

   for (int i=0; i<verts.num(); i++)
      add_p((Lvert*)verts[i], vp, ep);
}
Example #18
0
Bvert_list
LMESH::get_subdiv_inputs(CBvert_list& verts)
{
   static bool debug = Config::get_var_bool("DEBUG_LMESH_SUBDIV_INPUTS",false);

   // Given a set of vertices from the same LMESH, return
   // the vertices of the parent LMESH that affect the
   // subdivision locations of the given vertices.

   // Require verts share common LMESH
   // XXX - could relax this, provided we test each Bvert
   //       to ensure it is really an Lvert.
   if (!isa(verts.mesh()))
      return Bvert_list();

   // Get direct parent vertices and edges
   Bvert_list vp;       // vertex parents
   Bedge_list ep;       // edge parents
   get_parents(verts, vp, ep);

   err_adv(debug, "%d verts: parents: %d verts, %d edges",
           verts.num(), vp.num(), ep.num());

   // Clear flags of all adjacent faces
   clear_face_flags(vp);
   ep.clear_flag02();

   // Put all adjacent faces into a list
   Bface_list faces = get_q_faces(vp);
   err_adv(debug, "parent faces from verts: %d", faces.num());
   try_append(faces, ep.get_primary_faces());
   err_adv(debug, "parent faces from edges too: %d", faces.num());

   // Pull out the vertices:
   return faces.get_verts();
}
Example #19
0
void
UVdata::split(CBvert_list& verts)
{
   for (int i=0; i<verts.num(); i++)
      UVdata::split(verts[i]);
}
Example #20
0
void
Skin::freeze(CBvert_list& verts) const
{
   for (int i=0; i<verts.num(); i++)
      ::freeze(SkinMeme::upcast(find_meme(verts[i])));
}
Example #21
0
void
Skin::track_deeper(CBvert_list& verts, int R) const
{
   for (int i=0; i<verts.num(); i++)
      ::track_deeper(SkinMeme::upcast(find_meme(verts[i])), R);
}