Overview

Here is code that you can reuse for common operations with meshes, faces, and facets.

Get All Facets in a Mesh

Use the getFacetCount() and the getFacet() functions to loop over all of the facets in a mesh. With each facet, use getVertex() and getNormal() to look up the coordinates of each vertex and components of each vertex normal.

RoseMesh * fs;
unsigned i, sz;
for (i=0, sz=fs->getFacetCount(); i< sz; i++)
{
    const RoseMeshFacet * f = fs->getFacet(i);
    const double * v0 = fs->getVertex(f->verts[0]);
    const double * v1 = fs->getVertex(f->verts[1]);
    const double * v2 = fs->getVertex(f->verts[2]);

    const double * n0 = fs->getNormal(f->normals[0]);
    const double * n1 = fs->getNormal(f->normals[1]);
    const double * n2 = fs->getNormal(f->normals[2]);
	
    printf(Facet #%u:\n, i);
    printf(\t  (%g,%g,%g),  normal (%g,%g,%g)\n,
	   v0[0], v0[1], v0[2], n0[0], n0[1], n0[2]);

    printf(\t  (%g,%g,%g),  normal (%g,%g,%g)\n,
	   v1[0], v1[1], v1[2], n1[0], n1[1], n1[2]);

    printf(\t  (%g,%g,%g),  normal (%g,%g,%g)\n,
	   v2[0], v2[1], v2[2], n2[0], n2[1], n2[2]);
}

Get Each Face in a Mesh

Use the getFaceCount() and the getFace() functions to loop over each face in a mesh, and then proceed as above to work with the sequence of facets for the face.

RoseMesh * fs;
unsigned i, sz;
for (i=0, sz=fs-> getFaceCount(); i< sz; i++)
{
    const RoseMeshFace * face = fs->getFace(i);
    unsigned fnum = face->getFirstFacet();
    unsigned fend = fnum + face->getFacetCount();
	
    for (; fnum < fend; fnum++)
    {
	const RoseMeshFacet * f = fs->getFacet(fnum);
	const double * v0 = fs->getVertex(f->verts[0]);
	const double * v1 = fs->getVertex(f->verts[1]);
	const double * v2 = fs->getVertex(f->verts[2]);

	const double * n0 = fs->getNormal(f->normals[0]);
	const double * n1 = fs->getNormal(f->normals[1]);
	const double * n2 = fs->getNormal(f->normals[2]);
	
	printf(Facet #%u:\n, fnum);
	printf(\t  (%g,%g,%g),  normal (%g,%g,%g)\n,
	       v0[0], v0[1], v0[2], n0[0], n0[1], n0[2]);

	printf(\t  (%g,%g,%g),  normal (%g,%g,%g)\n,
	       v1[0], v1[1], v1[2], n1[0], n1[1], n1[2]);

	printf(\t  (%g,%g,%g),  normal (%g,%g,%g)\n,
	       v2[0], v2[1], v2[2], n2[0], n2[1], n2[2]);

    }
}