From 38d8342b57f591778ee35a95b8e3696aa7256acf Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 7 Jan 2019 18:20:36 +0200 Subject: [PATCH] Fixed issue #923. Valentina produces wrong seam allowance for rollback case. --HG-- branch : release --- ChangeLog.txt | 1 + src/app/share/collection/bugs/Issue_#923.val | 359 ++ src/app/share/collection/bugs/Issue_#923.vit | 35 + src/libs/vlayout/vabstractpiece.cpp | 214 +- src/libs/vlayout/vabstractpiece.h | 3 +- src/test/ValentinaTest/tst_vabstractpiece.cpp | 4964 ++++++++++++++++- src/test/ValentinaTest/tst_vabstractpiece.h | 36 + 7 files changed, 5585 insertions(+), 27 deletions(-) create mode 100644 src/app/share/collection/bugs/Issue_#923.val create mode 100644 src/app/share/collection/bugs/Issue_#923.vit diff --git a/ChangeLog.txt b/ChangeLog.txt index 472fe06f1..cda9a5aed 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -6,6 +6,7 @@ - [#913] Unable to save changes for piece path if it doesn't contain a point. - [#914] Filtering custom seam allowance paths prevent including more than one. - [#915] Valentina produces wrong seam allowance for acute angle. +- [#923] Valentina produces wrong seam allowance for rollback case. # Version 0.6.1 October 23, 2018 - [#885] Regression. Broken support for multi size measurements. diff --git a/src/app/share/collection/bugs/Issue_#923.val b/src/app/share/collection/bugs/Issue_#923.val new file mode 100644 index 000000000..a1ab36129 --- /dev/null +++ b/src/app/share/collection/bugs/Issue_#923.val @@ -0,0 +1,359 @@ + + + + 0.7.12 + cm + + + Блуза + №14 + + + + + + + + + Issue_#923.vit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
diff --git a/src/app/share/collection/bugs/Issue_#923.vit b/src/app/share/collection/bugs/Issue_#923.vit new file mode 100644 index 000000000..a87bf81ac --- /dev/null +++ b/src/app/share/collection/bugs/Issue_#923.vit @@ -0,0 +1,35 @@ + + + + 0.4.0 + false + + cm + 998 + + + 1800-01-01 + unknown + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp index 307471c8a..589cd4b18 100644 --- a/src/libs/vlayout/vabstractpiece.cpp +++ b/src/libs/vlayout/vabstractpiece.cpp @@ -191,7 +191,8 @@ QVector RollbackSeamAllowance(QVector points, const QLineF &cu QPointF crosPoint; const QLineF::IntersectType type = cuttingEdge.intersect(segment, &crosPoint); if (type != QLineF::NoIntersection - && VGObject::IsPointOnLineSegment(crosPoint, segment.p1(), segment.p2())) + && VGObject::IsPointOnLineSegment(crosPoint, segment.p1(), segment.p2()) + && IsOutsidePoint(cuttingEdge.p2(), cuttingEdge.p1(), crosPoint)) { clipped.append(crosPoint); for (int j=i-1; j>=0; --j) @@ -200,6 +201,7 @@ QVector RollbackSeamAllowance(QVector points, const QLineF &cu } points = VGObject::GetReversePoints(clipped); *success = true; + break; } } @@ -220,8 +222,13 @@ QVector RollbackSeamAllowance(QVector points, const QLineF &cu //--------------------------------------------------------------------------------------------------------------------- QVector AngleByLength(QVector points, QPointF p2, const QLineF &bigLine1, QPointF sp2, - const QLineF &bigLine2, const VSAPoint &p, qreal width) + const QLineF &bigLine2, const VSAPoint &p, qreal width, int *needRollback = nullptr) { + if (needRollback != nullptr) + { + *needRollback = -1; + } + const QPointF sp1 = bigLine1.p1(); const QPointF sp3 = bigLine2.p2(); const qreal localWidth = p.MaxLocalSA(width); @@ -267,6 +274,10 @@ QVector AngleByLength(QVector points, QPointF p2, const QLineF { bool success = false; points = RollbackSeamAllowance(points, bigLine2, &success); + if (needRollback != nullptr) + { + *needRollback = 0; + } } else { @@ -281,7 +292,7 @@ QVector AngleByLength(QVector points, QPointF p2, const QLineF QLineF loop1(sp2, sp1); loop1.setLength(loop1.length()*0.1); - points.append(loop1.p2()); // Nedd for the main path rule + points.append(loop1.p2()); // Need for the main path rule loop1.setAngle(loop1.angle() + 180); loop1.setLength(localWidth); @@ -300,8 +311,13 @@ QVector AngleByLength(QVector points, QPointF p2, const QLineF //--------------------------------------------------------------------------------------------------------------------- QVector AngleByIntersection(const QVector &points, QPointF p1, QPointF p2, QPointF p3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2, - const VSAPoint &p, qreal width) + const VSAPoint &p, qreal width, int *needRollback = nullptr) { + if (needRollback != nullptr) + { + *needRollback = -1; + } + const qreal localWidth = p.MaxLocalSA(width); QVector pointsIntr = points; @@ -315,6 +331,7 @@ QVector AngleByIntersection(const QVector &points, QPointF p1, return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } + bool rollbackFlag = false; if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px)) { if (QLineF(p2, px).length() > localWidth*maxL) @@ -327,6 +344,7 @@ QVector AngleByIntersection(const QVector &points, QPointF p1, {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points bool success = false; pointsIntr = RollbackSeamAllowance(pointsIntr, edge2, &success); + rollbackFlag = true; } // Second point @@ -341,6 +359,11 @@ QVector AngleByIntersection(const QVector &points, QPointF p1, if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px)) { pointsIntr.append(px); + + if (needRollback != nullptr && rollbackFlag) + { + *needRollback = 1; + } } else { @@ -349,6 +372,11 @@ QVector AngleByIntersection(const QVector &points, QPointF p1, allowance.setLength(allowance.length() + localWidth * 3.); pointsIntr.append(allowance.p2()); pointsIntr.append(bigLine2.p2()); + + if (needRollback != nullptr && rollbackFlag) + { + *needRollback = 3; + } } return pointsIntr; @@ -357,8 +385,13 @@ QVector AngleByIntersection(const QVector &points, QPointF p1, //--------------------------------------------------------------------------------------------------------------------- QVector AngleByFirstSymmetry(const QVector &points, QPointF p1, QPointF p2, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2, - const VSAPoint &p, qreal width) + const VSAPoint &p, qreal width, int *needRollback = nullptr) { + if (needRollback != nullptr) + { + *needRollback = -1; + } + const qreal localWidth = p.MaxLocalSA(width); QVector pointsIntr = points; @@ -371,6 +404,7 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } + bool rollbackFlag = false; if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px)) { if (QLineF(p2, px).length() > localWidth*maxL) @@ -383,6 +417,7 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points bool success = false; pointsIntr = RollbackSeamAllowance(pointsIntr, bigLine2, &success); + rollbackFlag = true; } type = sEdge.intersect(bigLine2, &px); @@ -398,6 +433,11 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } pointsIntr.append(px); + + if (needRollback != nullptr && rollbackFlag) + { + *needRollback = 1; + } } else { @@ -405,6 +445,11 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 allowance.setAngle(allowance.angle() + 90); pointsIntr.append(allowance.p2()); pointsIntr.append(bigLine2.p1()); + + if (needRollback != nullptr && rollbackFlag) + { + *needRollback = 2; + } } return pointsIntr; @@ -413,8 +458,13 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 //--------------------------------------------------------------------------------------------------------------------- QVector AngleBySecondSymmetry(const QVector &points, QPointF p2, QPointF p3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2, - const VSAPoint &p, qreal width) + const VSAPoint &p, qreal width, int *needRollback = nullptr) { + if (needRollback != nullptr) + { + *needRollback = -1; + } + const qreal localWidth = p.MaxLocalSA(width); QVector pointsIntr = points; @@ -427,6 +477,7 @@ QVector AngleBySecondSymmetry(const QVector &points, QPointF p return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } + bool rollbackFlag = false; if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px)) { if (QLineF(p2, px).length() > localWidth*maxL) @@ -439,6 +490,7 @@ QVector AngleBySecondSymmetry(const QVector &points, QPointF p {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points bool success = false; pointsIntr = RollbackSeamAllowance(pointsIntr, bigLine2, &success); + rollbackFlag = true; } type = sEdge.intersect(bigLine2, &px); @@ -453,7 +505,16 @@ QVector AngleBySecondSymmetry(const QVector &points, QPointF p { return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } - pointsIntr.append(px); + + if (not rollbackFlag) + { + pointsIntr.append(px); + } + + if (needRollback != nullptr && rollbackFlag) + { + *needRollback = 0; + } } else { @@ -463,6 +524,11 @@ QVector AngleBySecondSymmetry(const QVector &points, QPointF p allowance.setLength(allowance.length() + localWidth * 3.); pointsIntr.append(allowance.p2()); pointsIntr.append(bigLine2.p2()); + + if (needRollback != nullptr && rollbackFlag) + { + *needRollback = 3; + } } return pointsIntr; @@ -517,8 +583,13 @@ QVector AngleByFirstRightAngle(const QVector &points, QPointF //--------------------------------------------------------------------------------------------------------------------- QVector AngleBySecondRightAngle(QVector points, QPointF p2, QPointF p3, const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2, - const VSAPoint &p, qreal width) + const VSAPoint &p, qreal width, int *needRollback = nullptr) { + if (needRollback != nullptr) + { + *needRollback = -1; + } + const qreal localWidth = p.MaxLocalSA(width); QLineF edge(p2, p3); @@ -529,8 +600,6 @@ QVector AngleBySecondRightAngle(QVector points, QPointF p2, QP return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } - - if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px)) { if (QLineF(p2, px).length() > localWidth*maxL) @@ -538,22 +607,39 @@ QVector AngleBySecondRightAngle(QVector points, QPointF p2, QP return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width); } points.append(px); + + QLineF seam(px, p3); + seam.setAngle(seam.angle()+90); + seam.setLength(p.GetSAAfter(width)); + points.append(seam.p2()); } else { // Because artificial loop can lead to wrong clipping we must rollback current seam allowance points bool success = false; + const int countBefore = points.size(); points = RollbackSeamAllowance(points, edge, &success); + if (success) { px = points.last(); } - } - QLineF seam(px, p3); - seam.setAngle(seam.angle()+90); - seam.setLength(p.GetSAAfter(width)); - points.append(seam.p2()); + if (countBefore > 0) + { + QLineF seam(px, p3); + seam.setAngle(seam.angle()+90); + seam.setLength(p.GetSAAfter(width)); + points.append(seam.p2()); + } + else + { + if (needRollback != nullptr) + { + *needRollback = 0; + } + } + } return points; } @@ -886,13 +972,14 @@ QVector VAbstractPiece::Equidistant(QVector points, qreal wid points.append(points.at(0));// Should be always closed } + int needRollback = -1; // no need for rollback QVector ekvPoints; for (qint32 i = 0; i < points.size(); ++i ) { if ( i == 0) {//first point ekvPoints = EkvPoint(ekvPoints, points.at(points.size()-2), points.at(points.size()-1), points.at(1), - points.at(0), width); + points.at(0), width, &needRollback); continue; } @@ -900,7 +987,7 @@ QVector VAbstractPiece::Equidistant(QVector points, qreal wid {//last point if (not ekvPoints.isEmpty()) { - ekvPoints.append(ekvPoints.at(0)); + ekvPoints.append(ekvPoints.first()); } continue; } @@ -908,6 +995,82 @@ QVector VAbstractPiece::Equidistant(QVector points, qreal wid ekvPoints = EkvPoint(ekvPoints, points.at(i-1), points.at(i), points.at(i+1), points.at(i), width); } + if (needRollback != -1) + { + auto Rollback = [&ekvPoints, needRollback](const QLineF &edge) + { + if (not ekvPoints.isEmpty()) + { + ekvPoints.removeLast(); + + QVector head = ekvPoints.mid(0, needRollback); + ekvPoints.remove(0, needRollback); + + bool success = false; + ekvPoints = RollbackSeamAllowance(ekvPoints, edge, &success); + + ekvPoints = head + ekvPoints; + + if (not ekvPoints.isEmpty()) + { + ekvPoints.append(ekvPoints.first()); + } + } + }; + + QT_WARNING_PUSH + QT_WARNING_DISABLE_GCC("-Wswitch-default") + // This check helps to find missed angle types in the switch + Q_STATIC_ASSERT_X(static_cast(PieceNodeAngle::LAST_ONE_DO_NOT_USE) == 7, "Not all types were handled."); + switch (points.last().GetAngleType()) + { + case PieceNodeAngle::LAST_ONE_DO_NOT_USE: + case PieceNodeAngle::ByFirstEdgeRightAngle: + Q_UNREACHABLE(); //-V501 + break; + case PieceNodeAngle::ByLength: + case PieceNodeAngle::ByLengthCurve: + case PieceNodeAngle::ByFirstEdgeSymmetry: + case PieceNodeAngle::BySecondEdgeSymmetry: + Rollback(ParallelLine(points.at(0), points.at(1), width)); + break; + case PieceNodeAngle::ByPointsIntersection: + Rollback(QLineF(points.last(), points.at(1))); + break; + case PieceNodeAngle::BySecondEdgeRightAngle: + if (not ekvPoints.isEmpty()) + { + const QLineF edge(points.last(), points.at(1)); + const QLineF bigLine1 = ParallelLine(points.at(points.size()-2), points.at(0), width); + + QPointF px; + edge.intersect(bigLine1, &px); + + ekvPoints.removeLast(); + + bool success = false; + ekvPoints = RollbackSeamAllowance(ekvPoints, edge, &success); + + if (success) + { + px = ekvPoints.last(); + } + + QLineF seam(px, points.at(1)); + seam.setAngle(seam.angle()+90); + seam.setLength(points.at(0).GetSAAfter(width)); + ekvPoints.append(seam.p2()); + + if (not ekvPoints.isEmpty()) + { + ekvPoints.append(ekvPoints.first()); + } + } + break; + } + QT_WARNING_POP + } + const bool removeFirstAndLast = false; ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops @@ -1099,7 +1262,7 @@ QVector VAbstractPiece::CheckLoops(const QVector &points) * @return seam aloowance points. */ QVector VAbstractPiece::EkvPoint(QVector points, const VSAPoint &p1Line1, VSAPoint p2Line1, - const VSAPoint &p1Line2, VSAPoint p2Line2, qreal width) + const VSAPoint &p1Line2, VSAPoint p2Line2, qreal width, int *needRollback) { if (width < 0) { // width can't be < 0 @@ -1164,8 +1327,8 @@ QVector VAbstractPiece::EkvPoint(QVector points, const VSAPoin const qreal angle = AngleBetweenBisectors(b1, b2); // Comparison bisector angles helps to find direction - if (angle < 90 - || VFuzzyComparePossibleNulls(angle, 90.0))// Go in a same direction + if (angle < 135 + || VFuzzyComparePossibleNulls(angle, 135.0))// Go in a same direction {//Regular equdistant case QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wswitch-default") @@ -1179,22 +1342,23 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") break; case PieceNodeAngle::ByLength: case PieceNodeAngle::ByLengthCurve: - return AngleByLength(points, p2Line1, bigLine1, crosPoint, bigLine2, p2Line1, width); + return AngleByLength(points, p2Line1, bigLine1, crosPoint, bigLine2, p2Line1, width, + needRollback); case PieceNodeAngle::ByPointsIntersection: return AngleByIntersection(points, p1Line1, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2, - p2Line1, width); + p2Line1, width, needRollback); case PieceNodeAngle::ByFirstEdgeSymmetry: return AngleByFirstSymmetry(points, p1Line1, p2Line1, bigLine1, crosPoint, bigLine2, - p2Line1, width); + p2Line1, width, needRollback); case PieceNodeAngle::BySecondEdgeSymmetry: return AngleBySecondSymmetry(points, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2, - p2Line1, width); + p2Line1, width, needRollback); case PieceNodeAngle::ByFirstEdgeRightAngle: return AngleByFirstRightAngle(points, p1Line1, p2Line1, bigLine1, crosPoint, bigLine2, p2Line1, width); case PieceNodeAngle::BySecondEdgeRightAngle: return AngleBySecondRightAngle(points, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2, - p2Line1, width); + p2Line1, width, needRollback); } QT_WARNING_POP } diff --git a/src/libs/vlayout/vabstractpiece.h b/src/libs/vlayout/vabstractpiece.h index 2c357041b..26950b801 100644 --- a/src/libs/vlayout/vabstractpiece.h +++ b/src/libs/vlayout/vabstractpiece.h @@ -187,7 +187,8 @@ public: static qreal SumTrapezoids(const QVector &points); static QVector CheckLoops(const QVector &points); static QVector EkvPoint(QVector points, const VSAPoint &p1Line1, VSAPoint p2Line1, - const VSAPoint &p1Line2, VSAPoint p2Line2, qreal width); + const VSAPoint &p1Line2, VSAPoint p2Line2, qreal width, + int *needRollback = nullptr); static QLineF ParallelLine(const VSAPoint &p1, const VSAPoint &p2, qreal width); template diff --git a/src/test/ValentinaTest/tst_vabstractpiece.cpp b/src/test/ValentinaTest/tst_vabstractpiece.cpp index e1a2fa86e..22d981559 100644 --- a/src/test/ValentinaTest/tst_vabstractpiece.cpp +++ b/src/test/ValentinaTest/tst_vabstractpiece.cpp @@ -125,6 +125,66 @@ void TST_VAbstractPiece::EquidistantRemoveLoop_data() QTest::newRow("Issue 646.") << InputPointsIssue646() << 37.795275590551185 // seam allowance width (1.0 cm) << OutputPointsIssue646(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 1") << InputPointsIssue923Test1() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test1(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 2") << InputPointsIssue923Test2() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test2(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 3") << InputPointsIssue923Test3() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test3(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 4") << InputPointsIssue923Test4() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test4(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 5") << InputPointsIssue923Test5() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test5(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 6") << InputPointsIssue923Test6() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test6(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 1.1") << InputPointsIssue923Test1_1() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test1_1(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 2.2") << InputPointsIssue923Test2_2() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test2_2(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 3.3") << InputPointsIssue923Test3_3() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test3_3(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 4.4") << InputPointsIssue923Test4_4() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test4_4(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 5.5") << InputPointsIssue923Test5_5() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test5_5(); + + // See file src/app/share/collection/bugs/Issue_#923.val + QTest::newRow("Issue 923. Test 6.6") << InputPointsIssue923Test6_6() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue923Test6_6(); } //--------------------------------------------------------------------------------------------------------------------- @@ -1379,7 +1439,6 @@ QVector TST_VAbstractPiece::OutputPointsSeamTest1PieceBySecondEdgeSymme points += QPointF(257.767987517066160, -51.011647735560771); points += QPointF(273.528559017665714, -60.623983162339158); points += QPointF(284.944912181261145, -68.750463215889098); - points += QPointF(286.890081707470131, -68.482082508404147); points += QPointF(556.951317720606994, -31.220946854728947); points += QPointF(539.610114105118896, 79.891315777781244); points += QPointF(585.916731584533181, -20.702420721823501); @@ -6497,3 +6556,4906 @@ QVector TST_VAbstractPiece::OutputPointsIssue646() const return points; } + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test1() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test1() +{ + QVector points; + + points += QPointF(-814.714960629921279, -46.738127408018386); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-814.714960629921279, 372.254255263452592); + points += QPointF(-814.714960629921279, -46.738127408018386); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test2() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::ByPointsIntersection); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::ByPointsIntersection); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test2() +{ + QVector points; + + points += QPointF(-814.714960629921279, 331.313196850393751); + points += QPointF(-814.714960629921279, -46.738127408018386); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-814.714960629921279, 372.254255263452592); + points += QPointF(-814.714960629921279, 331.313196850393751); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test3() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test3() +{ + QVector points; + + points += QPointF(-844.490345580522785, 355.767273366986956); + points += QPointF(-814.714960629921279, 331.313196850393751); + points += QPointF(-814.714960629921279, -46.738127408018386); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-818.092955780502393, 371.279575916538420); + points += QPointF(-823.692975528084730, 369.271805550997954); + points += QPointF(-829.575336882823422, 366.626948794191208); + points += QPointF(-835.815139714856855, 362.892089667033019); + points += QPointF(-844.490345580522785, 355.767273366986956); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test4() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test4() +{ + QVector points; + + points += QPointF(-814.714960629921279, -46.738127408018386); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-814.714960629921279, 372.254255263452592); + points += QPointF(-814.714960629921279, -46.738127408018386); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test5() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeRightAngle); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeRightAngle); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test5() +{ + QVector points; + + points += QPointF(-838.702607797801647, 360.520655492237381); + points += QPointF(-814.714960629921279, 331.313196850393751); + points += QPointF(-814.714960629921279, -46.738127408018386); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-818.092955780502393, 371.279575916538420); + points += QPointF(-823.692975528084730, 369.271805550997954); + points += QPointF(-829.575336882823422, 366.626948794191208); + points += QPointF(-835.815139714856855, 362.892089667033019); + points += QPointF(-838.702607797801647, 360.520655492237381); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test6() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::BySecondEdgeRightAngle); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(0); + p.SetAngleType(PieceNodeAngle::BySecondEdgeRightAngle); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test6() +{ + QVector points; + + points += QPointF(-814.714960629921279, -46.738127408018386); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-814.714960629921279, 372.254255263452592); + points += QPointF(-814.714960629921279, -46.738127408018386); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test1_1() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test1_1() +{ + QVector points; + + points += QPointF(-941.393414608898865, 276.182237988132670); + points += QPointF(-814.172528355339296, -10.064756082376469); + points += QPointF(-797.048974584331063, -48.592752067144829); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-818.092955780502393, 371.279575916538420); + points += QPointF(-823.692975528084730, 369.271805550997954); + points += QPointF(-829.575336882823422, 366.626948794191208); + points += QPointF(-835.815139714856855, 362.892089667033019); + points += QPointF(-941.393414608898865, 276.182237988132670); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test2_2() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByPointsIntersection); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByPointsIntersection); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test2_2() +{ + QVector points; + + points += QPointF(-925.469085441364086, 240.352497361179360); + points += QPointF(-814.172528355339296, -10.064756082376469); + points += QPointF(-797.048974584331063, -48.592752067144829); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-814.714960629921279, 372.254255263452592); + points += QPointF(-925.469085441364086, 240.352497361179360); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test3_3() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test3_3() +{ + QVector points; + + points += QPointF(-998.323622337918891, 229.426313313416387); + points += QPointF(-925.469085441362722, 240.352497361176461); + points += QPointF(-814.172528355339296, -10.064756082376469); + points += QPointF(-797.048974584331063, -48.592752067144829); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-818.092955780502393, 371.279575916538420); + points += QPointF(-823.692975528084730, 369.271805550997954); + points += QPointF(-829.575336882823422, 366.626948794191208); + points += QPointF(-835.815139714856855, 362.892089667033019); + points += QPointF(-998.323622337918891, 229.426313313416387); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test4_4() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test4_4() +{ + QVector points; + + points += QPointF(-814.172528355339296, -10.064756082376469); + points += QPointF(-797.048974584331063, -48.592752067144829); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-818.092955780502393, 371.279575916538420); + points += QPointF(-823.692975528084730, 369.271805550997954); + points += QPointF(-829.575336882823422, 366.626948794191208); + points += QPointF(-835.815139714856855, 362.892089667033019); + points += QPointF(-949.648673098827885, 294.756569590472964); + points += QPointF(-814.172528355339296, -10.064756082376469); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test5_5() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeRightAngle); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeRightAngle); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test5_5() +{ + QVector points; + + points += QPointF(-949.456732609244455, 269.559956003021910); + points += QPointF(-925.469085441364086, 240.352497361179360); + points += QPointF(-814.172528355339296, -10.064756082376469); + points += QPointF(-797.048974584331063, -48.592752067144829); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-818.092955780502393, 371.279575916538420); + points += QPointF(-823.692975528084730, 369.271805550997954); + points += QPointF(-829.575336882823422, 366.626948794191208); + points += QPointF(-835.815139714856855, 362.892089667033019); + points += QPointF(-949.456732609244455, 269.559956003021910); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue923Test6_6() +{ + QVector points; + + VSAPoint p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeRightAngle); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-814.714960629921279, -8.844283464566928); + p.SetSABefore(0); + p.SetSAAfter(37.7953); + points += p; + + p = VSAPoint(-810.914791391285917, -9.118915311803084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-773.697565712941014, -13.057776517652679); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-731.369396039071717, -19.564193239769612); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.813861852517789, -25.693917945236084); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-670.539289284542633, -33.532046871057645); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-649.425406024800168, -40.690709434256448); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-636.497248173983621, -46.041845587202857); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-630.550935626324190, -48.932226964906654); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-612.770937464562508, -58.178811938993192); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-595.504209442756292, -69.042252656202692); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-590.462992125984215, -72.529322834645669); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + points += VSAPoint(-231.118006951984967, 95.879158575193841); + + p = VSAPoint(-238.402815433872661, 116.441912166387880); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-251.054901827475362, 155.855307076335350); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-261.519858253217421, 193.398201754121601); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-269.924247729261879, 229.275078971710684); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-276.394633273771547, 263.690421501066567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-281.057577904909294, 296.848712114153273); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-284.039644640838333, 328.954433582934655); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + points += VSAPoint(-284.147385597229004, 331.313196850393751); + + p = VSAPoint(-285.555799865587915, 332.073678193884462); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-288.834524762284673, 333.546028373225568); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-292.651017475591800, 334.960499310104979); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-296.986935988437835, 336.317597411974702); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-304.365417624891165, 338.253791617484694); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-315.933705242960059, 340.629827700589658); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-329.249539751899079, 342.785487777791332); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-344.166185015137103, 344.724823108705550); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-360.536904896102669, 346.451884952948035); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-378.214963258224429, 347.970724570134507); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-397.053623964930921, 349.285393219880916); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-416.906150879651022, 350.399942161802983); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-437.625807865813101, 351.318422655516372); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-459.065858786846093, 352.044885960637032); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-481.079567506178364, 352.583383336780628); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-503.520197887238680, 352.937966043563051); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-526.241013793455750, 353.112685340600024); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-549.095279088258053, 353.111592487507210); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-571.936257635074298, 352.938738743900558); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-594.617213297333365, 352.598175369395790); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-616.991409938463448, 352.093953623608741); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-638.912111421893314, 351.430124766155018); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-660.232581611051955, 350.610740056650570); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-680.806084369367682, 349.639850754711119); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-700.485883560269031, 348.521508119952557); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-719.125243047185108, 347.259763411990377); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-736.577426693544112, 345.858667890440699); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-752.695698362774920, 344.322272814919074); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-767.333321918305955, 342.654629445041451); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-780.343561223566212, 340.859789040423379); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-791.579680141983886, 338.941802860680923); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-800.894942536987969, 336.904722165429632); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-806.464504883768996, 335.297692803701807); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-809.543928560675113, 334.193629625334438); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-812.060599029906371, 333.062071651623739); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-813.996174274391478, 331.903525290021662); + p.SetSABefore(37.7953); + p.SetSAAfter(37.7953); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(-814.714960629921279, 331.313196850393751); + p.SetSABefore(37.7953); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeRightAngle); + points += p; + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue923Test6_6() +{ + QVector points; + + points += QPointF(-814.172528355339296, -10.064756082376469); + points += QPointF(-797.048974584331063, -48.592752067144829); + points += QPointF(-778.560274683193597, -50.549491761193529); + points += QPointF(-737.960891197081651, -56.790170478391879); + points += QPointF(-709.273784936183347, -62.545071142283753); + points += QPointF(-681.358329676571884, -69.772421317304676); + points += QPointF(-662.734996979773655, -76.086662659765864); + points += QPointF(-652.000013358218780, -80.530014885308333); + points += QPointF(-647.534742107878174, -82.700492263504771); + points += QPointF(-631.585239468780856, -90.995118061836052); + points += QPointF(-616.328020233970847, -100.594267156991847); + points += QPointF(-594.096383910663576, -115.972155307751649); + points += QPointF(-184.048650148745537, 76.198374399107223); + points += QPointF(-202.588712626694274, 128.531217087733864); + points += QPointF(-214.844352980142077, 166.709615345349164); + points += QPointF(-224.900721916665105, 202.786707734969326); + points += QPointF(-232.934347140993879, 237.080856834901624); + points += QPointF(-239.089037151700012, 269.817045957384835); + points += QPointF(-243.506611386394923, 301.230502874877175); + points += QPointF(-246.324245680472586, 331.565901059170528); + points += QPointF(-247.367542640672326, 354.406709505752815); + points += QPointF(-268.813396242720216, 365.986520876589054); + points += QPointF(-274.509592479190928, 368.544465142904016); + points += QPointF(-280.430827138279028, 370.738996867416517); + points += QPointF(-286.539948778692178, 372.651089393540587); + points += QPointF(-295.760523769485246, 375.070669023642552); + points += QPointF(-309.108660665237892, 377.812272271559323); + points += QPointF(-323.791841306461833, 380.189287868544909); + points += QPointF(-339.746492379944868, 382.263575885265993); + points += QPointF(-356.936262185776172, 384.077045039880318); + points += QPointF(-375.281527662442841, 385.653208859628023); + points += QPointF(-394.678657394273387, 387.006850647147644); + points += QPointF(-414.787606696514558, 388.135795504608552); + points += QPointF(-435.952026976937020, 389.076617984501581); + points += QPointF(-457.785958239726995, 389.818484035948188); + points += QPointF(-480.155299343825106, 390.367355935354340); + points += QPointF(-502.923072127811622, 390.728524359010180); + points += QPointF(-525.950383000425973, 390.906843496429246); + points += QPointF(-549.097086395700558, 390.906868034847378); + points += QPointF(-572.222272868468281, 390.732932110765603); + points += QPointF(-595.184660101380132, 390.389190982770685); + points += QPointF(-617.842942744172888, 389.879635420374768); + points += QPointF(-640.056148626075128, 389.208081776045162); + points += QPointF(-661.684051740050222, 388.378134611085102); + points += QPointF(-682.587707903001387, 387.393111203977753); + points += QPointF(-702.630213610816895, 386.255904969512756); + points += QPointF(-721.913933492959586, 384.952760768153212); + points += QPointF(-739.883081019170959, 383.510162372720174); + points += QPointF(-756.628370632600195, 381.913999891517676); + points += QPointF(-772.055707410166860, 380.156385631636169); + points += QPointF(-786.107417616341536, 378.217868080938274); + points += QPointF(-798.800506212061464, 376.051179682426266); + points += QPointF(-810.181063245406790, 373.562456117723798); + points += QPointF(-814.714960629921279, 372.254255263452592); + points += QPointF(-965.896062992125962, 372.254255263452592); + points += QPointF(-814.172528355339296, -10.064756082376469); + + return points; +} diff --git a/src/test/ValentinaTest/tst_vabstractpiece.h b/src/test/ValentinaTest/tst_vabstractpiece.h index 16c7a5531..163643aa3 100644 --- a/src/test/ValentinaTest/tst_vabstractpiece.h +++ b/src/test/ValentinaTest/tst_vabstractpiece.h @@ -125,6 +125,42 @@ private: QVector InputPointsIssue646() const; QVector OutputPointsIssue646() const; + + QVector InputPointsIssue923Test1(); + QVector OutputPointsIssue923Test1(); + + QVector InputPointsIssue923Test2(); + QVector OutputPointsIssue923Test2(); + + QVector InputPointsIssue923Test3(); + QVector OutputPointsIssue923Test3(); + + QVector InputPointsIssue923Test4(); + QVector OutputPointsIssue923Test4(); + + QVector InputPointsIssue923Test5(); + QVector OutputPointsIssue923Test5(); + + QVector InputPointsIssue923Test6(); + QVector OutputPointsIssue923Test6(); + + QVector InputPointsIssue923Test1_1(); + QVector OutputPointsIssue923Test1_1(); + + QVector InputPointsIssue923Test2_2(); + QVector OutputPointsIssue923Test2_2(); + + QVector InputPointsIssue923Test3_3(); + QVector OutputPointsIssue923Test3_3(); + + QVector InputPointsIssue923Test4_4(); + QVector OutputPointsIssue923Test4_4(); + + QVector InputPointsIssue923Test5_5(); + QVector OutputPointsIssue923Test5_5(); + + QVector InputPointsIssue923Test6_6(); + QVector OutputPointsIssue923Test6_6(); }; #endif // TST_VABSTRACTPIECE_H