int main(int /*argc*/, char** argv) { SurfaceMesh mesh; mesh.read(argv[1]); float mean_valence = 0.0f; unsigned int vertex_valence; // instantiate iterator and circulators SurfaceMesh::Vertex_iterator vit; SurfaceMesh::Vertex_around_vertex_circulator vc, vc_end; // loop over all vertices for (vit = mesh.vertices_begin(); vit != mesh.vertices_end(); ++vit) { // initialize circulators vc = mesh.vertices(*vit); vc_end = vc; // reset counter vertex_valence = 0; // loop over all incident vertices do { ++vertex_valence; } while (++vc != vc_end); // sum up vertex valences mean_valence += vertex_valence; } mean_valence /= mesh.n_vertices(); std::cout << "mean valence: " << mean_valence << std::endl; }
void VertexScalar::saveScalars() { if (!mi) return; SurfaceMesh *mesh = mi->getMesh(); if (!mesh) return; SurfaceMesh::VertexIter v_it = mesh->vertices_begin(); for (unsigned int i = 0; i < ps->size(); i++) { if (v_it == mesh->vertices_end()) { mesh->add_vertex(MyMesh::Point()); } else { SurfaceMesh::TexCoord2D tc = mesh->texcoord2D(v_it); tc[0] = (SurfaceMesh::Scalar) getScalar(i); mesh->set_texcoord2D(v_it, tc); ++v_it; } } while (v_it != mesh->vertices_end()) { SurfaceMesh::VertexIter extra = v_it; ++v_it; // could do this above but may be confusing mesh->delete_vertex(extra); } }
void VertexScalar::loadScalars() { if (!mi) return; SurfaceMesh *mesh = mi->getMesh(); if (!mesh) return; unsigned int i = 0; for (SurfaceMesh::VertexIter v_it = mesh->vertices_begin(); v_it!=mesh->vertices_end(); ++v_it) { if (i >= ps->size()) { ps->addParticle(); } SurfaceMesh::TexCoord2D tc = mesh->texcoord2D(v_it); setScalar(i,tc[0]); i++; } for (unsigned int j = ps->size() - 1; j >= i; j--) ps->removeParticle(j); }
int main(int /*argc*/, char** argv) { SurfaceMesh mesh; mesh.read(argv[1]); // get (pre-defined) property storing vertex positions SurfaceMesh::Vertex_property<Vec3> points = mesh.get_vertex_property<Vec3>("v:point"); SurfaceMesh::Vertex_iterator vit, vend = mesh.vertices_end(); Vec3 p(0,0,0); for (vit = mesh.vertices_begin(); vit != vend; ++vit) { // access point property like an array p += points[*vit]; } p /= mesh.n_vertices(); std::cout << "barycenter: " << p << std::endl; }