mirror of https://github.com/KLayout/klayout.git
Refined solution, so it would allow a larger coordinate range.
This commit is contained in:
parent
6d28c78eeb
commit
aba912107b
|
|
@ -306,12 +306,14 @@ EdgeOrientationFilter::EdgeOrientationFilter (double a, bool inverse, bool absol
|
|||
bool
|
||||
EdgeOrientationFilter::selected (const db::Edge &edge, db::properties_id_type) const
|
||||
{
|
||||
db::Vector en = db::Vector (std::max (edge.dx_abs (), edge.dy_abs ()), 0);
|
||||
|
||||
// NOTE: this edge normalization confines the angle to a range between (-90 .. 90] (-90 excluded).
|
||||
// A horizontal edge has 0 degree, a vertical one has 90 degree.
|
||||
if (edge.dx () < 0 || (edge.dx () == 0 && edge.dy () < 0)) {
|
||||
return m_checker (db::Vector (edge.ortho_length (), 0), -edge.d ());
|
||||
return m_checker (en, -edge.d ());
|
||||
} else {
|
||||
return m_checker (db::Vector (edge.ortho_length (), 0), edge.d ());
|
||||
return m_checker (en, edge.d ());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -363,7 +365,7 @@ SpecialEdgeOrientationFilter::selected (const db::Edge &edge, properties_id_type
|
|||
}
|
||||
|
||||
db::Vector en, ev;
|
||||
en = db::Vector (edge.ortho_length (), 0);
|
||||
en = db::Vector (std::max (edge.dx_abs (), edge.dy_abs ()), 0);
|
||||
|
||||
// NOTE: this edge normalization confines the angle to a range between (-90 .. 90] (-90 excluded).
|
||||
// A horizontal edge has 0 degree, a vertical one has 90 degree.
|
||||
|
|
|
|||
|
|
@ -265,6 +265,9 @@ TEST(4)
|
|||
// issue-2060
|
||||
{
|
||||
db::EdgeOrientationFilter f1 (90.0, true, false);
|
||||
db::EdgeOrientationFilter f2 (90.0, false, false);
|
||||
db::EdgeOrientationFilter f45 (45.0, false, false);
|
||||
db::SpecialEdgeOrientationFilter fs (db::SpecialEdgeOrientationFilter::Diagonal, false);
|
||||
|
||||
db::Edges rr;
|
||||
rr.insert (db::Box (db::Point (0, 0), db::Point (1000, 4000000)));
|
||||
|
|
@ -273,6 +276,21 @@ TEST(4)
|
|||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (0, 0), db::Point (1000, 400000)));
|
||||
EXPECT_EQ (db::compare (rr.filtered (f1), "(1000,0;0,0);(0,400000;1000,400000)"), true);
|
||||
|
||||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (0, -1000000000), db::Point (1000, 1000000000)));
|
||||
EXPECT_EQ (db::compare (rr.filtered (f1), "(1000,-1000000000;0,-1000000000);(0,1000000000;1000,1000000000)"), true);
|
||||
|
||||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (0, -1000000000), db::Point (1000, 1000000000)));
|
||||
EXPECT_EQ (db::compare (rr.filtered (f2), "(0,-1000000000;0,1000000000);(1000,1000000000;1000,-1000000000)"), true);
|
||||
|
||||
EXPECT_EQ (f2.selected (db::Edge (db::Point (0, -1000000000), db::Point (0, 1000000000)), size_t (0)), true);
|
||||
EXPECT_EQ (f2.selected (db::Edge (db::Point (0, -1000000000), db::Point (1, 1000000000)), size_t (0)), false);
|
||||
EXPECT_EQ (f45.selected (db::Edge (db::Point (-1000000000, -1000000000), db::Point (1000000000, 1000000000)), size_t (0)), true);
|
||||
EXPECT_EQ (f45.selected (db::Edge (db::Point (-1000000000, -1000000000), db::Point (1000000000, 1000000001)), size_t (0)), false);
|
||||
EXPECT_EQ (fs.selected (db::Edge (db::Point (-1000000000, -1000000000), db::Point (1000000000, 1000000000)), size_t (0)), true);
|
||||
EXPECT_EQ (fs.selected (db::Edge (db::Point (-1000000000, -1000000000), db::Point (1000000000, 1000000001)), size_t (0)), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue