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]); } }