From df631aa97013fe698287e2aaedbf2a18916fe60c Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 18 Mar 2025 00:19:15 +0100 Subject: [PATCH] Some minor refactoring --- src/db/db/dbQuadTree.h | 23 ++++---- src/db/db/dbTriangles.cc | 83 +-------------------------- src/db/db/dbTriangles.h | 8 +-- src/db/unit_tests/dbTrianglesTests.cc | 1 - 4 files changed, 13 insertions(+), 102 deletions(-) diff --git a/src/db/db/dbQuadTree.h b/src/db/db/dbQuadTree.h index 7cc9a13dc..45d1c0a53 100644 --- a/src/db/db/dbQuadTree.h +++ b/src/db/db/dbQuadTree.h @@ -128,15 +128,13 @@ public: return m_center; } - void insert_top (const T &value, const box_type &total_box) + void insert_top (const T &value, const box_type &total_box, const box_type &b) { - insert (value, propose_ucenter (total_box)); + insert (value, propose_ucenter (total_box), b); } - bool erase (const T &value) + bool erase (const T &value, const box_type &b) { - box_type b = BC () (value); - int n = quad_for (b); if (is_leaf () || n < 0) { @@ -150,7 +148,7 @@ public: } else if (m_q[n]) { - if (m_q[n]->erase (value)) { + if (m_q[n]->erase (value, b)) { if (m_q[n]->empty ()) { delete m_q[n]; m_q[n] = 0; @@ -292,11 +290,11 @@ private: ov.swap (m_objects); for (auto o = ov.begin (); o != ov.end (); ++o) { - insert (*o, ucenter); + insert (*o, ucenter, BC () (*o)); } } - void insert (const T &value, const point_type &ucenter) + void insert (const T &value, const point_type &ucenter, const box_type &b) { if (is_leaf () && m_objects.size () + 1 < thr) { @@ -308,7 +306,6 @@ private: split (ucenter); } - box_type b = BC () (value); if (inside (b, box (ucenter))) { int n = quad_for (b); @@ -319,7 +316,7 @@ private: box_type bq = q (n, ucenter); m_q[n] = new quad_tree_node (bq.center ()); } - m_q[n]->insert (value, m_center); + m_q[n]->insert (value, m_center, b); } } else { @@ -327,7 +324,7 @@ private: tl_assert (m_q[0] || m_q[1] || m_q[2] || m_q[3]); point_type new_ucenter = m_center - (m_center - ucenter) * 2.0; grow (new_ucenter); - insert (value, new_ucenter); + insert (value, new_ucenter, b); } @@ -770,7 +767,7 @@ public: } m_total_box += b; - m_root.insert_top (value, m_total_box); + m_root.insert_top (value, m_total_box, b); } /** @@ -783,7 +780,7 @@ public: */ bool erase (const T &value) { - return m_root.erase (value); + return m_root.erase (value, BC () (value)); } /** diff --git a/src/db/db/dbTriangles.cc b/src/db/db/dbTriangles.cc index b325579c9..246afa2e6 100644 --- a/src/db/db/dbTriangles.cc +++ b/src/db/db/dbTriangles.cc @@ -87,18 +87,6 @@ Triangles::create_triangle (TriangleEdge *e1, TriangleEdge *e2, TriangleEdge *e3 res->set_id (++m_id); mp_triangles.push_back (res); - m_triangle_qt.insert (res); - - // @@@ -#if 0 - if (mp_triangles.size () != m_triangle_qt.size ()) { - size_t a = mp_triangles.size (); - size_t b = m_triangle_qt.size (); - printf("@@@ %ld -- %ld\n", a, b); fflush(stdout); - } - tl_assert (mp_triangles.size () == m_triangle_qt.size ()); // @@@ -#endif - // @@@ return res; } @@ -110,20 +98,7 @@ Triangles::remove_triangle (db::Triangle *tri) edges [i] = tri->edge (i); } - bool removed = m_triangle_qt.erase (tri); - tl_assert (removed); - delete tri; - // @@@ -#if 0 - if (mp_triangles.size () != m_triangle_qt.size ()) { - size_t a = mp_triangles.size (); - size_t b = m_triangle_qt.size (); - printf("@@@ %ld -- %ld\n", a, b); fflush(stdout); - } - tl_assert (mp_triangles.size () == m_triangle_qt.size ()); // @@@ -#endif - // @@@ // clean up edges we do no longer need for (int i = 0; i < 3; ++i) { @@ -379,7 +354,6 @@ Triangles::insert_point (db::DCoord x, db::DCoord y, std::list > *new_triangles) { - // @@@ printf("@@@ insert %d\n", (int)mp_triangles.size ()); fflush(stdout); std::vector tris = find_triangle_for_point (*vertex); // the new vertex is outside the domain @@ -400,7 +374,7 @@ Triangles::insert (db::Vertex *vertex, std::list > *n if (! on_edges.empty ()) { if (on_edges.size () == size_t (1)) { - split_triangles_on_edge (tris, vertex, on_edges.front (), new_triangles); + split_triangles_on_edge (vertex, on_edges.front (), new_triangles); return vertex; } else { // the vertex is already present @@ -419,8 +393,6 @@ Triangles::insert (db::Vertex *vertex, std::list > *n std::vector Triangles::find_triangle_for_point (const db::DPoint &point) { -// @@@ -#if 1 // minimize distance search db::TriangleEdge *edge = find_closest_edge (point); std::vector res; @@ -432,28 +404,7 @@ Triangles::find_triangle_for_point (const db::DPoint &point) } } - // @@@ - std::set setb; - for (auto i = m_triangle_qt.begin_touching (db::DBox (point, point)); ! i.at_end (); ++i) { - if ((*i)->contains (point) >= 0) { - setb.insert (*i); - } - } - std::set seta (res.begin (), res.end ()); - if (seta != setb) { - tl_assert (false); - } - // @@@ return res; -#else - std::vector res; - for (auto i = m_triangle_qt.begin_touching (db::DBox (point, point)); ! i.at_end (); ++i) { - if ((*i)->contains (point) >= 0) { - res.push_back (*i); - } - } - return res; -#endif } db::TriangleEdge * @@ -691,7 +642,7 @@ Triangles::split_triangle (db::Triangle *t, db::Vertex *vertex, std::list &_tris /*@@@*/, db::Vertex *vertex, db::TriangleEdge *split_edge, std::list > *new_triangles_out) +Triangles::split_triangles_on_edge (db::Vertex *vertex, db::TriangleEdge *split_edge, std::list > *new_triangles_out) { TriangleEdge *s1 = create_edge (split_edge->v1 (), vertex); TriangleEdge *s2 = create_edge (split_edge->v2 (), vertex); @@ -1220,8 +1171,6 @@ Triangles::search_edges_crossing (Vertex *from, Vertex *to) db::Vertex * Triangles::find_vertex_for_point (const db::DPoint &point) { -// @@@ -#if 1 // minimize distance search db::TriangleEdge *edge = find_closest_edge (point); if (!edge) { return 0; @@ -1232,33 +1181,7 @@ Triangles::find_vertex_for_point (const db::DPoint &point) } else if (edge->v2 ()->equal (point)) { v = edge->v2 (); } - // @@@ - db::Vertex *vv = 0; - for (auto i = m_triangle_qt.begin_touching (db::DBox (point, point)); ! i.at_end () && ! vv; ++i) { - db::Triangle *t = *i; - for (unsigned int i = 0; i < 3 && ! vv; ++i) { - if (t->vertex (i)->equal (point)) { - vv = t->vertex (i); - } - } - } - if (vv != v) { - tl_assert (false); // @@@ - } - // @@@ return v; -#else - for (auto i = m_triangle_qt.begin_touching (db::DBox (point, point)); ! i.at_end (); ++i) { - db::Triangle *t = *i; - for (unsigned int i = 0; i < 3; ++i) { - if (t->vertex (i)->equal (point)) { - return t->vertex (i); - } - } - } - return 0; -#endif -// @@@ } db::TriangleEdge * @@ -1499,7 +1422,6 @@ void Triangles::clear () { mp_triangles.clear (); - m_triangle_qt.clear (); m_edges_heap.clear (); m_vertex_heap.clear (); m_returned_edges.clear (); @@ -1691,7 +1613,6 @@ Triangles::refine (const TriangulateParameters ¶meters) auto cr = (*t)->circumcircle(); auto center = cr.first; - // printf("@@@ %s -- %s\n", (*t)->to_string().c_str(), center.to_string ().c_str()); fflush(stdout); if ((*t)->contains (center) >= 0) { if (tl::verbosity () >= parameters.base_verbosity + 20) { diff --git a/src/db/db/dbTriangles.h b/src/db/db/dbTriangles.h index 96f342a1e..67c48b4c6 100644 --- a/src/db/db/dbTriangles.h +++ b/src/db/db/dbTriangles.h @@ -20,8 +20,6 @@ */ - - #ifndef HDR_dbTriangles #define HDR_dbTriangles @@ -29,7 +27,6 @@ #include "dbTriangle.h" #include "dbBox.h" #include "dbRegion.h" -#include "dbQuadTree.h" #include "tlObjectCollection.h" #include "tlStableVector.h" @@ -316,10 +313,7 @@ private: } }; - typedef db::quad_tree triangle_qt_type; - tl::list mp_triangles; - triangle_qt_type m_triangle_qt; tl::stable_vector m_edges_heap; std::vector m_returned_edges; tl::stable_vector m_vertex_heap; @@ -342,7 +336,7 @@ private: db::TriangleEdge *find_closest_edge (const db::DPoint &p, db::Vertex *vstart = 0, bool inside_only = false); db::Vertex *insert (db::Vertex *vertex, std::list > *new_triangles = 0); void split_triangle (db::Triangle *t, db::Vertex *vertex, std::list > *new_triangles_out); - void split_triangles_on_edge (const std::vector &tris, db::Vertex *vertex, db::TriangleEdge *split_edge, std::list > *new_triangles_out); + void split_triangles_on_edge (db::Vertex *vertex, db::TriangleEdge *split_edge, std::list > *new_triangles_out); void add_more_triangles (std::vector &new_triangles, db::TriangleEdge *incoming_edge, db::Vertex *from_vertex, db::Vertex *to_vertex, diff --git a/src/db/unit_tests/dbTrianglesTests.cc b/src/db/unit_tests/dbTrianglesTests.cc index c2209c3da..9b7dd021c 100644 --- a/src/db/unit_tests/dbTrianglesTests.cc +++ b/src/db/unit_tests/dbTrianglesTests.cc @@ -277,7 +277,6 @@ namespace { TEST(insert_many) { - return; // @@@ srand (0); TestableTriangles tris;