diff --git a/src/geode/mesh/core/solid_mesh.cpp b/src/geode/mesh/core/solid_mesh.cpp index 7a5ec2c99..e56f45dc9 100644 --- a/src/geode/mesh/core/solid_mesh.cpp +++ b/src/geode/mesh/core/solid_mesh.cpp @@ -193,7 +193,8 @@ namespace } while( facet.polyhedron_id != first_polyhedron && safety_count < MAX_SAFETY_COUNT ); OPENGEODE_EXCEPTION( safety_count < MAX_SAFETY_COUNT, - "[SolidMesh::propagate_around_edge] Too many polyhedra " + "[SolidMesh::propagate_around_edge] Solid: ", solid.name(), + " - Too many polyhedra " "around edge ", edge_vertices[0], " ", edge_vertices[1], " (", solid.point( edge_vertices[0] ).string(), " ", @@ -298,7 +299,9 @@ namespace } } OPENGEODE_EXCEPTION( safety_count < MAX_SAFETY_COUNT, - "[SolidMesh::compute_polyhedra_around_vertex] Too many polyhedra " + "[SolidMesh::compute_polyhedra_around_vertex] Solid: ", + solid.name(), + " Too many polyhedra " "around vertex ", vertex_id, " (", solid.point( vertex_id ).string(), "). This is probably related to a bug in the polyhedra " diff --git a/src/geode/mesh/core/surface_mesh.cpp b/src/geode/mesh/core/surface_mesh.cpp index 9d1f57e71..2f36ca886 100644 --- a/src/geode/mesh/core/surface_mesh.cpp +++ b/src/geode/mesh/core/surface_mesh.cpp @@ -181,7 +181,8 @@ namespace } } OPENGEODE_EXCEPTION( safety_count < MAX_SAFETY_COUNT, - "[SurfaceMesh::polygons_around_vertex] Too many polygons " + "[SurfaceMesh::polygons_around_vertex] Surface: ", mesh.name(), + " Too many polygons " "around vertex ", vertex_id, " (", mesh.point( vertex_id ).string(), "). This is probably related to a bug in the polygon " diff --git a/src/geode/mesh/helpers/repair_polygon_orientations.cpp b/src/geode/mesh/helpers/repair_polygon_orientations.cpp index ca1604687..28dfe83a2 100644 --- a/src/geode/mesh/helpers/repair_polygon_orientations.cpp +++ b/src/geode/mesh/helpers/repair_polygon_orientations.cpp @@ -51,16 +51,29 @@ namespace absl::FixedArray< geode::index_t > compute_bad_oriented_polygons() { - absl::FixedArray< bool > visited( mesh_.nb_polygons(), false ); - for( const auto p : geode::Range{ mesh_.nb_polygons() } ) + try { - if( visited[p] ) + absl::FixedArray< bool > visited( mesh_.nb_polygons(), false ); + for( const auto p : geode::Range{ mesh_.nb_polygons() } ) { - continue; + if( visited[p] ) + { + continue; + } + queue_.emplace( p ); + visited[p] = true; + process_polygon_queue( visited ); } - queue_.emplace( p ); - visited[p] = true; - process_polygon_queue( visited ); + } + catch( geode::OpenGeodeException& e ) + { + const auto msg = + absl::StrCat( "Surface ", mesh_.name(), " - ", e.what() ); + throw( geode::OpenGeodeException( msg ) ); + } + catch( ... ) + { + throw; } return get_bad_oriented_polygons(); }