Fixed issue #647. Shoulder tool broken in latest test builds.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2017-04-03 13:50:05 +03:00
parent 0612305ea8
commit 862b5823e7
4 changed files with 77 additions and 5 deletions

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<pattern>
<!--Pattern created with Valentina (http://www.valentina-project.org/).-->
<version>0.4.6</version>
<unit>cm</unit>
<author/>
<description/>
<notes/>
<measurements/>
<increments/>
<draw name="Pattern piece 1">
<calculation>
<point type="single" x="0.79375" y="1.05833" id="1" name="A" mx="0.132292" my="0.264583"/>
<point type="endLine" typeLine="hair" id="2" name="A1" basePoint="1" mx="0.132292" lineColor="black" angle="180" my="0.264583" length="7"/>
<point type="endLine" typeLine="hair" id="3" name="A2" basePoint="2" mx="0.132292" lineColor="black" angle="90" my="0.264583" length="2"/>
<point type="endLine" typeLine="hair" id="4" name="A3" basePoint="1" mx="0.132292" lineColor="black" angle="270" my="0.264583" length="14"/>
<point type="endLine" typeLine="hair" id="5" name="A4" basePoint="4" mx="0.132292" lineColor="black" angle="180" my="0.264583" length="16"/>
<point type="pointOfIntersection" id="6" name="A5" firstPoint="5" secondPoint="2" mx="0.132292" my="0.264583"/>
<point type="endLine" typeLine="hair" id="7" name="A6" basePoint="6" mx="0.132292" lineColor="black" angle="270" my="0.264583" length="2"/>
<point type="shoulder" typeLine="hair" id="8" name="A7" p2Line="7" pShoulder="3" mx="0.132292" lineColor="black" my="0.264583" length="15" p1Line="2"/>
</calculation>
<modeling/>
<details/>
<groups/>
</draw>
</pattern>

View File

@ -130,15 +130,18 @@ QPointF VToolShoulderPoint::FindPoint(const QPointF &p1Line, const QPointF &p2Li
const qint32 res = VGObject::LineIntersectCircle(pShoulder, length, line, p1, p2);
// If possition is right we will find only one result.
// If found two cases this is wrong result. Return default position.
if (res == 1)
if (res == 1 || res == 2)
{
const QLineF line = QLineF(p1Line, p1);
if (line.length() > baseLength && baseAngle == qRound(line.angle()))
const QLineF line1 = QLineF(p1Line, p1);
const QLineF line2 = QLineF(p1Line, p2);
if (line1.length() > baseLength && baseAngle == qRound(line1.angle()))
{
shoulderPoint = p1;
}
else if (res == 2 && line2.length() > baseLength && baseAngle == qRound(line2.angle()))
{
shoulderPoint = p2;
}
}
return shoulderPoint;

View File

@ -31,6 +31,7 @@
#include "../vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooltruedarts.h"
#include "../vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.h"
#include "../vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.h"
#include "../vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.h"
#include <QtTest>
@ -266,3 +267,43 @@ void TST_FindPoint::TestTriangle()
QPointF resultPoint = VToolTriangle::FindPoint(axisP1, axisP2, firstPoint, secondPoint);
QCOMPARE(point, resultPoint);
}
//---------------------------------------------------------------------------------------------------------------------
void TST_FindPoint::TestShoulderPoint_data()
{
QTest::addColumn<QPointF>("p1");
QTest::addColumn<QPointF>("p2");
QTest::addColumn<QPointF>("pShoulder");
QTest::addColumn<qreal>("length");
QTest::addColumn<QPointF>("point");
// See file <root>/src/app/share/collection/bugs/Issue_#647.val
QTest::newRow("Value found") << QPointF(-234.5669291338583, 39.999874015748034)
<< QPointF(-574.724409448819, 115.5904251968504)
<< QPointF(-234.5669291338583, -35.590677165354336)
<< 566.92913385826773
<< QPointF(-767.2805101289953, 158.3806697924456);
// The same file <root>/src/app/share/collection/bugs/Issue_#647.val
// The length changed to get default value
QPointF p2(-574.724409448819, 115.5904251968504);
QTest::newRow("Value not found") << QPointF(-234.5669291338583, 39.999874015748034)
<< p2
<< QPointF(-234.5669291338583, -35.590677165354336)
<< 75.59055118110237
<< p2;
}
//---------------------------------------------------------------------------------------------------------------------
void TST_FindPoint::TestShoulderPoint()
{
QFETCH(QPointF, p1);
QFETCH(QPointF, p2);
QFETCH(QPointF, pShoulder);
QFETCH(qreal, length);
QFETCH(QPointF, point);
QPointF resultPoint = VToolShoulderPoint::FindPoint(p1, p2, pShoulder, length);
QCOMPARE(point, resultPoint);
}

View File

@ -50,6 +50,8 @@ private slots:
void TestTriangle_data();
void TestTriangle();
void TestShoulderPoint_data();
void TestShoulderPoint();
};
#endif // TST_FINDPOINT_H