From 74ec82290a7d273f1f8b3b33750f6b61a4a111aa Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 12 Apr 2019 18:04:07 +0300 Subject: [PATCH] Fixed issue #963. Bug in tool Point intersect curve and axis. (grafted from db4c88cadb30a460075b949a6faa108537030602) --HG-- branch : develop --- ChangeLog.txt | 1 + src/app/share/collection/bugs/Issue_#963.val | 28 +++ src/libs/vgeometry/vabstractcurve.cpp | 10 +- src/test/ValentinaTest/tst_findpoint.cpp | 195 ++++++++++++++++++- 4 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 src/app/share/collection/bugs/Issue_#963.val diff --git a/ChangeLog.txt b/ChangeLog.txt index 2527e4b6b..f659047da 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -35,6 +35,7 @@ - [#956] Setting pattern unit doesn't change combobox value in Tape app. - [#957] Unable to cut an arc with negative length. - [#962] Failed to load LibEGL. +- [#963] Bug in tool Point intersect curve and axis. # Version 0.6.1 October 23, 2018 - [#885] Regression. Broken support for multi size measurements. diff --git a/src/app/share/collection/bugs/Issue_#963.val b/src/app/share/collection/bugs/Issue_#963.val new file mode 100644 index 000000000..f227b3d77 --- /dev/null +++ b/src/app/share/collection/bugs/Issue_#963.val @@ -0,0 +1,28 @@ + + + + 0.7.12 + inch + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/src/libs/vgeometry/vabstractcurve.cpp b/src/libs/vgeometry/vabstractcurve.cpp index 5bcd20ed9..b22b3fbd8 100644 --- a/src/libs/vgeometry/vabstractcurve.cpp +++ b/src/libs/vgeometry/vabstractcurve.cpp @@ -336,8 +336,12 @@ bool VAbstractCurve::CurveIntersectAxis(const QPointF &point, qreal angle, const QRectF rec = QRectF(0, 0, INT_MAX, INT_MAX); rec.translate(-INT_MAX/2.0, -INT_MAX/2.0); - const QLineF axis = VGObject::BuildAxis(point, angle, rec); - const QVector points = VAbstractCurve::CurveIntersectLine(curvePoints, axis); + // Instead of using axis compare two rays. See issue #963. + QLineF axis = QLineF(point, VGObject::BuildRay(point, angle, rec)); + QVector points = VAbstractCurve::CurveIntersectLine(curvePoints, axis); + + axis = QLineF(point, VGObject::BuildRay(point, angle + 180, rec)); + points += VAbstractCurve::CurveIntersectLine(curvePoints, axis); if (points.size() > 0) { @@ -352,7 +356,7 @@ bool VAbstractCurve::CurveIntersectAxis(const QPointF &point, qreal angle, const for ( qint32 i = 0; i < points.size(); ++i ) { - if (points.at(i) == point) + if (VFuzzyComparePoints(points.at(i), point)) { // Always seek unique intersection continue; } diff --git a/src/test/ValentinaTest/tst_findpoint.cpp b/src/test/ValentinaTest/tst_findpoint.cpp index f27560a14..6994fd547 100644 --- a/src/test/ValentinaTest/tst_findpoint.cpp +++ b/src/test/ValentinaTest/tst_findpoint.cpp @@ -537,8 +537,201 @@ void TST_FindPoint::TestCurveIntersectAxis_data() QTest::newRow("Ignore base point") << QPointF(77.88857126235962, 238.94051381477158) << 25.625900000000001 << curvePoints - << QPointF(409.3673746585846, 79.93820315599442); + << QPointF(409.3497137398903, 79.93480159739616); + curvePoints = + { + QPointF(4320.9312, 40.00003200000003), + QPointF(4320.680365481579, 20.177606660541247), + QPointF(4319.93188316558, 0.4788538670297253), + QPointF(4318.6917849109, -19.090194521637265), + QPointF(4316.966102576437, -38.52350664656246), + QPointF(4314.760868021088, -57.81505064884859), + QPointF(4312.082113103751, -76.95879466959839), + QPointF(4308.935869683322, -95.9487068499146), + QPointF(4305.3281696187, -114.77875533089994), + QPointF(4301.265044768779, -133.44290825365715), + QPointF(4296.752526992461, -151.935133759289), + QPointF(4291.796648148639, -170.24939998889818), + QPointF(4286.403440096212, -188.37967508358741), + QPointF(4274.329163801132, -224.06412443261712), + QPointF(4260.5779529783995, -258.9402269351999), + QPointF(4245.198062499192, -292.95972772015773), + QPointF(4228.237747234687, -326.0743719163124), + QPointF(4209.745262056063, -358.23590465248583), + QPointF(4189.7688618345, -389.3960710574999), + QPointF(4168.356801441173, -419.5066162601765), + QPointF(4145.557335747262, -448.5192853893374), + QPointF(4121.418719623945, -476.3858235738046), + QPointF(4095.9892079424, -503.05797594239993), + QPointF(4069.3170555738043, -528.4874876239452), + QPointF(4041.450517389337, -552.6261037472624), + QPointF(4012.4378482601765, -575.4255694411734), + QPointF(3982.3273030574996, -596.8376298344999), + QPointF(3951.1671366524856, -616.814030056064), + QPointF(3919.0056039163123, -635.3065152346874), + QPointF(3885.8909597201578, -652.2668304991922), + QPointF(3851.8714589352, -667.6467209784), + QPointF(3816.9953564326165, -681.3979318011327), + QPointF(3781.310907083587, -693.4722080962125), + QPointF(3763.1806319888983, -698.8654161486393), + QPointF(3744.866365759289, -703.821294992461), + QPointF(3726.374140253657, -708.3338127687805), + QPointF(3707.7099873309, -712.3969376187001), + QPointF(3688.879938849914, -716.0046376833229), + QPointF(3669.8900266695982, -719.1508811037517), + QPointF(3650.7462826488486, -721.8296360210888), + QPointF(3631.4547386465624, -724.0348705764375), + QPointF(3612.021426521637, -725.7605529109002), + QPointF(3592.45237813297, -727.0006511655797), + QPointF(3572.7536253394587, -727.7491334815787), + QPointF(3552.9312, -727.999968), + QPointF(3533.1087746605413, -727.7491334815787), + QPointF(3513.41002186703, -727.0006511655797), + QPointF(3493.840973478363, -725.7605529109002), + QPointF(3474.4076613534376, -724.0348705764375), + QPointF(3455.1161173511514, -721.8296360210888), + QPointF(3435.9723733304018, -719.1508811037517), + QPointF(3416.982461150086, -716.0046376833229), + QPointF(3398.1524126691, -712.3969376187001), + QPointF(3379.488259746343, -708.3338127687805), + QPointF(3360.996034240711, -703.821294992461), + QPointF(3342.6817680111017, -698.8654161486393), + QPointF(3324.551492916413, -693.4722080962125), + QPointF(3288.8670435673835, -681.3979318011327), + QPointF(3253.9909410648, -667.6467209784), + QPointF(3219.971440279842, -652.2668304991922), + QPointF(3186.8567960836876, -635.3065152346874), + QPointF(3154.6952633475144, -616.814030056064), + QPointF(3123.5350969425003, -596.8376298344999), + QPointF(3093.4245517398235, -575.4255694411734), + QPointF(3064.411882610663, -552.6261037472624), + QPointF(3036.5453444261957, -528.4874876239452), + QPointF(3009.8731920576, -503.05797594239993), + QPointF(2984.443680376055, -476.3858235738046), + QPointF(2960.305064252738, -448.5192853893374), + QPointF(2937.505598558827, -419.5066162601765), + QPointF(2916.0935381655004, -389.3960710574999), + QPointF(2896.1171379439365, -358.23590465248583), + QPointF(2877.624652765313, -326.0743719163124), + QPointF(2860.664337500808, -292.95972772015773), + QPointF(2845.2844470216, -258.9402269351999), + QPointF(2831.5332361988667, -224.06412443261712), + QPointF(2819.458959903787, -188.37967508358741), + QPointF(2814.0657518513603, -170.24939998889818), + QPointF(2809.109873007539, -151.935133759289), + QPointF(2804.59735523122, -133.44290825365715), + QPointF(2800.5342303813, -114.77875533089994), + QPointF(2796.9265303166767, -95.9487068499146), + QPointF(2793.780286896248, -76.95879466959839), + QPointF(2791.101531978911, -57.81505064884859), + QPointF(2788.8962974235624, -38.52350664656246), + QPointF(2787.1706150890996, -19.090194521637265), + QPointF(2785.93051683442, 0.4788538670297253), + QPointF(2785.1820345184215, 20.177606660541247), + QPointF(2784.9312, 40.00003200000003), + QPointF(2785.1820345184215, 59.82245733945882), + QPointF(2785.93051683442, 79.52121013297034), + QPointF(2787.1706150890996, 99.09025852163734), + QPointF(2788.8962974235624, 118.52357064656252), + QPointF(2791.101531978911, 137.81511464884863), + QPointF(2793.780286896248, 156.95885866959844), + QPointF(2796.9265303166767, 175.9487708499147), + QPointF(2800.5342303813, 194.77881933090003), + QPointF(2804.59735523122, 213.44297225365725), + QPointF(2809.109873007539, 231.93519775928905), + QPointF(2814.0657518513603, 250.24946398889824), + QPointF(2819.458959903787, 268.3797390835875), + QPointF(2831.5332361988667, 304.06418843261713), + QPointF(2845.2844470216, 338.9402909352), + QPointF(2860.664337500808, 372.9597917201578), + QPointF(2877.624652765313, 406.07443591631244), + QPointF(2896.1171379439365, 438.2359686524859), + QPointF(2916.0935381655004, 469.3961350575), + QPointF(2937.505598558827, 499.50668026017655), + QPointF(2960.305064252738, 528.5193493893374), + QPointF(2984.443680376055, 556.3858875738047), + QPointF(3009.8731920576, 583.0580399424), + QPointF(3036.5453444261957, 608.4875516239453), + QPointF(3064.411882610663, 632.6261677472625), + QPointF(3093.4245517398235, 655.4256334411734), + QPointF(3123.5350969425003, 676.8376938345), + QPointF(3154.6952633475144, 696.814094056064), + QPointF(3186.8567960836876, 715.3065792346874), + QPointF(3219.971440279842, 732.2668944991923), + QPointF(3253.9909410648, 747.6467849784001), + QPointF(3288.8670435673835, 761.3979958011328), + QPointF(3324.551492916413, 773.4722720962126), + QPointF(3342.6817680111017, 778.8654801486393), + QPointF(3360.996034240711, 783.8213589924611), + QPointF(3379.488259746343, 788.3338767687806), + QPointF(3398.1524126691, 792.3970016187002), + QPointF(3416.982461150086, 796.004701683323), + QPointF(3435.9723733304018, 799.1509451037517), + QPointF(3455.1161173511514, 801.8297000210889), + QPointF(3474.4076613534376, 804.0349345764375), + QPointF(3493.840973478363, 805.7606169109002), + QPointF(3513.41002186703, 807.0007151655798), + QPointF(3533.1087746605413, 807.7491974815788), + QPointF(3552.9312, 808.000032), + QPointF(3572.7536253394587, 807.7491974815788), + QPointF(3592.45237813297, 807.0007151655798), + QPointF(3612.021426521637, 805.7606169109002), + QPointF(3631.4547386465624, 804.0349345764375), + QPointF(3650.7462826488486, 801.8297000210889), + QPointF(3669.8900266695982, 799.1509451037517), + QPointF(3688.879938849914, 796.004701683323), + QPointF(3707.7099873309, 792.3970016187002), + QPointF(3726.374140253657, 788.3338767687806), + QPointF(3744.866365759289, 783.8213589924611), + QPointF(3763.1806319888983, 778.8654801486393), + QPointF(3781.310907083587, 773.4722720962126), + QPointF(3816.9953564326165, 761.3979958011328), + QPointF(3851.8714589352, 747.6467849784001), + QPointF(3885.8909597201578, 732.2668944991923), + QPointF(3919.0056039163123, 715.3065792346874), + QPointF(3951.1671366524856, 696.814094056064), + QPointF(3982.3273030574996, 676.8376938345), + QPointF(4012.4378482601765, 655.4256334411734), + QPointF(4041.450517389337, 632.6261677472625), + QPointF(4069.3170555738043, 608.4875516239453), + QPointF(4095.9892079424, 583.0580399424), + QPointF(4121.418719623945, 556.3858875738047), + QPointF(4145.557335747262, 528.5193493893374), + QPointF(4168.356801441173, 499.50668026017655), + QPointF(4189.7688618345, 469.3961350575), + QPointF(4209.745262056063, 438.2359686524859), + QPointF(4228.237747234687, 406.07443591631244), + QPointF(4245.198062499192, 372.9597917201578), + QPointF(4260.5779529783995, 338.9402909352), + QPointF(4274.329163801132, 304.06418843261713), + QPointF(4286.403440096212, 268.3797390835875), + QPointF(4291.796648148639, 250.24946398889824), + QPointF(4296.752526992461, 231.93519775928905), + QPointF(4301.265044768779, 213.44297225365725), + QPointF(4305.3281696187, 194.77881933090003), + QPointF(4308.935869683322, 175.9487708499147), + QPointF(4312.082113103751, 156.95885866959844), + QPointF(4314.760868021088, 137.81511464884863), + QPointF(4316.966102576437, 118.52357064656252), + QPointF(4318.6917849109, 99.09025852163734), + QPointF(4319.93188316558, 79.52121013297034), + QPointF(4320.680365481579, 59.82245733945882), + QPointF(4320.9312, 40.00003200000003) + }; + + basePoint = QPointF(3552.9312, 40.000032000000004); + + // See file /src/app/share/collection/bugs/Issue_#963.val + QTest::newRow("Angle 135") << basePoint + << 135.0 + << curvePoints + << QPointF(3009.8731920575547, -503.0579759423524); + + QTest::newRow("Angle 315") << basePoint + << 315.0 + << curvePoints + << QPointF(4095.9892079424453, 583.0580399423525); } //---------------------------------------------------------------------------------------------------------------------