Left the most robust way to find intersections.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2019-07-21 10:30:26 +03:00
parent cc2aa8d1ba
commit 8482f3dd28
5 changed files with 6 additions and 24 deletions

View file

@ -108,10 +108,4 @@ struct VBestSquareResData
qreal sidePosition{0};
};
struct VCachedPositions
{
QRectF boundingRect{};
QPainterPath layoutAllowancePath{};
};
#endif // VLAYOUTDEF_H

View file

@ -266,12 +266,7 @@ bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutPiece
}
d->details.append(workDetail);
d->globalContour.SetContour(newGContour);
VCachedPositions positionChache;
QVector<QPointF> 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())
{

View file

@ -72,7 +72,7 @@ public:
/** @brief details list of arranged details. */
QVector<VLayoutPiece> details{};
QVector<VCachedPositions> positionsCache{};
QVector<QPainterPath> positionsCache{};
/** @brief globalContour list of global points contour. */
VContour globalContour{};

View file

@ -325,24 +325,17 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutPiece &detail) const
return CrossingType::NoIntersection;
}
const QVector<QPointF> layoutPoints = detail.GetLayoutAllowancePoints();
const QRectF layoutBoundingRect = VLayoutPiece::BoundingRect(layoutPoints);
const QPainterPath layoutAllowancePath = VLayoutPiece::PainterPath(layoutPoints);
const QPainterPath layoutAllowancePath = VLayoutPiece::PainterPath(detail.GetLayoutAllowancePoints());
const QVector<QPointF> 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;
}
}

View file

@ -49,7 +49,7 @@ struct VPositionData
bool rotate{false};
int rotationNumber{0};
bool followGrainline{false};
QVector<VCachedPositions> positionsCache{};
QVector<QPainterPath> positionsCache{};
bool isOriginPaperOrientationPortrait{true};
};