From 8482f3dd28063994eb06af8e3591d384be3b2306 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sun, 21 Jul 2019 10:30:26 +0300 Subject: [PATCH] Left the most robust way to find intersections. --HG-- branch : develop --- src/libs/vlayout/vlayoutdef.h | 6 ------ src/libs/vlayout/vlayoutpaper.cpp | 7 +------ src/libs/vlayout/vlayoutpaper_p.h | 2 +- src/libs/vlayout/vposition.cpp | 13 +++---------- src/libs/vlayout/vposition.h | 2 +- 5 files changed, 6 insertions(+), 24 deletions(-) diff --git a/src/libs/vlayout/vlayoutdef.h b/src/libs/vlayout/vlayoutdef.h index ee6aba976..1634624a4 100644 --- a/src/libs/vlayout/vlayoutdef.h +++ b/src/libs/vlayout/vlayoutdef.h @@ -108,10 +108,4 @@ struct VBestSquareResData qreal sidePosition{0}; }; -struct VCachedPositions -{ - QRectF boundingRect{}; - QPainterPath layoutAllowancePath{}; -}; - #endif // VLAYOUTDEF_H diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 15d47890a..56493bca3 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -266,12 +266,7 @@ bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutPiece } d->details.append(workDetail); d->globalContour.SetContour(newGContour); - - VCachedPositions positionChache; - QVector layoutPoints = workDetail.GetLayoutAllowancePoints(); - positionChache.boundingRect = VLayoutPiece::BoundingRect(layoutPoints); - positionChache.layoutAllowancePath = VLayoutPiece::PainterPath(layoutPoints); - d->positionsCache.append(positionChache); + d->positionsCache.append(VLayoutPiece::PainterPath(workDetail.GetLayoutAllowancePoints())); } else if (bestResult.IsTerminatedByException()) { diff --git a/src/libs/vlayout/vlayoutpaper_p.h b/src/libs/vlayout/vlayoutpaper_p.h index 2d51de511..e1646824b 100644 --- a/src/libs/vlayout/vlayoutpaper_p.h +++ b/src/libs/vlayout/vlayoutpaper_p.h @@ -72,7 +72,7 @@ public: /** @brief details list of arranged details. */ QVector details{}; - QVector positionsCache{}; + QVector positionsCache{}; /** @brief globalContour list of global points contour. */ VContour globalContour{}; diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index a75afa327..cb5074561 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -325,24 +325,17 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutPiece &detail) const return CrossingType::NoIntersection; } - const QVector layoutPoints = detail.GetLayoutAllowancePoints(); - const QRectF layoutBoundingRect = VLayoutPiece::BoundingRect(layoutPoints); - const QPainterPath layoutAllowancePath = VLayoutPiece::PainterPath(layoutPoints); + const QPainterPath layoutAllowancePath = VLayoutPiece::PainterPath(detail.GetLayoutAllowancePoints()); const QVector contourPoints = detail.IsSeamAllowance() && not detail.IsSeamAllowanceBuiltIn() ? detail.GetMappedSeamAllowancePoints() : detail.GetMappedContourPoints(); - const QRectF detailBoundingRect = VLayoutPiece::BoundingRect(contourPoints); const QPainterPath contourPath = VLayoutPiece::PainterPath(contourPoints); for(auto &position : m_data.positionsCache) { - if (position.boundingRect.intersects(layoutBoundingRect) || position.boundingRect.contains(detailBoundingRect)) + if (position.contains(contourPath) || position.intersects(layoutAllowancePath)) { - if (position.layoutAllowancePath.contains(contourPath) || - position.layoutAllowancePath.intersects(layoutAllowancePath)) - { - return CrossingType::Intersection; - } + return CrossingType::Intersection; } } diff --git a/src/libs/vlayout/vposition.h b/src/libs/vlayout/vposition.h index 0daa7442e..e11cafeda 100644 --- a/src/libs/vlayout/vposition.h +++ b/src/libs/vlayout/vposition.h @@ -49,7 +49,7 @@ struct VPositionData bool rotate{false}; int rotationNumber{0}; bool followGrainline{false}; - QVector positionsCache{}; + QVector positionsCache{}; bool isOriginPaperOrientationPortrait{true}; };