Fixed issue #2060 - the precision of the check was too low.

This commit is contained in:
Matthias Koefferlein 2025-05-22 22:48:48 +02:00
parent 7b865451ee
commit 6d28c78eeb
3 changed files with 19 additions and 6 deletions

View File

@ -250,8 +250,8 @@ EdgeAngleChecker::EdgeAngleChecker (double angle_start, bool include_angle_start
include_angle_start = true;
}
m_t_start = db::CplxTrans(1.0, angle_start, false, db::DVector ());
m_t_end = db::CplxTrans(1.0, angle_end, false, db::DVector ());
m_t_start = db::ICplxTrans (1.0, angle_start, false, db::Vector ());
m_t_end = db::ICplxTrans (1.0, angle_end, false, db::Vector ());
m_include_start = include_angle_start;
m_include_end = include_angle_end;
@ -266,10 +266,10 @@ EdgeAngleChecker::EdgeAngleChecker (double angle_start, bool include_angle_start
bool
EdgeAngleChecker::check (const db::Vector &a, const db::Vector &b) const
{
db::DVector vout (b);
db::Vector vout (b);
db::DVector v1 = m_t_start * a;
db::DVector v2 = m_t_end * a;
db::Vector v1 = m_t_start * a;
db::Vector v2 = m_t_end * a;
int vps1 = db::vprod_sign (v1, vout);
int vps2 = db::vprod_sign (v2, vout);

View File

@ -155,7 +155,7 @@ public:
}
private:
db::CplxTrans m_t_start, m_t_end;
db::ICplxTrans m_t_start, m_t_end;
bool m_include_start, m_include_end;
bool m_big_angle, m_all;
bool m_inverse, m_absolute;

View File

@ -261,6 +261,19 @@ TEST(4)
db::EdgeOrientationFilter f1 (89.0, true, 90.0, false, false, false);
EXPECT_EQ (r.filtered (f1).to_string (), "");
}
// issue-2060
{
db::EdgeOrientationFilter f1 (90.0, true, false);
db::Edges rr;
rr.insert (db::Box (db::Point (0, 0), db::Point (1000, 4000000)));
EXPECT_EQ (db::compare (rr.filtered (f1), "(1000,0;0,0);(0,4000000;1000,4000000)"), true);
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);
}
}
TEST(5)