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);
|
VSAPoint ekvPoint = VPiecePath::PreparePointEkv(node, data);
|
||||||
if (showMirrorLine && VFuzzyComparePoints(ekvPoint, mirrorLine.p1()))
|
if (showMirrorLine)
|
||||||
{
|
{
|
||||||
ekvPoint.SetSAAfter(0);
|
if (VFuzzyComparePoints(ekvPoint, mirrorLine.p1()))
|
||||||
}
|
{
|
||||||
|
ekvPoint.SetSAAfter(0);
|
||||||
if (showMirrorLine && VFuzzyComparePoints(ekvPoint, mirrorLine.p2()))
|
}
|
||||||
{
|
else if (VFuzzyComparePoints(ekvPoint, mirrorLine.p2()))
|
||||||
ekvPoint.SetSABefore(0);
|
{
|
||||||
|
ekvPoint.SetSABefore(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pointsEkv.append(ekvPoint);
|
pointsEkv.append(ekvPoint);
|
||||||
|
@ -832,7 +834,7 @@ auto VPiece::SeamAllowancePointsWithRotation(const VContainer *data, vsizetype m
|
||||||
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
||||||
|
|
||||||
pointsEkv += VPiecePath::CurveSeamAllowanceSegment(data, unitedPath, curve, i, node.GetReverse(),
|
pointsEkv += VPiecePath::CurveSeamAllowanceSegment(data, unitedPath, curve, i, node.GetReverse(),
|
||||||
width, GetName());
|
width, mirrorLine, GetName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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 QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
||||||
const qreal width = ToPixel(GetSAWidth(), *data->GetPatternUnit());
|
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;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
|
@ -552,7 +552,8 @@ auto VPiecePath::SeamAllowancePoints(const VContainer *data, qreal width, bool r
|
||||||
case (Tool::NodeSplinePath):
|
case (Tool::NodeSplinePath):
|
||||||
{
|
{
|
||||||
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(node.GetId());
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1152,10 +1153,34 @@ auto VPiecePath::PreparePointEkv(const VPieceNode &node, const VContainer *data)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto VPiecePath::CurveSeamAllowanceSegment(const VContainer *data, const QVector<VPieceNode> &nodes,
|
auto VPiecePath::CurveSeamAllowanceSegment(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||||
const QSharedPointer<VAbstractCurve> &curve, vsizetype i, bool reverse,
|
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);
|
VSAPoint begin = StartSegment(data, nodes, i);
|
||||||
const VSAPoint end = EndSegment(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);
|
const QVector<QPointF> points = curve->GetSegmentPoints(begin, end, reverse, piece);
|
||||||
if (points.size() < 2)
|
if (points.size() < 2)
|
||||||
|
|
|
@ -137,7 +137,8 @@ public:
|
||||||
|
|
||||||
static auto CurveSeamAllowanceSegment(const VContainer *data, const QVector<VPieceNode> &nodes,
|
static auto CurveSeamAllowanceSegment(const VContainer *data, const QVector<VPieceNode> &nodes,
|
||||||
const QSharedPointer<VAbstractCurve> &curve, vsizetype i, bool reverse,
|
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;
|
static auto NodeName(const QVector<VPieceNode> &nodes, vsizetype nodeIndex, const VContainer *data) -> QString;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user