mirror of https://github.com/KLayout/klayout.git
WIP: remove vertex implemented for triangles
This commit is contained in:
parent
576eacd0bf
commit
a2e91532c4
|
|
@ -346,7 +346,6 @@ Triangle::Triangle (TriangleEdge *e1, TriangleEdge *e2, TriangleEdge *e3)
|
||||||
void
|
void
|
||||||
Triangle::unlink ()
|
Triangle::unlink ()
|
||||||
{
|
{
|
||||||
// @@@ Is this really needed???
|
|
||||||
for (int i = 0; i != 3; ++i) {
|
for (int i = 0; i != 3; ++i) {
|
||||||
db::TriangleEdge *e = edge (i);
|
db::TriangleEdge *e = edge (i);
|
||||||
if (e->left () == this) {
|
if (e->left () == this) {
|
||||||
|
|
|
||||||
|
|
@ -658,7 +658,9 @@ Triangles::find_inside_circle (const db::DPoint ¢er, double radius) const
|
||||||
void
|
void
|
||||||
Triangles::remove (db::Vertex *vertex, std::vector<db::Triangle *> *new_triangles)
|
Triangles::remove (db::Vertex *vertex, std::vector<db::Triangle *> *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);
|
remove_outside_vertex (vertex, new_triangles);
|
||||||
} else {
|
} else {
|
||||||
remove_inside_vertex (vertex, new_triangles);
|
remove_inside_vertex (vertex, new_triangles);
|
||||||
|
|
@ -676,10 +678,15 @@ Triangles::remove_outside_vertex (db::Vertex *vertex, std::vector<db::Triangle *
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto t = to_remove.begin (); t != to_remove.end (); ++t) {
|
for (auto t = to_remove.begin (); t != to_remove.end (); ++t) {
|
||||||
remove (*t);
|
(*t)->unlink ();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto new_triangles = fill_concave_corners (outer_edges);
|
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<db::TriangleEdge *> (), new_triangles_out);
|
fix_triangles (new_triangles, std::vector<db::TriangleEdge *> (), new_triangles_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -252,19 +252,17 @@ TEST(Triangle_test_heavy_remove)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int loop = 0; // @@@
|
|
||||||
while (! vertexes.empty ()) {
|
while (! vertexes.empty ()) {
|
||||||
++loop; printf("@@@ %d\n", loop); fflush(stdout);
|
|
||||||
if (loop == 38) {
|
|
||||||
printf("@@@BANG!\n"); // @@@
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int n = rand () % (unsigned int) vertexes.size ();
|
unsigned int n = rand () % (unsigned int) vertexes.size ();
|
||||||
db::Vertex *v = vertexes [n];
|
db::Vertex *v = vertexes [n];
|
||||||
tris.remove (v);
|
tris.remove (v);
|
||||||
vertexes.erase (vertexes.begin () + n);
|
vertexes.erase (vertexes.begin () + n);
|
||||||
|
|
||||||
|
// just a few times as it wastes time otherwise
|
||||||
|
if (vertexes.size () % 10 == 0) {
|
||||||
EXPECT_EQ (tris.check (), true);
|
EXPECT_EQ (tris.check (), true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue