mirror of https://github.com/KLayout/klayout.git
Some minor refactoring
This commit is contained in:
parent
6596008826
commit
df631aa970
|
|
@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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<tl::weak_ptr<db::
|
|||
db::Vertex *
|
||||
Triangles::insert (db::Vertex *vertex, std::list<tl::weak_ptr<db::Triangle> > *new_triangles)
|
||||
{
|
||||
// @@@ printf("@@@ insert %d\n", (int)mp_triangles.size ()); fflush(stdout);
|
||||
std::vector<db::Triangle *> tris = find_triangle_for_point (*vertex);
|
||||
|
||||
// the new vertex is outside the domain
|
||||
|
|
@ -400,7 +374,7 @@ Triangles::insert (db::Vertex *vertex, std::list<tl::weak_ptr<db::Triangle> > *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<tl::weak_ptr<db::Triangle> > *n
|
|||
std::vector<db::Triangle *>
|
||||
Triangles::find_triangle_for_point (const db::DPoint &point)
|
||||
{
|
||||
// @@@
|
||||
#if 1 // minimize distance search
|
||||
db::TriangleEdge *edge = find_closest_edge (point);
|
||||
|
||||
std::vector<db::Triangle *> res;
|
||||
|
|
@ -432,28 +404,7 @@ Triangles::find_triangle_for_point (const db::DPoint &point)
|
|||
}
|
||||
}
|
||||
|
||||
// @@@
|
||||
std::set<db::Triangle *> 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<db::Triangle *> seta (res.begin (), res.end ());
|
||||
if (seta != setb) {
|
||||
tl_assert (false);
|
||||
}
|
||||
// @@@
|
||||
return res;
|
||||
#else
|
||||
std::vector<db::Triangle *> 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<tl::we
|
|||
}
|
||||
|
||||
void
|
||||
Triangles::split_triangles_on_edge (const std::vector<db::Triangle *> &_tris /*@@@*/, db::Vertex *vertex, db::TriangleEdge *split_edge, std::list<tl::weak_ptr<db::Triangle> > *new_triangles_out)
|
||||
Triangles::split_triangles_on_edge (db::Vertex *vertex, db::TriangleEdge *split_edge, std::list<tl::weak_ptr<db::Triangle> > *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) {
|
||||
|
|
|
|||
|
|
@ -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<db::Triangle *, TriangleBoxConvert, 10> triangle_qt_type;
|
||||
|
||||
tl::list<db::Triangle> mp_triangles;
|
||||
triangle_qt_type m_triangle_qt;
|
||||
tl::stable_vector<db::TriangleEdge> m_edges_heap;
|
||||
std::vector<db::TriangleEdge *> m_returned_edges;
|
||||
tl::stable_vector<db::Vertex> 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<tl::weak_ptr<db::Triangle> > *new_triangles = 0);
|
||||
void split_triangle (db::Triangle *t, db::Vertex *vertex, std::list<tl::weak_ptr<db::Triangle> > *new_triangles_out);
|
||||
void split_triangles_on_edge (const std::vector<db::Triangle *> &tris, db::Vertex *vertex, db::TriangleEdge *split_edge, std::list<tl::weak_ptr<db::Triangle> > *new_triangles_out);
|
||||
void split_triangles_on_edge (db::Vertex *vertex, db::TriangleEdge *split_edge, std::list<tl::weak_ptr<db::Triangle> > *new_triangles_out);
|
||||
void add_more_triangles (std::vector<Triangle *> &new_triangles,
|
||||
db::TriangleEdge *incoming_edge,
|
||||
db::Vertex *from_vertex, db::Vertex *to_vertex,
|
||||
|
|
|
|||
|
|
@ -277,7 +277,6 @@ namespace {
|
|||
|
||||
TEST(insert_many)
|
||||
{
|
||||
return; // @@@
|
||||
srand (0);
|
||||
|
||||
TestableTriangles tris;
|
||||
|
|
|
|||
Loading…
Reference in New Issue