diff --git a/ChangeLog.txt b/ChangeLog.txt index 3f15da862..37533cc02 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -16,6 +16,7 @@ - Fix handling numeric values passed in console mode. - Add Don't ask again for Stale layout question dialog. - Help user to select default GUI language. +- Improve validation grainline position. # Valentina 0.7.49 July 1, 2021 - Fix crash. diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 2b6ee10a8..6b71582a3 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -2050,14 +2050,29 @@ QList VToolSeamAllowance::SelectedTools() const auto VToolSeamAllowance::IsGrainlinePositionValid() const -> bool { QLineF grainLine = m_grainLine->Grainline(); - QPainterPath grainLinePath = VAbstractPiece::PainterPath(QVector{grainLine.p1(), grainLine.p2()}); - const VPiece detail = VAbstractTool::data.GetPiece(m_id); const QVector contourPoints = detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ? detail.SeamAllowancePoints(getData()) : detail.MainPathPoints(getData()); - const QPainterPath contourPath = VAbstractPiece::PainterPath(contourPoints); - return contourPath.contains(grainLinePath); + QVector points = VAbstractCurve::CurveIntersectLine(contourPoints, grainLine); + if (not points.isEmpty()) + { + for (auto &point : points) + { + if (not VFuzzyComparePoints(grainLine.p1(), point) && not VFuzzyComparePoints(grainLine.p2(), point)) + { + return false; + } + } + } + else + { + QPainterPath grainLinePath = VAbstractPiece::PainterPath(QVector{grainLine.p1(), grainLine.p2()}); + const QPainterPath contourPath = VAbstractPiece::PainterPath(contourPoints); + return contourPath.contains(grainLinePath); + } + + return true; } //---------------------------------------------------------------------------------------------------------------------