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
|
||||
Triangle::unlink ()
|
||||
{
|
||||
// @@@ Is this really needed???
|
||||
for (int i = 0; i != 3; ++i) {
|
||||
db::TriangleEdge *e = edge (i);
|
||||
if (e->left () == this) {
|
||||
|
|
|
|||
|
|
@ -658,7 +658,9 @@ Triangles::find_inside_circle (const db::DPoint ¢er, double radius) const
|
|||
void
|
||||
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);
|
||||
} else {
|
||||
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) {
|
||||
remove (*t);
|
||||
(*t)->unlink ();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue