From c6d19c3b9bea3c7fc9fc2a7fa9543d2ffea4f4d7 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 13 Mar 2017 14:33:04 +0200 Subject: [PATCH] Grainline obey center pin point on layout. --HG-- branch : feature --- src/libs/vlayout/vlayoutpiece.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp index 372d43870..7d9595a60 100644 --- a/src/libs/vlayout/vlayoutpiece.cpp +++ b/src/libs/vlayout/vlayoutpiece.cpp @@ -206,7 +206,32 @@ bool FindGrainlineGeometry(const VGrainlineData& geom, const VContainer *pattern return false; } - pos = geom.GetPos(); + const quint32 centerPin = geom.CenterPin(); + if (centerPin != NULL_ID) + { + try + { + const auto centerPinPoint = pattern->GeometricObject(centerPin); + + const qreal cLength = ToPixel(length, *pattern->GetPatternUnit()); + QLineF grainline(centerPinPoint->x(), centerPinPoint->y(), + centerPinPoint->x() + cLength / 2.0, centerPinPoint->y()); + + grainline.setAngle(rotationAngle); + grainline = QLineF(grainline.p2(), grainline.p1()); + grainline.setLength(cLength); + + pos = grainline.p2(); + } + catch(const VExceptionBadId &) + { + pos = geom.GetPos(); + } + } + else + { + pos = geom.GetPos(); + } return true; }