Fixed bug in seam allowance with mirror line.

This commit is contained in:
Roman Telezhynskyi 2024-01-19 18:15:30 +02:00
parent 25a8da8259
commit 225cb47f17
3 changed files with 43 additions and 14 deletions

View file

@ -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;
}

View file

@ -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)

View file

@ -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;