From 1cede87cc699d56b89c4ace2fc7c3aa2263b8137 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi <kroluku@gmail.com> Date: Sat, 31 Aug 2019 09:32:43 +0300 Subject: [PATCH] Fix function IsOutsidePoint. Not enough just to compare direction. We also must be sure a distance to tested point is bigger than a segment. --HG-- branch : develop --- src/libs/vlayout/vabstractpiece.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp index db44dfb50..5d7c38ea2 100644 --- a/src/libs/vlayout/vabstractpiece.cpp +++ b/src/libs/vlayout/vabstractpiece.cpp @@ -56,11 +56,20 @@ const qreal VSAPoint::maxPassmarkLength = (10/*mm*/ / 25.4) * PrintDPI; namespace { +//--------------------------------------------------------------------------------------------------------------------- +inline bool IsSameDirection(QPointF p1, QPointF p2, QPointF px) +{ + return qAbs(QLineF(p1, p2).angle() - QLineF(p1, px).angle()) < 0.001; +} + //--------------------------------------------------------------------------------------------------------------------- // Do we create a point outside of a path? inline bool IsOutsidePoint(QPointF p1, QPointF p2, QPointF px) { - return qAbs(QLineF(p1, p2).angle() - QLineF(p1, px).angle()) < 0.001; + QLineF seg1(p1, p2); + QLineF seg2(p1, px); + + return IsSameDirection(p1, p2, px) && seg2.length() >= seg1.length(); } //---------------------------------------------------------------------------------------------------------------------