From 883d2c04f6ab9b26608929f8039ca6b4e711f2ec Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 13 Feb 2019 16:32:38 +0200 Subject: [PATCH] Resolved issue #937. Wrong symmetrical seam corners on pieces. (grafted from 8c1b09cc7bc40d6d40e39d931d3e040b0323bd87) --HG-- branch : develop --- src/app/share/collection/bugs/Issue_#937.val | 21 ++ src/libs/vlayout/vabstractpiece.cpp | 104 +++-- src/test/ValentinaTest/tst_vabstractpiece.cpp | 354 ++++++++++++++++-- src/test/ValentinaTest/tst_vabstractpiece.h | 15 +- src/test/ValentinaTest/tst_vpiece.cpp | 12 +- 5 files changed, 404 insertions(+), 102 deletions(-) diff --git a/src/app/share/collection/bugs/Issue_#937.val b/src/app/share/collection/bugs/Issue_#937.val index 71b53bc9e..ab4d23f1a 100644 --- a/src/app/share/collection/bugs/Issue_#937.val +++ b/src/app/share/collection/bugs/Issue_#937.val @@ -24,6 +24,13 @@ + + + + + + +
@@ -37,6 +44,20 @@ + + + + + + + + + + + + + +
diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp index b9e425ff7..1338a61a2 100644 --- a/src/libs/vlayout/vabstractpiece.cpp +++ b/src/libs/vlayout/vabstractpiece.cpp @@ -351,7 +351,9 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 *needRollback = false; } - QLineF sEdge(VPointF::FlipPF(bigLine2, p1), VPointF::FlipPF(bigLine2, p2)); + const QLineF axis = QLineF(p1, p2); + + QLineF sEdge(VPointF::FlipPF(axis, bigLine2.p1()), VPointF::FlipPF(axis, bigLine2.p2())); QPointF px1; QLineF::IntersectType type = sEdge.intersect(bigLine1, &px1); @@ -369,38 +371,31 @@ QVector AngleByFirstSymmetry(const QVector &points, QPointF p1 QVector pointsIntr = points; - if (IsOutsidePoint(sp2, bigLine1.p1(), px1) && IsOutsidePoint(sp2, bigLine2.p2(), px2)) + if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1)) { - if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1)) - { - pointsIntr.append(px1); - } - else - {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points - bool success = false; - pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, sEdge, &success); + pointsIntr.append(px1); + } + else + {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points + bool success = false; + pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, sEdge, &success); - if (needRollback != nullptr) - { - *needRollback = true; - } + if (needRollback != nullptr) + { + *needRollback = true; } + } - if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2)) - { - pointsIntr.append(px2); - } - else - { - QLineF allowance(px2, p2); - allowance.setAngle(allowance.angle() + 90); - pointsIntr.append(allowance.p2()); - pointsIntr.append(bigLine2.p1()); - } + if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2)) + { + pointsIntr.append(px2); } else { - return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback); + QLineF allowance(px2, p2); + allowance.setAngle(allowance.angle() + 90); + pointsIntr.append(allowance.p2()); + pointsIntr.append(bigLine2.p1()); } return pointsIntr; @@ -416,7 +411,9 @@ QVector AngleBySecondSymmetry(const QVector &points, QPointF p *needRollback = false; } - QLineF sEdge(VPointF::FlipPF(bigLine1, p2), VPointF::FlipPF(bigLine1, p3)); + const QLineF axis = QLineF(p3, p2); + + QLineF sEdge(VPointF::FlipPF(axis, bigLine1.p1()), VPointF::FlipPF(axis, bigLine1.p2())); QPointF px1; QLineF::IntersectType type = sEdge.intersect(bigLine1, &px1); @@ -435,45 +432,38 @@ QVector AngleBySecondSymmetry(const QVector &points, QPointF p const qreal localWidth = p.MaxLocalSA(width); QVector pointsIntr = points; - if (IsOutsidePoint(sp2, bigLine1.p1(), px1) && IsOutsidePoint(sp2, bigLine2.p2(), px2)) + bool rollbackFlag = false; + if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1)) { - bool rollbackFlag = false; - if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1)) - { - pointsIntr.append(px1); - } - else - {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points - bool success = false; - pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, sEdge, &success); - rollbackFlag = true; + pointsIntr.append(px1); + } + else + {// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points + bool success = false; + pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, sEdge, &success); + rollbackFlag = true; - if (needRollback != nullptr) - { - *needRollback = true; - } + if (needRollback != nullptr) + { + *needRollback = true; } + } - if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2)) + if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2)) + { + if (not rollbackFlag) { - if (not rollbackFlag) - { - pointsIntr.append(px2); - } - } - else - { - QLineF allowance(p2, px2); - allowance.setLength(p.GetSAAfter(width)*0.98); - pointsIntr.append(allowance.p2()); - allowance.setLength(allowance.length() + localWidth * 3.); - pointsIntr.append(allowance.p2()); - pointsIntr.append(bigLine2.p2()); + pointsIntr.append(px2); } } else { - return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback); + QLineF allowance(p2, px2); + allowance.setLength(p.GetSAAfter(width)*0.98); + pointsIntr.append(allowance.p2()); + allowance.setLength(allowance.length() + localWidth * 3.); + pointsIntr.append(allowance.p2()); + pointsIntr.append(bigLine2.p2()); } return pointsIntr; diff --git a/src/test/ValentinaTest/tst_vabstractpiece.cpp b/src/test/ValentinaTest/tst_vabstractpiece.cpp index eda7f48db..1f86581a9 100644 --- a/src/test/ValentinaTest/tst_vabstractpiece.cpp +++ b/src/test/ValentinaTest/tst_vabstractpiece.cpp @@ -1116,7 +1116,7 @@ QVector TST_VAbstractPiece::OutputPointsSeamTest1PieceByFirstEdgeSymmer points += QPointF(273.528559017665714, -60.623983162339158); points += QPointF(288.203122586733002, -71.069748673417564); points += QPointF(301.895059431859636, -82.523535465339663); - points += QPointF(315.271637053855784, -95.419626997109560); + points += QPointF(330.086658189795969, -109.702493213952863); points += QPointF(334.913131416867600, -61.856202407499907); points += QPointF(556.951317720606994, -31.220946854728947); points += QPointF(539.610114105118896, 79.891315777781244); @@ -1438,7 +1438,7 @@ QVector TST_VAbstractPiece::OutputPointsSeamTest1PieceBySecondEdgeSymme points += QPointF(241.050346988465208, -42.238453507357690); points += QPointF(257.767987517066160, -51.011647735560771); points += QPointF(273.528559017665714, -60.623983162339158); - points += QPointF(284.944912181261145, -68.750463215889098); + points += QPointF(286.074909490746791, -69.554826961869111); points += QPointF(556.951317720606994, -31.220946854728947); points += QPointF(539.610114105118896, 79.891315777781244); points += QPointF(585.916731584533181, -20.702420721823501); @@ -5007,20 +5007,25 @@ void TST_VAbstractPiece::EquidistantAngleType_data() const QTest::newRow("Issue #880. Piece: Detail_1.") << InputPointsIssue880_Piece_Detail_1() << 75.59055118110237 << OutputPointsIssue880_Piece_Detail_1(); - // See file src/app/share/collection/bugs/Issue_#934.val - QTest::newRow("Issue 934. Case1") << InputPointsIssue934Case1() + // See file src/app/share/collection/bugs/Issue_#937.val + QTest::newRow("Issue 937. Case1") << InputPointsIssue937Case1() << 37.795275590551185 // seam allowance width (1.0 cm) - << OutputPointsIssue934Case1(); + << OutputPointsIssue937Case1(); - // See file src/app/share/collection/bugs/Issue_#934.val - QTest::newRow("Issue 934. Case2") << InputPointsIssue934Case2() + // See file src/app/share/collection/bugs/Issue_#937.val + QTest::newRow("Issue 937. Case2") << InputPointsIssue937Case2() << 37.795275590551185 // seam allowance width (1.0 cm) - << OutputPointsIssue934Case2(); + << OutputPointsIssue937Case2(); - // See file src/app/share/collection/bugs/Issue_#934.val - QTest::newRow("Issue 934. Case3") << InputPointsIssue934Case3() + // See file src/app/share/collection/bugs/Issue_#937.val + QTest::newRow("Issue 937. Case3") << InputPointsIssue937Case3() << 37.795275590551185 // seam allowance width (1.0 cm) - << OutputPointsIssue934Case3(); + << OutputPointsIssue937Case3(); + + // See file src/app/share/collection/bugs/Issue_#937.val + QTest::newRow("Issue 937. Case4") << InputPointsIssue937Case4() + << 37.795275590551185 // seam allowance width (1.0 cm) + << OutputPointsIssue937Case4(); } //--------------------------------------------------------------------------------------------------------------------- @@ -7731,7 +7736,7 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test3() { QVector points; - points += QPointF(-844.490345580522785, 355.767273366986956); + points += QPointF(-862.690254965683266, 340.819961100893522); points += QPointF(-814.714960629921279, 331.313196850393751); points += QPointF(-814.714960629921279, -46.738127408018386); points += QPointF(-778.560274683193597, -50.549491761193529); @@ -7789,7 +7794,7 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test3() points += QPointF(-823.692975528084730, 369.271805550997954); points += QPointF(-829.575336882823422, 366.626948794191208); points += QPointF(-835.815139714856855, 362.892089667033019); - points += QPointF(-844.490345580522785, 355.767273366986956); + points += QPointF(-862.690254965683266, 340.819961100893522); return points; } @@ -10180,7 +10185,8 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test3_3() { QVector points; - points += QPointF(-941.393414608898865, 276.182237988132670); + points += QPointF(-957.520050609591181, 262.937674017912286); + points += QPointF(-925.469085441364086, 240.352497361179502); points += QPointF(-814.172528355339296, -10.064756082376469); points += QPointF(-797.048974584331063, -48.592752067144829); points += QPointF(-778.560274683193597, -50.549491761193529); @@ -10238,7 +10244,7 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test3_3() points += QPointF(-823.692975528084730, 369.271805550997954); points += QPointF(-829.575336882823422, 366.626948794191208); points += QPointF(-835.815139714856855, 362.892089667033019); - points += QPointF(-941.393414608898865, 276.182237988132670); + points += QPointF(-957.520050609591181, 262.937674017912286); return points; } @@ -10591,7 +10597,6 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test4_4() { 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); @@ -10649,7 +10654,8 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test4_4() points += QPointF(-823.692975528084730, 369.271805550997954); points += QPointF(-829.575336882823422, 366.626948794191208); points += QPointF(-835.815139714856855, 362.892089667033019); - points += QPointF(-941.393414608898865, 276.182237988132670); + points += QPointF(-949.648673098827885, 294.756569590472964); + points += QPointF(-814.172528355339296, -10.064756082376469); return points; } @@ -11475,7 +11481,7 @@ QVector TST_VAbstractPiece::OutputPointsIssue923Test6_6() } //--------------------------------------------------------------------------------------------------------------------- -QVector TST_VAbstractPiece::InputPointsIssue934Case1() const +QVector TST_VAbstractPiece::InputPointsIssue937Case1() const { QVector points; @@ -11496,21 +11502,23 @@ QVector TST_VAbstractPiece::InputPointsIssue934Case1() const } //--------------------------------------------------------------------------------------------------------------------- -QVector TST_VAbstractPiece::OutputPointsIssue934Case1() const +QVector TST_VAbstractPiece::OutputPointsIssue937Case1() const { QVector points; points += QPointF(-17.032721988884830, -1.235810543606590); points += QPointF(835.348863103112194, 59.385174553028691); - points += QPointF(593.158150600486692, 781.499251666420946); - points += QPointF(141.710194441569911, 773.264518919985676); + points += QPointF(643.563032046223725, 631.212421626215360); + points += QPointF(688.453528504066298, 783.237507335320970); + points += QPointF(73.980221969375577, 772.029075909062840); + points += QPointF(110.602400699420087, 621.490839539868603); points += QPointF(-17.032721988884830, -1.235810543606590); return points; } //--------------------------------------------------------------------------------------------------------------------- -QVector TST_VAbstractPiece::InputPointsIssue934Case2() const +QVector TST_VAbstractPiece::InputPointsIssue937Case2() const { QVector points; @@ -11531,23 +11539,23 @@ QVector TST_VAbstractPiece::InputPointsIssue934Case2() const } //--------------------------------------------------------------------------------------------------------------------- -QVector TST_VAbstractPiece::OutputPointsIssue934Case2() const +QVector TST_VAbstractPiece::OutputPointsIssue937Case2() const { QVector points; points += QPointF(1107.034334293208985, -39.429607754508027); points += QPointF(1657.820450488061852, -7.198852132733364); - points += QPointF(1746.889006868886554, 443.414436116223328); - points += QPointF(1282.672343168622319, 613.165002913536910); - points += QPointF(1117.870570870988558, 619.714983640807873); - points += QPointF(937.748317798697030, 475.573410168327655); + points += QPointF(1746.889006868886327, 443.414436116222419); + points += QPointF(1729.223740724144136, 595.416995674621376); + points += QPointF(1000.148236459051077, 624.393810881663740); + points += QPointF(937.748317798696917, 475.573410168327996); points += QPointF(1107.034334293208985, -39.429607754508027); return points; } //--------------------------------------------------------------------------------------------------------------------- -QVector TST_VAbstractPiece::InputPointsIssue934Case3() const +QVector TST_VAbstractPiece::InputPointsIssue937Case3() const { QVector points; @@ -11739,7 +11747,7 @@ QVector TST_VAbstractPiece::InputPointsIssue934Case3() const } //--------------------------------------------------------------------------------------------------------------------- -QVector TST_VAbstractPiece::OutputPointsIssue934Case3() const +QVector TST_VAbstractPiece::OutputPointsIssue937Case3() const { QVector points; @@ -11753,16 +11761,24 @@ QVector TST_VAbstractPiece::OutputPointsIssue934Case3() const points += QPointF(1706.013423451030349, 307.229014708540717); points += QPointF(1719.842343091969724, 355.269667089451730); points += QPointF(1735.830074328750925, 406.352691903936886); - points += QPointF(1745.972128474848887, 437.435445733357710); - points += QPointF(1575.039217266384640, 508.928892866275987); - points += QPointF(1302.519921954974052, 639.444186565335031); + points += QPointF(1745.972128474848660, 437.435445733357255); + points += QPointF(1758.341772942237640, 589.153524481990871); + points += QPointF(1704.460967178960573, 599.982263568295707); + points += QPointF(1627.185999041022114, 612.734124474861687); + points += QPointF(1562.310551416402404, 621.203930457757906); + points += QPointF(1516.471248721796655, 626.237329974753152); + points += QPointF(1468.977621912049472, 630.619576913233686); + points += QPointF(1419.787864301955324, 634.292326402446633); + points += QPointF(1369.087082921324964, 637.170038051159622); + points += QPointF(1317.062578165990772, 639.164761306646824); points += QPointF(1263.902550577329066, 640.186187808469754); points += QPointF(1209.795108673992672, 640.141506710349972); points += QPointF(1154.927472101428293, 638.935083369183076); points += QPointF(1099.485310435284873, 636.467959223881508); points += QPointF(1043.652191269731475, 632.637154196705978); points += QPointF(987.972975362633747, 627.369163402013896); - points += QPointF(940.434492417377328, 469.533961825903646); + points += QPointF(933.137693238166889, 620.902235679736577); + points += QPointF(940.434492417377555, 469.533961825902566); points += QPointF(947.446497080812378, 432.396369275163750); points += QPointF(961.574442359626801, 366.381027352609578); points += QPointF(977.219989780144260, 303.422612688453626); @@ -11775,3 +11791,275 @@ QVector TST_VAbstractPiece::OutputPointsIssue934Case3() const return points; } + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::InputPointsIssue937Case4() const +{ + QVector points; + + points += VSAPoint(30.000000000000000, 39.999874015748034); + points += VSAPoint(784.001052525227124, 93.624081022807857); + points += VSAPoint(784.001052525227124, 93.624081022807857); + + VSAPoint p = VSAPoint(774.549887508210873, 111.576706533308567); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(756.790196946771857, 147.235978663837784); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(740.328372396175155, 182.599152839796318); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(725.082967905009809, 217.665203187846430); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(710.972537521864297, 252.433103834650353); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(697.915635295327547, 286.901828906870151); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(680.021245070692316, 338.079435747169612); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(659.251258140338564, 405.209521964051703); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(641.229356711019818, 471.124440162517772); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(625.303973171447183, 535.815983355865228); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(610.823539910331306, 599.275944557391995); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(603.941048041563704, 630.489688374883372); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry); + points += p; + + p = VSAPoint(603.941048041563704, 630.489688374883372); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry); + points += p; + + p = VSAPoint(603.941048041563704, 630.489688374883372); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry); + points += p; + + p = VSAPoint(593.373754598520122, 627.421080848202337); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(570.856225791667612, 621.724582828565644); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(546.814781491491203, 616.591938481713441); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(521.400104821985224, 612.062029176884039); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(494.762878907143659, 608.173736283315634); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(467.053786870960835, 604.965941170246310); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(438.423511837430851, 602.477525206914265); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(409.022736930547808, 600.747369762557469); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(379.002145274305917, 599.814356206414232); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(348.512419992699336, 599.717365907722524); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(317.704244209722162, 600.495280235720656); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(286.728301049368611, 602.186980559646713); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(255.735273635632836, 604.831348248738777); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(224.875845092508996, 608.467264672235046); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(194.300698543991246, 613.133611199373604); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(164.160517114073684, 618.869269199392420); + p.SetSABefore(151.181); + p.SetSAAfter(151.181); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(149.328168036696184, 622.197225159899745); + p.SetSABefore(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + p = VSAPoint(149.328168036696184, 622.197225159899745); + p.SetSABefore(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + p = VSAPoint(149.328168036696184, 622.197225159899745); + p.SetSABefore(151.181); + p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry); + points += p; + + p = VSAPoint(148.780908204593317, 607.287773847850531); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(146.895584757900821, 576.215879988244183); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(142.454824990190019, 527.210027117314212); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(133.311692121295692, 457.608980413459847); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(120.868745144514008, 384.408601325998120); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(105.351458627140062, 308.706628739851681); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(86.985307136468961, 231.600801539943319); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(65.995765239795787, 154.188858611195911); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + p = VSAPoint(42.608307504415649, 77.568538838532248); + p.SetAngleType(PieceNodeAngle::ByLengthCurve); + points += p; + + points += VSAPoint(30.000000000000000, 39.999874015748034); + + return points; +} + +//--------------------------------------------------------------------------------------------------------------------- +QVector TST_VAbstractPiece::OutputPointsIssue937Case4() const +{ + QVector points; + + points += QPointF(-23.869134810321157, -1.722013069577457); + points += QPointF(844.400089565605640, 60.028893603376154); + points += QPointF(808.191896751323043, 128.806882860412060); + points += QPointF(790.844266519939765, 163.638788579752315); + points += QPointF(774.796911740885662, 198.111601746414436); + points += QPointF(759.929306088834664, 232.308674618563742); + points += QPointF(746.160069074303465, 266.235879636728441); + points += QPointF(733.432348408725375, 299.835603124447687); + points += QPointF(715.924983245483418, 349.906325841807984); + points += QPointF(695.543108629380072, 415.782005245395908); + points += QPointF(677.813698549770493, 480.627139355570648); + points += QPointF(662.080521256304564, 544.537908971868887); + points += QPointF(647.671698829034426, 607.684038352516041); + points += QPointF(640.315187177502366, 641.052275448924206); + points += QPointF(588.619170631467227, 783.466677004755525); + points += QPointF(553.743081963821624, 773.339104721127455); + points += QPointF(536.523003591512065, 768.982758907727316); + points += QPointF(517.759929550071433, 764.977001819844645); + points += QPointF(497.211523376831963, 761.314456058038559); + points += QPointF(475.147325760354477, 758.093697895431433); + points += QPointF(451.812536560994317, 755.392302170863218); + points += QPointF(427.435437524786209, 753.273553318105542); + points += QPointF(402.232663995440760, 751.790438809294415); + points += QPointF(376.413029414726907, 750.987987300199620); + points += QPointF(350.180371031112031, 750.904539077934487); + points += QPointF(323.735723660862391, 751.572273196081824); + points += QPointF(297.279016585358193, 753.017162854419439); + points += QPointF(271.010406542700196, 755.258436761187795); + points += QPointF(245.131291735141957, 758.307563170734056); + points += QPointF(219.844984732118604, 762.166732600404089); + points += QPointF(194.848860551284815, 766.923479667790730); + points += QPointF(172.371358664737528, 771.966789799612116); + points += QPointF(111.816375434788142, 630.613801194321582); + points += QPointF(111.027644362461615, 609.125749575465761); + points += QPointF(109.203764340933944, 579.066500834362159); + points += QPointF(104.882425391242222, 531.378512325319548); + points += QPointF(95.931314232348498, 463.239208789540044); + points += QPointF(83.715017334998123, 391.372185197808790); + points += QPointF(68.446160239316853, 316.882189799137393); + points += QPointF(50.354130013853364, 240.927194166617255); + points += QPointF(29.673297258902259, 164.653807504519932); + points += QPointF(6.611479789332002, 89.100327128404913); + points += QPointF(-23.869134810321157, -1.722013069577457); + + return points; +} diff --git a/src/test/ValentinaTest/tst_vabstractpiece.h b/src/test/ValentinaTest/tst_vabstractpiece.h index 6bcec309f..3e156c6f2 100644 --- a/src/test/ValentinaTest/tst_vabstractpiece.h +++ b/src/test/ValentinaTest/tst_vabstractpiece.h @@ -162,14 +162,17 @@ private: QVector InputPointsIssue923Test6_6(); QVector OutputPointsIssue923Test6_6(); - QVector InputPointsIssue934Case1() const; - QVector OutputPointsIssue934Case1() const; + QVector InputPointsIssue937Case1() const; + QVector OutputPointsIssue937Case1() const; - QVector InputPointsIssue934Case2() const; - QVector OutputPointsIssue934Case2() const; + QVector InputPointsIssue937Case2() const; + QVector OutputPointsIssue937Case2() const; - QVector InputPointsIssue934Case3() const; - QVector OutputPointsIssue934Case3() const; + QVector InputPointsIssue937Case3() const; + QVector OutputPointsIssue937Case3() const; + + QVector InputPointsIssue937Case4() const; + QVector OutputPointsIssue937Case4() const; }; #endif // TST_VABSTRACTPIECE_H diff --git a/src/test/ValentinaTest/tst_vpiece.cpp b/src/test/ValentinaTest/tst_vpiece.cpp index b87d52093..a024f8b16 100644 --- a/src/test/ValentinaTest/tst_vpiece.cpp +++ b/src/test/ValentinaTest/tst_vpiece.cpp @@ -172,7 +172,7 @@ QVector Issue924SeamAllowanceTest3() { QVector points; - points += QPointF(-844.490345580522785, 355.767273366986956); + points += QPointF(-862.690254965683266, 340.819961100893522); points += QPointF(-814.714960629921279, 331.313196850393751); points += QPointF(-814.714960629921279, -46.738127408018386); points += QPointF(-778.560274683193597, -50.549491761193529); @@ -230,7 +230,7 @@ QVector Issue924SeamAllowanceTest3() points += QPointF(-823.692975528084730, 369.271805550997954); points += QPointF(-829.575336882823422, 366.626948794191208); points += QPointF(-835.815139714856855, 362.892089667033019); - points += QPointF(-844.490345580522785, 355.767273366986956); + points += QPointF(-862.690254965683266, 340.819961100893522); return points; } @@ -912,10 +912,10 @@ void TST_VPiece::TestSAPassmark_data() passmarkData.passmarkSAPoint = passmarkSAPoint; passmarkData.pieceName = QStringLiteral("Test 3"); - lines = {QLineF(QPointF(-844.4903455805228, 355.76727336698696), - QPointF(-825.5927077852472, 355.76727336698696)), - QLineF(QPointF(-825.5927077852472, 348.68065919375863), - QPointF(-825.5927077852472, 362.8538875402153))}; + lines = {QLineF(QPointF(-862.6902549656833, 340.8199611008935), + QPointF(-844.3614525403156, 345.42166903309004)), + QLineF(QPointF(-842.6358120657416, 338.54836812357695), + QPointF(-846.0870930148895, 352.29496994260313))}; // See file src/app/share/collection/bugs/Issue_#924.val QTest::newRow("Test 3.") << passmarkData << Issue924SeamAllowanceTest3() << lines;