From 4fb5a048ca411dceb79b97c4fd0db0f4406b6b83 Mon Sep 17 00:00:00 2001 From: dismine Date: Fri, 16 Jan 2015 16:22:42 +0200 Subject: [PATCH] Ignore intersection in vertices of edges. --HG-- branch : feature --- src/libs/vlayout/vlayoutpaper.cpp | 22 +++++++++++++++++++++- src/libs/vlayout/vlayoutpaper.h | 3 +++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index d7aa52a6d..116875906 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -467,7 +467,10 @@ VLayoutPaper::CrossingType VLayoutPaper::Crossing(const VLayoutDetail &detail, i if (type == QLineF::BoundedIntersection) { - return CrossingType::Intersection; + if (TrueIntersection(globalEdge, detailEdge, xPoint)) + { + return CrossingType::Intersection; + } } } } @@ -895,6 +898,23 @@ QPainterPath VLayoutPaper::DrawDetails() const return path; } +//--------------------------------------------------------------------------------------------------------------------- +bool VLayoutPaper::TrueIntersection(const QLineF &gEdge, const QLineF &dEdge, const QPointF &p) const +{ + const QPointF pX = RoundedPoint(p); + const QPointF gP1 = RoundedPoint(gEdge.p1()); + const QPointF gP2 = RoundedPoint(gEdge.p2()); + const QPointF dP1 = RoundedPoint(dEdge.p1()); + const QPointF dP2 = RoundedPoint(dEdge.p2()); + return pX != gP1 && pX != gP2 && pX != dP1 && pX != dP2; +} + +//--------------------------------------------------------------------------------------------------------------------- +QPointF VLayoutPaper::RoundedPoint(const QPointF &p) const +{ + return QPointF(qRound(p.x()), qRound(p.y())); +} + //--------------------------------------------------------------------------------------------------------------------- QGraphicsItem *VLayoutPaper::GetItem() const { diff --git a/src/libs/vlayout/vlayoutpaper.h b/src/libs/vlayout/vlayoutpaper.h index 664471c03..8c3b2e154 100644 --- a/src/libs/vlayout/vlayoutpaper.h +++ b/src/libs/vlayout/vlayoutpaper.h @@ -110,6 +110,9 @@ private: QPainterPath DrawContour(const QVector &points) const; QVector TranslateContour(const QVector &points, qreal dx, qreal dy) const; QPainterPath DrawDetails() const; + + bool TrueIntersection(const QLineF &gEdge, const QLineF &dEdge, const QPointF &p) const; + QPointF RoundedPoint(const QPointF &p) const; }; #endif // VLAYOUTPAPER_H