diff --git a/src/libs/vlayout/vlayoutdetail.cpp b/src/libs/vlayout/vlayoutdetail.cpp index 66f377471..7cf91035a 100644 --- a/src/libs/vlayout/vlayoutdetail.cpp +++ b/src/libs/vlayout/vlayoutdetail.cpp @@ -252,7 +252,24 @@ int VLayoutDetail::EdgeByPoint(const QPointF &p1) const } //--------------------------------------------------------------------------------------------------------------------- -QRectF VLayoutDetail::BoundingRect() const +QRectF VLayoutDetail::DetailBoundingRect() const +{ + QVector points; + if (getSeamAllowance()) + { + points = GetSeamAllowencePoints(); + } + else + { + points = GetContourPoints(); + } + + points.append(points.first()); + return QPolygonF(points).boundingRect(); +} + +//--------------------------------------------------------------------------------------------------------------------- +QRectF VLayoutDetail::LayoutBoundingRect() const { QVector points = GetLayoutAllowencePoints(); points.append(points.first()); @@ -262,7 +279,7 @@ QRectF VLayoutDetail::BoundingRect() const //--------------------------------------------------------------------------------------------------------------------- qreal VLayoutDetail::Diagonal() const { - const QRectF rec = BoundingRect(); + const QRectF rec = LayoutBoundingRect(); return qSqrt(pow(rec.height(), 2) + pow(rec.width(), 2)); } diff --git a/src/libs/vlayout/vlayoutdetail.h b/src/libs/vlayout/vlayoutdetail.h index 433b1db8c..2e75159ad 100644 --- a/src/libs/vlayout/vlayoutdetail.h +++ b/src/libs/vlayout/vlayoutdetail.h @@ -71,7 +71,8 @@ public: QLineF Edge(int i) const; int EdgeByPoint(const QPointF &p1) const; - QRectF BoundingRect() const; + QRectF DetailBoundingRect() const; + QRectF LayoutBoundingRect() const; qreal Diagonal() const; bool isNull() const; diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 16aab53ba..91a7213ba 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -335,7 +335,7 @@ QRectF VLayoutPaper::BoundingRect() const QRectF rec; for (int i=0; i < d->details.count(); ++i) { - rec = rec.united(d->details.at(i).BoundingRect()); + rec = rec.united(d->details.at(i).LayoutBoundingRect()); } return rec; diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index 75f4feb0a..a7c02bc7a 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -264,7 +264,7 @@ bool VPosition::CheckCombineEdges(VLayoutDetail &detail, int j, int &dEdge) #endif CrossingType type = CrossingType::Intersection; - if (SheetContains(detail.BoundingRect())) + if (SheetContains(detail.LayoutBoundingRect())) { if (not gContour.GetContour().isEmpty()) { @@ -306,7 +306,7 @@ bool VPosition::CheckCombineEdges(VLayoutDetail &detail, int j, int &dEdge) } CrossingType type = CrossingType::Intersection; - if (SheetContains(detail.BoundingRect())) + if (SheetContains(detail.LayoutBoundingRect())) { type = Crossing(detail); } @@ -343,7 +343,7 @@ bool VPosition::CheckRotationEdges(VLayoutDetail &detail, int j, int dEdge, int #endif CrossingType type = CrossingType::Intersection; - if (SheetContains(detail.BoundingRect())) + if (SheetContains(detail.LayoutBoundingRect())) { type = Crossing(detail); } @@ -367,21 +367,21 @@ bool VPosition::CheckRotationEdges(VLayoutDetail &detail, int j, int dEdge, int //--------------------------------------------------------------------------------------------------------------------- VPosition::CrossingType VPosition::Crossing(const VLayoutDetail &detail) const { - const QRectF dRect = detail.BoundingRect(); const QRectF gRect = gContour.BoundingRect(); - if (not gRect.intersects(dRect)) + if (not gRect.intersects(detail.LayoutBoundingRect()) && not gRect.contains(detail.DetailBoundingRect())) { // This we can determine efficiently. return CrossingType::NoIntersection; } - if (gContour.ContourPath().intersects(detail.LayoutAllowencePath())) + const QPainterPath gPath = gContour.ContourPath(); + if (not gPath.intersects(detail.LayoutAllowencePath()) && not gPath.contains(detail.ContourPath())) { - return CrossingType::Intersection; + return CrossingType::NoIntersection; } else { - return CrossingType::NoIntersection; + return CrossingType::Intersection; } }