bool computeNormals(TriMesh mesh) { OpenMesh::FPropHandleT<TriMesh::Point> trueNormals; OpenMesh::FPropHandleT<TriMesh::Point> approxNormals; mesh.add_property(trueNormals); mesh.add_property(approxNormals); TriMesh::FaceIter f_it, f_end(mesh.faces_end()); double valence; TriMesh::FaceVertexIter fv_it; for (f_it=mesh.faces_begin(); f_it!=f_end; ++f_it) { mesh.property(trueNormals,f_it).vectorize(0.0f); valence = 0; for (fv_it=mesh.fv_iter( f_it ); fv_it; ++fv_it) { mesh.property(approxNormals,fv_it) += mesh.point( fv_it ); ++valence; } mesh.property(approxNormals,f_it) /= valence; } return true; } // bool computeNormals(TriMesh mesh)
bool ring::init() { if (!initialised) { mesh.add_property(epochs); initialised = true; ++epoch; TriMesh::VertexIter v_it, v_end(mesh.vertices_end()); for (v_it=mesh.vertices_begin(); v_it!=v_end; ++v_it) { mesh.property(epochs,v_it) = epoch; } } // set epochs return true; }