Resolved issue #937. Wrong symmetrical seam corners on pieces.
(grafted from f15fbf536959418dcd9a2f2caf7c0267ae46eaee) --HG-- branch : develop
This commit is contained in:
parent
4bfe5201ad
commit
63e402ba8a
|
@ -25,6 +25,7 @@
|
||||||
- [#931] Variable translation for Greek and Chinese are broken.
|
- [#931] Variable translation for Greek and Chinese are broken.
|
||||||
- [#938] Dialog Seam Allowance doesn't block user from saving broken formula.
|
- [#938] Dialog Seam Allowance doesn't block user from saving broken formula.
|
||||||
- [#939] Calling Formula Wizard through property explorer doesn't refresh formula.
|
- [#939] Calling Formula Wizard through property explorer doesn't refresh formula.
|
||||||
|
- [#937] Wrong symmetrical seam corners on pieces.
|
||||||
|
|
||||||
# Version 0.6.1 October 23, 2018
|
# Version 0.6.1 October 23, 2018
|
||||||
- [#885] Regression. Broken support for multi size measurements.
|
- [#885] Regression. Broken support for multi size measurements.
|
||||||
|
|
96
src/app/share/collection/bugs/Issue_#934.val
Normal file
96
src/app/share/collection/bugs/Issue_#934.val
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<pattern>
|
||||||
|
<!--Pattern created with Valentina v0.6.2.0 (https://valentinaproject.bitbucket.io/).-->
|
||||||
|
<version>0.7.12</version>
|
||||||
|
<unit>cm</unit>
|
||||||
|
<description/>
|
||||||
|
<notes/>
|
||||||
|
<measurements/>
|
||||||
|
<increments/>
|
||||||
|
<previewCalculations/>
|
||||||
|
<draw name="Pattern piece 1">
|
||||||
|
<calculation>
|
||||||
|
<point id="1" mx="-2.40606" my="-1.85332" name="A" showLabel="true" type="single" x="0.79375" y="1.05833"/>
|
||||||
|
<point angle="355.932" basePoint="1" id="2" length="20" lineColor="black" mx="0.132292" my="0.264583" name="A1" showLabel="true" type="endLine" typeLine="hair"/>
|
||||||
|
<point angle="251.459" basePoint="2" id="3" length="14.9822" lineColor="black" mx="0.132292" my="0.264583" name="A2" showLabel="true" type="endLine" typeLine="hair"/>
|
||||||
|
<point angle="178.955" basePoint="3" id="4" length="12.0303" lineColor="black" mx="0.132292" my="0.264583" name="A3" showLabel="true" type="endLine" typeLine="hair"/>
|
||||||
|
<line firstPoint="4" id="5" lineColor="black" secondPoint="1" typeLine="hair"/>
|
||||||
|
<spline aScale="0" angle1="241.973" angle2="77.5938" color="black" id="6" length1="5.7476" length2="4.49494" penStyle="hair" point1="2" point4="3" type="simpleInteractive"/>
|
||||||
|
<spline aScale="0" angle1="163.38" angle2="13.038" color="black" id="7" length1="3.0694" length2="4.28083" penStyle="hair" point1="3" point4="4" type="simpleInteractive"/>
|
||||||
|
<spline aScale="0" angle1="91.8092" angle2="288.882" color="black" id="8" length1="4.17256" length2="5.57256" penStyle="hair" point1="4" point4="1" type="simpleInteractive"/>
|
||||||
|
</calculation>
|
||||||
|
<modeling>
|
||||||
|
<point id="17" idObject="1" inUse="false" mx="-2.40606" my="-1.85332" showLabel="true" type="modeling"/>
|
||||||
|
<point id="18" idObject="2" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<point id="19" idObject="3" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<point id="20" idObject="4" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
</modeling>
|
||||||
|
<details>
|
||||||
|
<detail forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="21" inLayout="true" mx="-4.07881" my="-12.9851" name="Case 1" seamAllowance="true" united="false" version="2" width="1">
|
||||||
|
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
|
||||||
|
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
|
||||||
|
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
|
||||||
|
<nodes>
|
||||||
|
<node idObject="17" type="NodePoint"/>
|
||||||
|
<node idObject="18" type="NodePoint"/>
|
||||||
|
<node after="4" angle="3" idObject="19" type="NodePoint"/>
|
||||||
|
<node angle="2" before="4" idObject="20" type="NodePoint"/>
|
||||||
|
</nodes>
|
||||||
|
</detail>
|
||||||
|
</details>
|
||||||
|
<groups/>
|
||||||
|
</draw>
|
||||||
|
<draw name="Pattern piece 2">
|
||||||
|
<calculation>
|
||||||
|
<point id="9" mx="0.132292" my="0.328592" name="B" showLabel="true" type="single" x="30" y="0"/>
|
||||||
|
<point angle="356.651" basePoint="9" id="10" length="13.0545" lineColor="black" mx="0.132292" my="0.264583" name="B1" showLabel="true" type="endLine" typeLine="hair"/>
|
||||||
|
<point angle="281.181" basePoint="10" id="11" length="11.2226" lineColor="black" mx="0.132292" my="0.264583" name="B2" showLabel="true" type="endLine" typeLine="hair"/>
|
||||||
|
<point angle="182.276" basePoint="11" id="12" length="19.3458" lineColor="black" mx="0.132292" my="0.264583" name="B3" showLabel="true" type="endLine" typeLine="hair"/>
|
||||||
|
<line firstPoint="12" id="13" lineColor="black" secondPoint="9" typeLine="hair"/>
|
||||||
|
<spline aScale="0" angle1="272.453" angle2="108.154" color="black" id="14" length1="4.48481" length2="4.10909" penStyle="hair" point1="10" point4="11" type="simpleInteractive"/>
|
||||||
|
<spline aScale="0" angle1="191.803" angle2="352.997" color="black" id="15" length1="4.38113" length2="7.35189" penStyle="hair" point1="11" point4="12" type="simpleInteractive"/>
|
||||||
|
<spline aScale="0" angle1="79.5634" angle2="243.393" color="black" id="16" length1="4.94668" length2="4.51623" penStyle="hair" point1="12" point4="9" type="simpleInteractive"/>
|
||||||
|
</calculation>
|
||||||
|
<modeling>
|
||||||
|
<point id="30" idObject="9" inUse="false" mx="0.132292" my="0.328592" showLabel="true" type="modeling"/>
|
||||||
|
<point id="31" idObject="10" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<point id="32" idObject="11" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<point id="33" idObject="12" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<point id="35" idObject="9" inUse="false" mx="0.132292" my="0.328592" showLabel="true" type="modeling"/>
|
||||||
|
<point id="36" idObject="10" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<spline id="37" idObject="14" inUse="false" type="modelingSpline"/>
|
||||||
|
<point id="38" idObject="11" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<spline id="39" idObject="15" inUse="false" type="modelingSpline"/>
|
||||||
|
<point id="40" idObject="12" inUse="false" mx="0.132292" my="0.264583" showLabel="true" type="modeling"/>
|
||||||
|
<spline id="41" idObject="16" inUse="false" type="modelingSpline"/>
|
||||||
|
</modeling>
|
||||||
|
<details>
|
||||||
|
<detail forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="34" inLayout="true" mx="-2.365" my="-9.68292" name="Case 2" seamAllowance="true" united="false" version="2" width="1">
|
||||||
|
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
|
||||||
|
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
|
||||||
|
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
|
||||||
|
<nodes>
|
||||||
|
<node idObject="30" type="NodePoint"/>
|
||||||
|
<node idObject="31" type="NodePoint"/>
|
||||||
|
<node after="4" angle="3" idObject="32" type="NodePoint"/>
|
||||||
|
<node angle="2" before="4" idObject="33" type="NodePoint"/>
|
||||||
|
</nodes>
|
||||||
|
</detail>
|
||||||
|
<detail forbidFlipping="false" forceFlipping="false" hideMainPath="false" id="42" inLayout="true" mx="-0.31606" my="12.6064" name="Case 3" seamAllowance="true" united="false" version="2" width="1">
|
||||||
|
<data annotation="" foldPosition="" fontSize="0" height="1" letter="" mx="0" my="0" onFold="false" orientation="" quantity="1" rotation="0" rotationWay="" tilt="" visible="false" width="1"/>
|
||||||
|
<patternInfo fontSize="0" height="1" mx="0" my="0" rotation="0" visible="false" width="1"/>
|
||||||
|
<grainline arrows="0" length="1" mx="0" my="0" rotation="90" visible="false"/>
|
||||||
|
<nodes>
|
||||||
|
<node idObject="35" type="NodePoint"/>
|
||||||
|
<node idObject="36" type="NodePoint"/>
|
||||||
|
<node idObject="37" reverse="0" type="NodeSpline"/>
|
||||||
|
<node after="4" angle="3" idObject="38" type="NodePoint"/>
|
||||||
|
<node idObject="39" reverse="0" type="NodeSpline"/>
|
||||||
|
<node angle="2" before="4" idObject="40" type="NodePoint"/>
|
||||||
|
<node idObject="41" reverse="0" type="NodeSpline"/>
|
||||||
|
</nodes>
|
||||||
|
</detail>
|
||||||
|
</details>
|
||||||
|
<groups/>
|
||||||
|
</draw>
|
||||||
|
</pattern>
|
|
@ -294,14 +294,14 @@ QVector<QPointF> AngleByIntersection(const QVector<QPointF> &points, QPointF p1,
|
||||||
QLineF::IntersectType type = edge2.intersect(bigLine1, &px);
|
QLineF::IntersectType type = edge2.intersect(bigLine1, &px);
|
||||||
if (type == QLineF::NoIntersection)
|
if (type == QLineF::NoIntersection)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
|
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
|
||||||
{
|
{
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
if (QLineF(p2, px).length() > localWidth*maxL)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
pointsIntr.append(px);
|
pointsIntr.append(px);
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,7 @@ QVector<QPointF> AngleByIntersection(const QVector<QPointF> &points, QPointF p1,
|
||||||
type = edge1.intersect(bigLine2, &px);
|
type = edge1.intersect(bigLine2, &px);
|
||||||
if (type == QLineF::NoIntersection)
|
if (type == QLineF::NoIntersection)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
|
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
|
||||||
|
@ -351,57 +351,56 @@ QVector<QPointF> AngleByFirstSymmetry(const QVector<QPointF> &points, QPointF p1
|
||||||
*needRollback = false;
|
*needRollback = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const qreal localWidth = p.MaxLocalSA(width);
|
|
||||||
QVector<QPointF> pointsIntr = points;
|
|
||||||
|
|
||||||
QLineF sEdge(VPointF::FlipPF(bigLine2, p1), VPointF::FlipPF(bigLine2, p2));
|
QLineF sEdge(VPointF::FlipPF(bigLine2, p1), VPointF::FlipPF(bigLine2, p2));
|
||||||
|
|
||||||
QPointF px;
|
QPointF px1;
|
||||||
QLineF::IntersectType type = sEdge.intersect(bigLine1, &px);
|
QLineF::IntersectType type = sEdge.intersect(bigLine1, &px1);
|
||||||
if (type == QLineF::NoIntersection)
|
if (type == QLineF::NoIntersection)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
|
QPointF px2;
|
||||||
{
|
type = sEdge.intersect(bigLine2, &px2);
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
|
||||||
{
|
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
|
||||||
}
|
|
||||||
pointsIntr.append(px);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
|
|
||||||
bool success = false;
|
|
||||||
pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, bigLine2, &success);
|
|
||||||
|
|
||||||
if (needRollback != nullptr)
|
|
||||||
{
|
|
||||||
*needRollback = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type = sEdge.intersect(bigLine2, &px);
|
|
||||||
if (type == QLineF::NoIntersection)
|
if (type == QLineF::NoIntersection)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
|
QVector<QPointF> pointsIntr = points;
|
||||||
|
|
||||||
|
if (IsOutsidePoint(sp2, bigLine1.p1(), px1) && IsOutsidePoint(sp2, bigLine2.p2(), px2))
|
||||||
{
|
{
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1))
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
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 (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());
|
||||||
}
|
}
|
||||||
pointsIntr.append(px);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QLineF allowance(px, p2);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
allowance.setAngle(allowance.angle() + 90);
|
|
||||||
pointsIntr.append(allowance.p2());
|
|
||||||
pointsIntr.append(bigLine2.p1());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return pointsIntr;
|
return pointsIntr;
|
||||||
|
@ -417,65 +416,64 @@ QVector<QPointF> AngleBySecondSymmetry(const QVector<QPointF> &points, QPointF p
|
||||||
*needRollback = false;
|
*needRollback = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QLineF sEdge(VPointF::FlipPF(bigLine1, p2), VPointF::FlipPF(bigLine1, p3));
|
||||||
|
|
||||||
|
QPointF px1;
|
||||||
|
QLineF::IntersectType type = sEdge.intersect(bigLine1, &px1);
|
||||||
|
if (type == QLineF::NoIntersection)
|
||||||
|
{
|
||||||
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPointF px2;
|
||||||
|
type = sEdge.intersect(bigLine2, &px2);
|
||||||
|
if (type == QLineF::NoIntersection)
|
||||||
|
{
|
||||||
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
|
}
|
||||||
|
|
||||||
const qreal localWidth = p.MaxLocalSA(width);
|
const qreal localWidth = p.MaxLocalSA(width);
|
||||||
QVector<QPointF> pointsIntr = points;
|
QVector<QPointF> pointsIntr = points;
|
||||||
|
|
||||||
QLineF sEdge(VPointF::FlipPF(bigLine1, p2), VPointF::FlipPF(bigLine1, p3));
|
if (IsOutsidePoint(sp2, bigLine1.p1(), px1) && IsOutsidePoint(sp2, bigLine2.p2(), px2))
|
||||||
|
|
||||||
QPointF px;
|
|
||||||
QLineF::IntersectType type = sEdge.intersect(bigLine1, &px);
|
|
||||||
if (type == QLineF::NoIntersection)
|
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
bool rollbackFlag = false;
|
||||||
}
|
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px1))
|
||||||
|
|
||||||
bool rollbackFlag = false;
|
|
||||||
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
|
|
||||||
{
|
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
pointsIntr.append(px1);
|
||||||
}
|
}
|
||||||
pointsIntr.append(px);
|
else
|
||||||
}
|
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
|
||||||
else
|
bool success = false;
|
||||||
{// Because artificial loop can lead to wrong clipping we must rollback current seam allowance points
|
pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, sEdge, &success);
|
||||||
bool success = false;
|
rollbackFlag = true;
|
||||||
pointsIntr = VAbstractPiece::RollbackSeamAllowance(pointsIntr, bigLine2, &success);
|
|
||||||
rollbackFlag = true;
|
|
||||||
|
|
||||||
if (needRollback != nullptr)
|
if (needRollback != nullptr)
|
||||||
{
|
{
|
||||||
*needRollback = true;
|
*needRollback = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
type = sEdge.intersect(bigLine2, &px);
|
|
||||||
if (type == QLineF::NoIntersection)
|
|
||||||
{
|
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px))
|
|
||||||
{
|
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
|
||||||
{
|
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (not rollbackFlag)
|
if (IsOutsidePoint(bigLine2.p2(), bigLine2.p1(), px2))
|
||||||
{
|
{
|
||||||
pointsIntr.append(px);
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QLineF allowance(p2, px);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
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;
|
return pointsIntr;
|
||||||
|
@ -484,7 +482,7 @@ QVector<QPointF> AngleBySecondSymmetry(const QVector<QPointF> &points, QPointF p
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QVector<QPointF> AngleByFirstRightAngle(const QVector<QPointF> &points, QPointF p1, QPointF p2,
|
QVector<QPointF> AngleByFirstRightAngle(const QVector<QPointF> &points, QPointF p1, QPointF p2,
|
||||||
const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
|
const QLineF &bigLine1, QPointF sp2, const QLineF &bigLine2,
|
||||||
const VSAPoint &p, qreal width)
|
const VSAPoint &p, qreal width, bool *needRollback = nullptr)
|
||||||
{
|
{
|
||||||
const qreal localWidth = p.MaxLocalSA(width);
|
const qreal localWidth = p.MaxLocalSA(width);
|
||||||
QVector<QPointF> pointsRA = points;
|
QVector<QPointF> pointsRA = points;
|
||||||
|
@ -494,7 +492,7 @@ QVector<QPointF> AngleByFirstRightAngle(const QVector<QPointF> &points, QPointF
|
||||||
QLineF::IntersectType type = edge.intersect(bigLine2, &px);
|
QLineF::IntersectType type = edge.intersect(bigLine2, &px);
|
||||||
if (type == QLineF::NoIntersection)
|
if (type == QLineF::NoIntersection)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
|
|
||||||
QLineF seam(px, p1);
|
QLineF seam(px, p1);
|
||||||
|
@ -507,7 +505,7 @@ QVector<QPointF> AngleByFirstRightAngle(const QVector<QPointF> &points, QPointF
|
||||||
{
|
{
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
if (QLineF(p2, px).length() > localWidth*maxL)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
pointsRA.append(seam.p1());
|
pointsRA.append(seam.p1());
|
||||||
}
|
}
|
||||||
|
@ -544,14 +542,14 @@ QVector<QPointF> AngleBySecondRightAngle(QVector<QPointF> points, QPointF p2, QP
|
||||||
QLineF::IntersectType type = edge.intersect(bigLine1, &px);
|
QLineF::IntersectType type = edge.intersect(bigLine1, &px);
|
||||||
if (type == QLineF::NoIntersection)
|
if (type == QLineF::NoIntersection)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
|
if (IsOutsidePoint(bigLine1.p1(), bigLine1.p2(), px))
|
||||||
{
|
{
|
||||||
if (QLineF(p2, px).length() > localWidth*maxL)
|
if (QLineF(p2, px).length() > localWidth*maxL)
|
||||||
{
|
{
|
||||||
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width);
|
return AngleByLength(points, p2, bigLine1, sp2, bigLine2, p, width, needRollback);
|
||||||
}
|
}
|
||||||
points.append(px);
|
points.append(px);
|
||||||
|
|
||||||
|
@ -902,7 +900,7 @@ QVector<QPointF> VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal wid
|
||||||
return QVector<QPointF>();
|
return QVector<QPointF>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// DumpVector(points); // Uncomment for dumping test data
|
DumpVector(points); // Uncomment for dumping test data
|
||||||
|
|
||||||
points = CorrectEquidistantPoints(points);
|
points = CorrectEquidistantPoints(points);
|
||||||
if ( points.size() < 3 )
|
if ( points.size() < 3 )
|
||||||
|
@ -1020,7 +1018,7 @@ QVector<QPointF> VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal wid
|
||||||
const bool removeFirstAndLast = false;
|
const bool removeFirstAndLast = false;
|
||||||
ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops
|
ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops
|
||||||
ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops
|
ekvPoints = CheckLoops(CorrectEquidistantPoints(ekvPoints, removeFirstAndLast));//Result path can contain loops
|
||||||
// DumpVector(ekvPoints); // Uncomment for dumping test data
|
DumpVector(ekvPoints); // Uncomment for dumping test data
|
||||||
return ekvPoints;
|
return ekvPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1305,7 +1303,7 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default")
|
||||||
p2Line1, width, needRollback);
|
p2Line1, width, needRollback);
|
||||||
case PieceNodeAngle::ByFirstEdgeRightAngle:
|
case PieceNodeAngle::ByFirstEdgeRightAngle:
|
||||||
return AngleByFirstRightAngle(points, p1Line1, p2Line1, bigLine1, crosPoint, bigLine2,
|
return AngleByFirstRightAngle(points, p1Line1, p2Line1, bigLine1, crosPoint, bigLine2,
|
||||||
p2Line1, width);
|
p2Line1, width, needRollback);
|
||||||
case PieceNodeAngle::BySecondEdgeRightAngle:
|
case PieceNodeAngle::BySecondEdgeRightAngle:
|
||||||
return AngleBySecondRightAngle(points, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2,
|
return AngleBySecondRightAngle(points, p2Line1, p1Line2, bigLine1, crosPoint, bigLine2,
|
||||||
p2Line1, width, needRollback);
|
p2Line1, width, needRollback);
|
||||||
|
|
|
@ -5006,6 +5006,21 @@ void TST_VAbstractPiece::EquidistantAngleType_data() const
|
||||||
// See the file "collection/bugs/Issue_#880.val"
|
// See the file "collection/bugs/Issue_#880.val"
|
||||||
QTest::newRow("Issue #880. Piece: Detail_1.") << InputPointsIssue880_Piece_Detail_1() << 75.59055118110237
|
QTest::newRow("Issue #880. Piece: Detail_1.") << InputPointsIssue880_Piece_Detail_1() << 75.59055118110237
|
||||||
<< OutputPointsIssue880_Piece_Detail_1();
|
<< OutputPointsIssue880_Piece_Detail_1();
|
||||||
|
|
||||||
|
// See file src/app/share/collection/bugs/Issue_#934.val
|
||||||
|
QTest::newRow("Issue 934. Case1") << InputPointsIssue934Case1()
|
||||||
|
<< 37.795275590551185 // seam allowance width (1.0 cm)
|
||||||
|
<< OutputPointsIssue934Case1();
|
||||||
|
|
||||||
|
// See file src/app/share/collection/bugs/Issue_#934.val
|
||||||
|
QTest::newRow("Issue 934. Case2") << InputPointsIssue934Case2()
|
||||||
|
<< 37.795275590551185 // seam allowance width (1.0 cm)
|
||||||
|
<< OutputPointsIssue934Case2();
|
||||||
|
|
||||||
|
// See file src/app/share/collection/bugs/Issue_#934.val
|
||||||
|
QTest::newRow("Issue 934. Case3") << InputPointsIssue934Case3()
|
||||||
|
<< 37.795275590551185 // seam allowance width (1.0 cm)
|
||||||
|
<< OutputPointsIssue934Case3();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -10165,8 +10180,7 @@ QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue923Test3_3()
|
||||||
{
|
{
|
||||||
QVector<QPointF> points;
|
QVector<QPointF> points;
|
||||||
|
|
||||||
points += QPointF(-998.323622337918891, 229.426313313416387);
|
points += QPointF(-941.393414608898865, 276.182237988132670);
|
||||||
points += QPointF(-925.469085441362722, 240.352497361176461);
|
|
||||||
points += QPointF(-814.172528355339296, -10.064756082376469);
|
points += QPointF(-814.172528355339296, -10.064756082376469);
|
||||||
points += QPointF(-797.048974584331063, -48.592752067144829);
|
points += QPointF(-797.048974584331063, -48.592752067144829);
|
||||||
points += QPointF(-778.560274683193597, -50.549491761193529);
|
points += QPointF(-778.560274683193597, -50.549491761193529);
|
||||||
|
@ -10224,7 +10238,7 @@ QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue923Test3_3()
|
||||||
points += QPointF(-823.692975528084730, 369.271805550997954);
|
points += QPointF(-823.692975528084730, 369.271805550997954);
|
||||||
points += QPointF(-829.575336882823422, 366.626948794191208);
|
points += QPointF(-829.575336882823422, 366.626948794191208);
|
||||||
points += QPointF(-835.815139714856855, 362.892089667033019);
|
points += QPointF(-835.815139714856855, 362.892089667033019);
|
||||||
points += QPointF(-998.323622337918891, 229.426313313416387);
|
points += QPointF(-941.393414608898865, 276.182237988132670);
|
||||||
|
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
@ -10577,6 +10591,7 @@ QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue923Test4_4()
|
||||||
{
|
{
|
||||||
QVector<QPointF> points;
|
QVector<QPointF> points;
|
||||||
|
|
||||||
|
points += QPointF(-941.393414608898865, 276.182237988132670);
|
||||||
points += QPointF(-814.172528355339296, -10.064756082376469);
|
points += QPointF(-814.172528355339296, -10.064756082376469);
|
||||||
points += QPointF(-797.048974584331063, -48.592752067144829);
|
points += QPointF(-797.048974584331063, -48.592752067144829);
|
||||||
points += QPointF(-778.560274683193597, -50.549491761193529);
|
points += QPointF(-778.560274683193597, -50.549491761193529);
|
||||||
|
@ -10634,8 +10649,7 @@ QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue923Test4_4()
|
||||||
points += QPointF(-823.692975528084730, 369.271805550997954);
|
points += QPointF(-823.692975528084730, 369.271805550997954);
|
||||||
points += QPointF(-829.575336882823422, 366.626948794191208);
|
points += QPointF(-829.575336882823422, 366.626948794191208);
|
||||||
points += QPointF(-835.815139714856855, 362.892089667033019);
|
points += QPointF(-835.815139714856855, 362.892089667033019);
|
||||||
points += QPointF(-949.648673098827885, 294.756569590472964);
|
points += QPointF(-941.393414608898865, 276.182237988132670);
|
||||||
points += QPointF(-814.172528355339296, -10.064756082376469);
|
|
||||||
|
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
@ -11459,3 +11473,305 @@ QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue923Test6_6()
|
||||||
|
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<VSAPoint> TST_VAbstractPiece::InputPointsIssue934Case1() const
|
||||||
|
{
|
||||||
|
QVector<VSAPoint> points;
|
||||||
|
|
||||||
|
points += VSAPoint(30.000000000000000, 39.999874015748034);
|
||||||
|
points += VSAPoint(784.001052525227124, 93.624081022807857);
|
||||||
|
|
||||||
|
VSAPoint p = VSAPoint(603.941048041563704, 630.489688374883372);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(149.328168036696184, 622.197225159899745);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue934Case1() const
|
||||||
|
{
|
||||||
|
QVector<QPointF> 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(-17.032721988884830, -1.235810543606590);
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<VSAPoint> TST_VAbstractPiece::InputPointsIssue934Case2() const
|
||||||
|
{
|
||||||
|
QVector<VSAPoint> points;
|
||||||
|
|
||||||
|
points += VSAPoint(1133.858267716535465, 0.000000000000000);
|
||||||
|
points += VSAPoint(1626.414077999261963, 28.823250050281736);
|
||||||
|
|
||||||
|
VSAPoint p = VSAPoint(1708.662782184241905, 444.933722174073409);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(978.059754412127063, 473.971248193821054);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue934Case2() const
|
||||||
|
{
|
||||||
|
QVector<QPointF> 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(1107.034334293208985, -39.429607754508027);
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<VSAPoint> TST_VAbstractPiece::InputPointsIssue934Case3() const
|
||||||
|
{
|
||||||
|
QVector<VSAPoint> points;
|
||||||
|
|
||||||
|
points += VSAPoint(1133.858267716535465, 0.000000000000000);
|
||||||
|
points += VSAPoint(1626.414077999261963, 28.823250050281736);
|
||||||
|
points += VSAPoint(1626.414077999261963, 28.823250050281736);
|
||||||
|
|
||||||
|
VSAPoint p = VSAPoint(1627.925525207237797, 60.028107039649264);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1632.474444857430171, 117.651054706235584);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1638.880247750070112, 170.780189339920014);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1647.171437175555184, 220.804740431454292);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1657.376516424283182, 269.113937471590248);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1669.523988786652353, 317.097009951079542);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1683.642357553060720, 366.143187360674062);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1699.760126013905392, 417.641699191125440);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1708.662782184241905, 444.933722174073409);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1708.662782184241905, 444.933722174073409);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1708.662782184241905, 444.933722174073409);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::BySecondEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1677.251229240104976, 451.246684764538941);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1605.086594041950320, 463.155242122690083);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1544.272339765547713, 471.094839513925308);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1501.274196476889529, 475.816264599789406);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1456.403111491504887, 479.956529052348401);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1409.875251575960647, 483.430528153818273);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1361.906783496823664, 486.153157186415115);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1312.713874020660569, 488.039311432354793);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1262.512689914038219, 489.003886173853402);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1211.519397943523927, 488.961776693126922);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1159.950164875684550, 487.827878272391445);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1108.021157477086035, 485.517086193862838);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1055.948542514296605, 481.944295739757194);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1003.948486753882094, 477.024402192290495);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetSAAfter(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(978.059754412127063, 473.971248193821054);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(978.059754412127063, 473.971248193821054);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(978.059754412127063, 473.971248193821054);
|
||||||
|
p.SetSABefore(151.181);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByFirstEdgeSymmetry);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(984.500664049167881, 439.858339084691238);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(998.403341335729920, 374.895601998811230);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1013.735113164965696, 313.199834991297735);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1030.722718345428348, 254.050229972719023);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1049.592895685671465, 196.725978853643085);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1070.572383994247502, 140.506273544638077);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1093.887922079709597, 84.670305956272159);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
p = VSAPoint(1119.766248750610885, 28.497267999113369);
|
||||||
|
p.SetAngleType(PieceNodeAngle::ByLengthCurve);
|
||||||
|
points += p;
|
||||||
|
|
||||||
|
points += VSAPoint(1133.858267716535465, 0.000000000000000);
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<QPointF> TST_VAbstractPiece::OutputPointsIssue934Case3() const
|
||||||
|
{
|
||||||
|
QVector<QPointF> points;
|
||||||
|
|
||||||
|
points += QPointF(1111.075514893730315, -39.193127021735194);
|
||||||
|
points += QPointF(1662.522212799755380, -6.923715654880951);
|
||||||
|
points += QPointF(1665.648765146942878, 57.626086911110946);
|
||||||
|
points += QPointF(1670.091199415827987, 113.900142527237790);
|
||||||
|
points += QPointF(1676.303630411694712, 165.425468596995557);
|
||||||
|
points += QPointF(1684.322260121831278, 213.805541833033089);
|
||||||
|
points += QPointF(1694.200361802327961, 260.566879872136496);
|
||||||
|
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(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(947.446497080812378, 432.396369275163750);
|
||||||
|
points += QPointF(961.574442359626801, 366.381027352609578);
|
||||||
|
points += QPointF(977.219989780144260, 303.422612688453626);
|
||||||
|
points += QPointF(994.595947496389158, 242.920792401422716);
|
||||||
|
points += QPointF(1013.924089039867795, 184.205327277493041);
|
||||||
|
points += QPointF(1035.416023464977798, 126.612396404806589);
|
||||||
|
points += QPointF(1059.274426966970623, 69.476376649892870);
|
||||||
|
points += QPointF(1085.656320891028145, 12.210265605542077);
|
||||||
|
points += QPointF(1111.075514893730315, -39.193127021735194);
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
|
@ -161,6 +161,15 @@ private:
|
||||||
|
|
||||||
QVector<VSAPoint> InputPointsIssue923Test6_6();
|
QVector<VSAPoint> InputPointsIssue923Test6_6();
|
||||||
QVector<QPointF> OutputPointsIssue923Test6_6();
|
QVector<QPointF> OutputPointsIssue923Test6_6();
|
||||||
|
|
||||||
|
QVector<VSAPoint> InputPointsIssue934Case1() const;
|
||||||
|
QVector<QPointF> OutputPointsIssue934Case1() const;
|
||||||
|
|
||||||
|
QVector<VSAPoint> InputPointsIssue934Case2() const;
|
||||||
|
QVector<QPointF> OutputPointsIssue934Case2() const;
|
||||||
|
|
||||||
|
QVector<VSAPoint> InputPointsIssue934Case3() const;
|
||||||
|
QVector<QPointF> OutputPointsIssue934Case3() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TST_VABSTRACTPIECE_H
|
#endif // TST_VABSTRACTPIECE_H
|
||||||
|
|
Loading…
Reference in New Issue
Block a user