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

View File

@ -155,7 +155,7 @@ public:
} }
private: 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_include_start, m_include_end;
bool m_big_angle, m_all; bool m_big_angle, m_all;
bool m_inverse, m_absolute; bool m_inverse, m_absolute;

View File

@ -261,6 +261,19 @@ TEST(4)
db::EdgeOrientationFilter f1 (89.0, true, 90.0, false, false, false); db::EdgeOrientationFilter f1 (89.0, true, 90.0, false, false, false);
EXPECT_EQ (r.filtered (f1).to_string (), ""); 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) TEST(5)