diff --git a/src/db/db/dbTriangle.cc b/src/db/db/dbTriangle.cc index 4833f7064..f1dcd1c85 100644 --- a/src/db/db/dbTriangle.cc +++ b/src/db/db/dbTriangle.cc @@ -346,7 +346,6 @@ Triangle::Triangle (TriangleEdge *e1, TriangleEdge *e2, TriangleEdge *e3) void Triangle::unlink () { - // @@@ Is this really needed??? for (int i = 0; i != 3; ++i) { db::TriangleEdge *e = edge (i); if (e->left () == this) { diff --git a/src/db/db/dbTriangles.cc b/src/db/db/dbTriangles.cc index be97c67ee..1b783a0e2 100644 --- a/src/db/db/dbTriangles.cc +++ b/src/db/db/dbTriangles.cc @@ -658,7 +658,9 @@ Triangles::find_inside_circle (const db::DPoint ¢er, double radius) const void Triangles::remove (db::Vertex *vertex, std::vector *new_triangles) { - if (vertex->is_outside ()) { + if (vertex->begin_edges () == vertex->end_edges ()) { + // removing an orphan vertex -> ignore + } else if (vertex->is_outside ()) { remove_outside_vertex (vertex, new_triangles); } else { remove_inside_vertex (vertex, new_triangles); @@ -676,10 +678,15 @@ Triangles::remove_outside_vertex (db::Vertex *vertex, std::vectorunlink (); } auto new_triangles = fill_concave_corners (outer_edges); + + for (auto t = to_remove.begin (); t != to_remove.end (); ++t) { + remove (*t); + } + fix_triangles (new_triangles, std::vector (), new_triangles_out); } diff --git a/src/db/unit_tests/dbTrianglesTests.cc b/src/db/unit_tests/dbTrianglesTests.cc index 614623b20..9b6d748f4 100644 --- a/src/db/unit_tests/dbTrianglesTests.cc +++ b/src/db/unit_tests/dbTrianglesTests.cc @@ -252,19 +252,17 @@ TEST(Triangle_test_heavy_remove) } } - int loop = 0; // @@@ while (! vertexes.empty ()) { - ++loop; printf("@@@ %d\n", loop); fflush(stdout); - if (loop == 38) { - printf("@@@BANG!\n"); // @@@ - } unsigned int n = rand () % (unsigned int) vertexes.size (); db::Vertex *v = vertexes [n]; tris.remove (v); vertexes.erase (vertexes.begin () + n); - EXPECT_EQ (tris.check (), true); + // just a few times as it wastes time otherwise + if (vertexes.size () % 10 == 0) { + EXPECT_EQ (tris.check (), true); + } }