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;
|
||||
} else {
|
||||
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) {
|
||||
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;
|
||||
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
|
||||
while (nloop < 20) { // @@@
|
||||
while (nloop < parameters.max_iterations) { // @@@
|
||||
|
||||
++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 ()
|
||||
: b (1.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"
|
||||
*/
|
||||
double max_area_border;
|
||||
|
||||
/**
|
||||
* @brief Max number of iterations
|
||||
*/
|
||||
size_t max_iterations;
|
||||
};
|
||||
|
||||
typedef tl::shared_collection<db::Triangle> triangles_type;
|
||||
|
|
|
|||
|
|
@ -623,18 +623,20 @@ TEST(Triangles_test_create_constrained_delaunay)
|
|||
TEST(Triangles_test_triangulate)
|
||||
{
|
||||
db::Region r;
|
||||
r.insert (db::Box (0, 0, 1000, 1000));
|
||||
r.insert (db::Box (0, 0, 10000, 10000));
|
||||
|
||||
db::Region r2;
|
||||
r2.insert (db::Box (200, 200, 800, 800));
|
||||
r2.insert (db::Box (2000, 2000, 8000, 8000));
|
||||
|
||||
r -= r2;
|
||||
|
||||
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;
|
||||
tri.triangulate (r, param);
|
||||
tri.triangulate (r, param, 0.001);
|
||||
|
||||
tri.dump ("debug.gds");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue