From 73ad3a837604ea4329186e1e9ae917bece549021 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 25 May 2016 13:55:15 +0300 Subject: [PATCH] Fixed issue with method IsPointOnLineSegment. --HG-- branch : develop --- .../IsPointOnLineSegment_RotateTool_issue.val | 59 +++++++++++++++++++ src/libs/vgeometry/vgobject.cpp | 2 +- src/test/ValentinaTest/tst_vspline.cpp | 46 +++++++++++++++ src/test/ValentinaTest/tst_vspline.h | 1 + 4 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 src/app/share/collection/bugs/IsPointOnLineSegment_RotateTool_issue.val diff --git a/src/app/share/collection/bugs/IsPointOnLineSegment_RotateTool_issue.val b/src/app/share/collection/bugs/IsPointOnLineSegment_RotateTool_issue.val new file mode 100644 index 000000000..842069052 --- /dev/null +++ b/src/app/share/collection/bugs/IsPointOnLineSegment_RotateTool_issue.val @@ -0,0 +1,59 @@ + + + + 0.3.1 + cm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
diff --git a/src/libs/vgeometry/vgobject.cpp b/src/libs/vgeometry/vgobject.cpp index 2eca45687..9355610d2 100644 --- a/src/libs/vgeometry/vgobject.cpp +++ b/src/libs/vgeometry/vgobject.cpp @@ -506,7 +506,7 @@ double VGObject::GetEpsilon(const QPointF &p1, const QPointF &p2) { const double dx1 = p2.x() - p1.x(); const double dy1 = p2.y() - p1.y(); - const double epsilon = 0.03 * (dx1 * dx1 + dy1 * dy1); //-V636 + const double epsilon = 0.06 * (dx1 * dx1 + dy1 * dy1); //-V636 return epsilon; } diff --git a/src/test/ValentinaTest/tst_vspline.cpp b/src/test/ValentinaTest/tst_vspline.cpp index 3b4098dd1..ae5b5c8ca 100644 --- a/src/test/ValentinaTest/tst_vspline.cpp +++ b/src/test/ValentinaTest/tst_vspline.cpp @@ -270,6 +270,52 @@ void TST_VSpline::GetSegmentPoints_NullSegment() Comparison(points, origPoints); } +//--------------------------------------------------------------------------------------------------------------------- +void TST_VSpline::GetSegmentPoints_RotateTool() +{ + // Input data taken from real case + // See the file /src/app/share/collection/bugs/IsPointOnLineSegment_RotateTool_issue.val + // Test issue with method IsPointOnLineSegment. + + const VPointF p1(155.93961723681397, -42.472964170961042, "A", 5.0000125984251973, 9.9999874015748045); + const VPointF p4(237.32422843061005, 485.80074940371367, "A2", 5.0000125984251973, 9.9999874015748045); + + VSpline spl(p1, p4, 231.11199999999994, "231.112", 145.33899999999997, "145.339", 207.44768503937021, "5.48872", + 337.50916535433066, "8.92993"); + + const QPointF begin(237.32422843061005, 485.80074940371367); + const QPointF end (46.623829088412336, 167.78988631718659); + + QVector points; + points << spl.GetSegmentPoints(begin, end, true); + + QVector origPoints; + origPoints.append(QPointF(237.32422843061005, 485.80074940371367)); + origPoints.append(QPointF(224.47894722830574, 476.8115274500917)); + origPoints.append(QPointF(200.4405599713662, 458.9162132315404)); + origPoints.append(QPointF(178.3387458840754, 441.12004274890694)); + origPoints.append(QPointF(158.12235273581754, 423.422336123843)); + origPoints.append(QPointF(139.74022829597683, 405.8224134780004)); + origPoints.append(QPointF(123.1412203339375, 388.3195949330309)); + origPoints.append(QPointF(108.27417661908376, 370.91320061058616)); + origPoints.append(QPointF(95.08794492079983, 353.60255063231807)); + origPoints.append(QPointF(83.5313730084699, 336.38696511987837)); + origPoints.append(QPointF(73.55330865147822, 319.2657641949186)); + origPoints.append(QPointF(65.10259961920897, 302.2382679790908)); + origPoints.append(QPointF(58.12809368104641, 285.3037965940465)); + origPoints.append(QPointF(52.57863860637471, 268.4616701614375)); + origPoints.append(QPointF(48.40308216457812, 251.71120880291573)); + origPoints.append(QPointF(45.55027212504085, 235.05173264013274)); + origPoints.append(QPointF(43.9690562571471, 218.48256179474038)); + origPoints.append(QPointF(43.6082823302811, 202.00301638839034)); + origPoints.append(QPointF(44.416798113827056, 185.61241654273442)); + origPoints.append(QPointF(46.34345137716919, 169.31008237942433)); + origPoints.append(QPointF(46.623829088412336, 167.78988631718659)); + + // Begin comparison + Comparison(points, origPoints); +} + //--------------------------------------------------------------------------------------------------------------------- void TST_VSpline::CompareThreeWays() { diff --git a/src/test/ValentinaTest/tst_vspline.h b/src/test/ValentinaTest/tst_vspline.h index 30937d5b5..d0b96b5fc 100644 --- a/src/test/ValentinaTest/tst_vspline.h +++ b/src/test/ValentinaTest/tst_vspline.h @@ -46,6 +46,7 @@ private slots: void GetSegmentPoints_issue412(); void GetSegmentPoints_TestPuzzle(); void GetSegmentPoints_NullSegment(); + void GetSegmentPoints_RotateTool(); void CompareThreeWays(); void TestParametrT(); void TestLengthByPoint_data();