diff --git a/ChangeLog.txt b/ChangeLog.txt index f2b27b3b2..b4e361cfb 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,6 @@ +# Version 0.7.47 (unreleased) +- [smart-pattern/valentina#118] Incorrect seam allowance. + # Version 0.7.46 Mar 31, 2021 - Fix incorrect calculation of value for multisize measurements in Valentina. - [smart-pattern/valentina#109] Pattern label template placeholder with dimension label value. diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp index 3e0b2093c..d90df91a8 100644 --- a/src/libs/vlayout/vabstractpiece.cpp +++ b/src/libs/vlayout/vabstractpiece.cpp @@ -597,9 +597,21 @@ QVector AngleBySecondRightAngle(QVector points, QPoint return AngleByLength(points, p1, p2, p3, bigLine1, sp2, bigLine2, p, width, needRollback); } - if (IsSameDirection(bigLine1.p1(), bigLine1.p2(), px)) + // Because artificial loop can lead to wrong clipping we must rollback current seam allowance points + bool success = false; + const int countBefore = points.size(); + QVector temp = points; + temp.append(bigLine1.p2()); + temp = VAbstractPiece::RollbackSeamAllowance(temp, edge, &success); + + if (success) + { + points = temp; + px = points.last(); + } + + if (countBefore > 0) { - points.append(px); QLineF seam(px, p3); seam.setAngle(seam.angle()+90); seam.setLength(p.GetSAAfter(width)); @@ -607,37 +619,18 @@ QVector AngleBySecondRightAngle(QVector points, QPoint } else { - // Because artificial loop can lead to wrong clipping we must rollback current seam allowance points - bool success = false; - const int countBefore = points.size(); - QVector temp = points; - temp.append(bigLine1.p2()); - temp = VAbstractPiece::RollbackSeamAllowance(temp, edge, &success); - - if (success) + if (needRollback != nullptr) { - points = temp; + *needRollback = not success; } - - if (success) - { - px = points.last(); - } - - if (countBefore > 0) + else if (IsSameDirection(bigLine1.p1(), bigLine1.p2(), px)) { + points.append(px); QLineF seam(px, p3); seam.setAngle(seam.angle()+90); seam.setLength(p.GetSAAfter(width)); points.append(seam.p2()); } - else - { - if (needRollback != nullptr) - { - *needRollback = not success; - } - } } } diff --git a/src/test/ValentinaTest/share/busty/output.json b/src/test/ValentinaTest/share/busty/output.json index d10373836..b566fceb6 100644 --- a/src/test/ValentinaTest/share/busty/output.json +++ b/src/test/ValentinaTest/share/busty/output.json @@ -1,15 +1,5 @@ { "vector": [ - { - "type": "QPointF", - "x": -1033.554475328413, - "y": -1.4847877309713162 - }, - { - "type": "QPointF", - "x": -1053.5198027542147, - "y": 15.87442598087916 - }, { "type": "QPointF", "x": -1103.8471101657558, @@ -147,13 +137,23 @@ }, { "type": "QPointF", - "x": -1019.1774122353033, - "y": -9.802372690577647 + "x": -1019.1774122353031, + "y": -9.802372690577615 }, { "type": "QPointF", - "x": -1033.554475328413, - "y": -1.4847877309713162 + "x": -1033.5544753284128, + "y": -1.484787730971263 + }, + { + "type": "QPointF", + "x": -1053.5198027542144, + "y": 15.874425980879213 + }, + { + "type": "QPointF", + "x": -1103.8471101657558, + "y": -42.085297184732866 } ] } diff --git a/src/test/ValentinaTest/share/smart_pattern_#118/input.json b/src/test/ValentinaTest/share/smart_pattern_#118/input.json new file mode 100644 index 000000000..c5602fa22 --- /dev/null +++ b/src/test/ValentinaTest/share/smart_pattern_#118/input.json @@ -0,0 +1,251 @@ +{ + "vector": [ + { + "angle": 5, + "saAfter": 26.45669291338583, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1175.886910362366, + "y": 555.8793769255013 + }, + { + "saAfter": 26.45669291338583, + "saBefore": 26.45669291338583, + "type": "VSAPoint", + "x": 1210.4565869937005, + "y": 359.82499833625104 + }, + { + "angle": 4, + "saBefore": 26.45669291338583, + "type": "VSAPoint", + "x": 1245.0262636250343, + "y": 163.7706197470058 + }, + { + "angle": 4, + "saBefore": 26.45669291338583, + "type": "VSAPoint", + "x": 1245.0262636250343, + "y": 163.7706197470058 + }, + { + "angle": 6, + "type": "VSAPoint", + "x": 1249.6525568482823, + "y": 164.14294264993185 + }, + { + "angle": 6, + "type": "VSAPoint", + "x": 1328.6772421341088, + "y": 168.67117831036722 + }, + { + "angle": 6, + "type": "VSAPoint", + "x": 1407.1175580331974, + "y": 171.5543246297218 + }, + { + "angle": 6, + "type": "VSAPoint", + "x": 1483.528659051359, + "y": 172.90969229726562 + }, + { + "angle": 6, + "type": "VSAPoint", + "x": 1556.465699694404, + "y": 172.85459200226887 + }, + { + "type": "VSAPoint", + "x": 1590.944877799307, + "y": 172.2833383788549 + }, + { + "type": "VSAPoint", + "x": 1590.944877799307, + "y": 172.2833383788549 + }, + { + "saAfter": 0, + "type": "VSAPoint", + "x": 1602.2834604764719, + "y": 172.28333858267717 + }, + { + "saBefore": 0, + "type": "VSAPoint", + "x": 1602.2834645669293, + "y": 871.4959370078741 + }, + { + "angle": 4, + "saAfter": 37.795275590551185, + "type": "VSAPoint", + "x": 1487.9905430001882, + "y": 871.4959370078741 + }, + { + "angle": 4, + "saAfter": 37.795275590551185, + "type": "VSAPoint", + "x": 1487.9905430001882, + "y": 871.4959370078741 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1485.3736111108465, + "y": 863.1390002359062 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1479.2436608108028, + "y": 846.6118709359941 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1472.1089977384408, + "y": 830.3196261529354 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1464.048056397443, + "y": 814.2742563578688 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1455.1392712914917, + "y": 798.4877520219336 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1445.461076924269, + "y": 782.9721036162691 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1429.744383860615, + "y": 760.1951110191317 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1406.7127536027315, + "y": 730.9328354430954 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1382.0153073660463, + "y": 702.9698120686455 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1356.2795211800185, + "y": 676.4019646648946 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1330.1328710741072, + "y": 651.3252170009557 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1317.1236562322474, + "y": 639.4441061406586 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1306.6722905128563, + "y": 630.2432611699617 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1284.4672776121818, + "y": 613.1923935152287 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1260.8445039829223, + "y": 597.6441315378071 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1235.9650552091725, + "y": 583.4669407191618 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1209.9900168750269, + "y": 570.5292865407575 + }, + { + "angle": 6, + "saAfter": 37.795275590551185, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1183.0804745645812, + "y": 558.6996344840597 + }, + { + "angle": 5, + "saAfter": 26.45669291338583, + "saBefore": 37.795275590551185, + "type": "VSAPoint", + "x": 1175.886910362366, + "y": 555.8793769255013 + } + ] +} diff --git a/src/test/ValentinaTest/share/smart_pattern_#118/output.json b/src/test/ValentinaTest/share/smart_pattern_#118/output.json new file mode 100644 index 000000000..86139ef66 --- /dev/null +++ b/src/test/ValentinaTest/share/smart_pattern_#118/output.json @@ -0,0 +1,149 @@ +{ + "vector": [ + { + "type": "QPointF", + "x": 1223.586134371358, + "y": 133.0056127624619 + }, + { + "type": "QPointF", + "x": 1249.640890671512, + "y": 137.59976927396653 + }, + { + "type": "QPointF", + "x": 1329.9200278416895, + "y": 142.2422996971724 + }, + { + "type": "QPointF", + "x": 1407.8381204298632, + "y": 145.1062512160027 + }, + { + "type": "QPointF", + "x": 1483.7532902514336, + "y": 146.4528221367358 + }, + { + "type": "QPointF", + "x": 1556.4457129886712, + "y": 146.3979066383616 + }, + { + "type": "QPointF", + "x": 1602.8503894555029, + "y": 145.81752096608884 + }, + { + "type": "QPointF", + "x": 1602.8503938555618, + "y": 897.9526299212599 + }, + { + "type": "QPointF", + "x": 1448.3854994804524, + "y": 897.9526299212599 + }, + { + "type": "QPointF", + "x": 1448.3854994804524, + "y": 872.0986142517511 + }, + { + "type": "QPointF", + "x": 1444.185885125444, + "y": 860.7759173198534 + }, + { + "type": "QPointF", + "x": 1437.8881811328367, + "y": 846.3948969439552 + }, + { + "type": "QPointF", + "x": 1430.6843973121577, + "y": 832.0557062171064 + }, + { + "type": "QPointF", + "x": 1422.631723280359, + "y": 817.7862438822315 + }, + { + "type": "QPointF", + "x": 1413.8560410480763, + "y": 803.7174625714251 + }, + { + "type": "QPointF", + "x": 1399.3105569558466, + "y": 782.6378129181111 + }, + { + "type": "QPointF", + "x": 1377.6756438965467, + "y": 755.1501022820776 + }, + { + "type": "QPointF", + "x": 1354.2630217275394, + "y": 728.6417866167658 + }, + { + "type": "QPointF", + "x": 1329.6163029711672, + "y": 703.198217176561 + }, + { + "type": "QPointF", + "x": 1304.3044047855055, + "y": 678.9220639742948 + }, + { + "type": "QPointF", + "x": 1291.8905309106663, + "y": 667.5846686352518 + }, + { + "type": "QPointF", + "x": 1282.6488410331592, + "y": 659.4487600742838 + }, + { + "type": "QPointF", + "x": 1262.5391808091847, + "y": 644.0068796036708 + }, + { + "type": "QPointF", + "x": 1241.078336069538, + "y": 629.8815765590062 + }, + { + "type": "QPointF", + "x": 1218.1697701289968, + "y": 616.8274645618288 + }, + { + "type": "QPointF", + "x": 1193.950386353718, + "y": 604.764267284976 + }, + { + "type": "QPointF", + "x": 1169.1867339246062, + "y": 593.8779657451806 + }, + { + "type": "QPointF", + "x": 1143.1319776244438, + "y": 589.2838092336752 + }, + { + "type": "QPointF", + "x": 1223.586134371358, + "y": 133.0056127624619 + } + ] +} diff --git a/src/test/ValentinaTest/share/test_data.qrc b/src/test/ValentinaTest/share/test_data.qrc index 5904da7e3..c13340b4e 100644 --- a/src/test/ValentinaTest/share/test_data.qrc +++ b/src/test/ValentinaTest/share/test_data.qrc @@ -137,5 +137,7 @@ smart_pattern_#112/output.json smart_pattern_#113/input.json smart_pattern_#113/output.json + smart_pattern_#118/input.json + smart_pattern_#118/output.json diff --git a/src/test/ValentinaTest/tst_vabstractpiece.cpp b/src/test/ValentinaTest/tst_vabstractpiece.cpp index e7c31d568..1244ca6a3 100644 --- a/src/test/ValentinaTest/tst_vabstractpiece.cpp +++ b/src/test/ValentinaTest/tst_vabstractpiece.cpp @@ -1035,6 +1035,12 @@ void TST_VAbstractPiece::EquidistantAngleType_data() QStringLiteral("://smart_pattern_#113/input.json"), QStringLiteral("://smart_pattern_#113/output.json"), 0.56692913385826771 /*seam allowance width*/); + + // See file src/app/share/collection/bugs/smart_pattern_#118.val (private collection) + ASSERT_TEST_CASE("Ретро стринги 3", + QStringLiteral("://smart_pattern_#118/input.json"), + QStringLiteral("://smart_pattern_#118/output.json"), + 26.45669291338583 /*seam allowance width*/); } //---------------------------------------------------------------------------------------------------------------------