mirror of https://github.com/KLayout/klayout.git
Triangle: bug fixes
This commit is contained in:
parent
bfccd24016
commit
26f1219cc5
|
|
@ -1393,9 +1393,9 @@ static bool is_skinny (db::Triangle *tri, const Triangles::TriangulateParameters
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
auto cr = tri->circumcircle ();
|
auto cr = tri->circumcircle ();
|
||||||
double lmin = tri->edge (0)->d ().sq_length ();
|
double lmin = tri->edge (0)->d ().length ();
|
||||||
for (int i = 1; i < 3; ++i) {
|
for (int i = 1; i < 3; ++i) {
|
||||||
lmin = std::min (lmin, tri->edge (i)->d ().sq_length ());
|
lmin = std::min (lmin, tri->edge (i)->d ().length ());
|
||||||
}
|
}
|
||||||
double delta = (fabs (lmin / cr.second) + fabs (param.b)) * db::epsilon;
|
double delta = (fabs (lmin / cr.second) + fabs (param.b)) * db::epsilon;
|
||||||
return lmin / cr.second < param.b - delta;
|
return lmin / cr.second < param.b - delta;
|
||||||
|
|
@ -1461,7 +1461,7 @@ Triangles::triangulate (const db::Region ®ion, const TriangulateParameters &p
|
||||||
}
|
}
|
||||||
|
|
||||||
// @@@ TODO: break if iteration gets stuck
|
// @@@ TODO: break if iteration gets stuck
|
||||||
while (nloop < 20) { // @@@
|
while (nloop < parameters.max_iterations) { // @@@
|
||||||
|
|
||||||
++nloop;
|
++nloop;
|
||||||
tl::info << "Iteration " << nloop << " ..";
|
tl::info << "Iteration " << nloop << " ..";
|
||||||
|
|
@ -1548,7 +1548,7 @@ Triangles::triangulate (const db::Region ®ion, const TriangulateParameters &p
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @@@ tris.dump_as_gdstxt("debug2.txt")
|
// @@@ dump ("debug2.gds"); // @@@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,8 @@ public:
|
||||||
TriangulateParameters ()
|
TriangulateParameters ()
|
||||||
: b (1.0),
|
: b (1.0),
|
||||||
max_area (0.0),
|
max_area (0.0),
|
||||||
max_area_border (0.0)
|
max_area_border (0.0),
|
||||||
|
max_iterations (std::numeric_limits<size_t>::max ())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -62,6 +63,11 @@ public:
|
||||||
* @brief Max area for border triangles or zero for "use max_area"
|
* @brief Max area for border triangles or zero for "use max_area"
|
||||||
*/
|
*/
|
||||||
double max_area_border;
|
double max_area_border;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Max number of iterations
|
||||||
|
*/
|
||||||
|
size_t max_iterations;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef tl::shared_collection<db::Triangle> triangles_type;
|
typedef tl::shared_collection<db::Triangle> triangles_type;
|
||||||
|
|
|
||||||
|
|
@ -623,18 +623,20 @@ TEST(Triangles_test_create_constrained_delaunay)
|
||||||
TEST(Triangles_test_triangulate)
|
TEST(Triangles_test_triangulate)
|
||||||
{
|
{
|
||||||
db::Region r;
|
db::Region r;
|
||||||
r.insert (db::Box (0, 0, 1000, 1000));
|
r.insert (db::Box (0, 0, 10000, 10000));
|
||||||
|
|
||||||
db::Region r2;
|
db::Region r2;
|
||||||
r2.insert (db::Box (200, 200, 800, 800));
|
r2.insert (db::Box (2000, 2000, 8000, 8000));
|
||||||
|
|
||||||
r -= r2;
|
r -= r2;
|
||||||
|
|
||||||
db::Triangles::TriangulateParameters param;
|
db::Triangles::TriangulateParameters param;
|
||||||
param.max_area = 0.1;
|
param.b = 1.21;
|
||||||
|
param.max_area = 1.0;
|
||||||
|
param.max_area_border = 0.0;
|
||||||
|
|
||||||
db::Triangles tri;
|
db::Triangles tri;
|
||||||
tri.triangulate (r, param);
|
tri.triangulate (r, param, 0.001);
|
||||||
|
|
||||||
tri.dump ("debug.gds");
|
tri.dump ("debug.gds");
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue