CGAL may have infinite face vertex ranges.

Calling vtc.size() may end up in an infinite loop. Also, quads do not appear in CGAL meshes.
This commit is contained in:
tamasmeszaros 2021-03-17 09:42:03 +01:00
parent 92de7bafc6
commit 0c4fb6dfcc

View file

@ -150,11 +150,20 @@ template<class _Mesh> TriangleMesh cgal_to_triangle_mesh(const _Mesh &cgalmesh)
}
for (auto &face : cgalmesh.faces()) {
auto vtc = cgalmesh.vertices_around_face(cgalmesh.halfedge(face));
int i = 0;
Vec3i trface;
for (auto v : vtc) trface(i++) = static_cast<int>(v);
facets.emplace_back(trface);
auto vtc = cgalmesh.vertices_around_face(cgalmesh.halfedge(face));
int i = 0;
Vec3i facet;
for (const auto &v : vtc) {
if (i > 2) { i = 0; break; }
facet(i++) = v;
}
if (i == 3) {
facets.emplace_back(facet);
} else {
BOOST_LOG_TRIVIAL(error) << "CGAL face is not a triangle.";
}
}
TriangleMesh out{points, facets};