예제 #1
0
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;
}
예제 #2
0
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);
	}
}
예제 #3
0
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);
}
예제 #4
0
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;
}