Fixed bug in seam allowance with mirror line.
This commit is contained in:
parent
25a8da8259
commit
225cb47f17
|
@ -779,14 +779,16 @@ auto VPiece::SeamAllowancePointsWithRotation(const VContainer *data, vsizetype m
|
|||
{
|
||||
{
|
||||
VSAPoint ekvPoint = VPiecePath::PreparePointEkv(node, data);
|
||||
if (showMirrorLine && VFuzzyComparePoints(ekvPoint, mirrorLine.p1()))
|
||||
if (showMirrorLine)
|
||||
{
|
||||
ekvPoint.SetSAAfter(0);
|
||||
}
|
||||
|
||||
if (showMirrorLine && VFuzzyComparePoints(ekvPoint, mirrorLine.p2()))
|
||||
{
|
||||
ekvPoint.SetSABefore(0);
|
||||
if (VFuzzyComparePoints(ekvPoint, mirrorLine.p1()))
|
||||
{
|
||||
ekvPoint.SetSAAfter(0);
|
||||
}
|
||||
else if (VFuzzyComparePoints(ekvPoint, mirrorLine.p2()))
|
||||
{
|
||||
ekvPoint.SetSABefore(0);
|
||||
}
|
||||
}
|
||||
|
||||
pointsEkv.append(ekvPoint);
|
||||
|
@ -832,7 +834,7 @@ auto VPiece::SeamAllowancePointsWithRotation(const VContainer *data, vsizetype m
|
|||
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
||||
|
||||
pointsEkv += VPiecePath::CurveSeamAllowanceSegment(data, unitedPath, curve, i, node.GetReverse(),
|
||||
width, GetName());
|
||||
width, mirrorLine, GetName());
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1081,7 +1083,8 @@ auto VPiece::GetNodeSAPoints(const QVector<VPieceNode> &path, vsizetype index, c
|
|||
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
||||
const qreal width = ToPixel(GetSAWidth(), *data->GetPatternUnit());
|
||||
|
||||
points += VPiecePath::CurveSeamAllowanceSegment(data, path, curve, index, node.GetReverse(), width, GetName());
|
||||
points += VPiecePath::CurveSeamAllowanceSegment(data, path, curve, index, node.GetReverse(), width, QLineF(),
|
||||
GetName());
|
||||
}
|
||||
return points;
|
||||
}
|
||||
|
|
|
@ -552,7 +552,8 @@ auto VPiecePath::SeamAllowancePoints(const VContainer *data, qreal width, bool r
|
|||
case (Tool::NodeSplinePath):
|
||||
{
|
||||
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
||||
pointsEkv += CurveSeamAllowanceSegment(data, d->m_nodes, curve, i, node.GetReverse(), width, GetName());
|
||||
pointsEkv += CurveSeamAllowanceSegment(data, d->m_nodes, curve, i, node.GetReverse(), width, QLineF(),
|
||||
GetName());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -1152,10 +1153,34 @@ auto VPiecePath::PreparePointEkv(const VPieceNode &node, const VContainer *data)
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto VPiecePath::CurveSeamAllowanceSegment(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||
const QSharedPointer<VAbstractCurve> &curve, vsizetype i, bool reverse,
|
||||
qreal width, const QString &piece) -> QVector<VSAPoint>
|
||||
qreal width, const QLineF &mirrorLine, const QString &piece)
|
||||
-> QVector<VSAPoint>
|
||||
{
|
||||
const VSAPoint begin = StartSegment(data, nodes, i);
|
||||
const VSAPoint end = EndSegment(data, nodes, i);
|
||||
VSAPoint begin = StartSegment(data, nodes, i);
|
||||
if (!mirrorLine.isNull())
|
||||
{
|
||||
if (VFuzzyComparePoints(begin, mirrorLine.p1()))
|
||||
{
|
||||
begin.SetSAAfter(0);
|
||||
}
|
||||
else if (VFuzzyComparePoints(begin, mirrorLine.p2()))
|
||||
{
|
||||
begin.SetSABefore(0);
|
||||
}
|
||||
}
|
||||
|
||||
VSAPoint end = EndSegment(data, nodes, i);
|
||||
if (!mirrorLine.isNull())
|
||||
{
|
||||
if (VFuzzyComparePoints(end, mirrorLine.p1()))
|
||||
{
|
||||
end.SetSAAfter(0);
|
||||
}
|
||||
else if (VFuzzyComparePoints(end, mirrorLine.p2()))
|
||||
{
|
||||
end.SetSABefore(0);
|
||||
}
|
||||
}
|
||||
|
||||
const QVector<QPointF> points = curve->GetSegmentPoints(begin, end, reverse, piece);
|
||||
if (points.size() < 2)
|
||||
|
|
|
@ -137,7 +137,8 @@ public:
|
|||
|
||||
static auto CurveSeamAllowanceSegment(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||
const QSharedPointer<VAbstractCurve> &curve, vsizetype i, bool reverse,
|
||||
qreal width, const QString &piece = QString()) -> QVector<VSAPoint>;
|
||||
qreal width, const QLineF &mirrorLine, const QString &piece = QString())
|
||||
-> QVector<VSAPoint>;
|
||||
|
||||
static auto NodeName(const QVector<VPieceNode> &nodes, vsizetype nodeIndex, const VContainer *data) -> QString;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user