Fixed bug with circle intersection. Case with one real and one theoretical

intersection.

--HG--
branch : release
This commit is contained in:
Roman Telezhynskyi 2015-03-19 16:20:25 +02:00
parent 37dbe31050
commit 0f33cb6352

View File

@ -106,15 +106,35 @@ QPointF VToolPointOfContact::FindPoint(const qreal &radius, const QPointF &cente
return p1; return p1;
break; break;
case 2: case 2:
if (QLineF(firstPoint, p1).length() <= QLineF(firstPoint, p2).length()) {
const bool flagP1 = VGObject::PointInSegment (p1, firstPoint, secondPoint);
const bool flagP2 = VGObject::PointInSegment (p2, firstPoint, secondPoint);
if ((flagP1 == true && flagP2 == true) ||
(flagP1 == false && flagP2 == false)/*In case we have something wrong*/)
{ {
return p1; // We don't have options for choosing correct point. Use closest to segment first point.
if (QLineF(firstPoint, p1).length() <= QLineF(firstPoint, p2).length())
{
return p1;
}
else
{
return p2;
}
} }
else else
{ { // In this case we have one real and one theoretical intersection.
return p2; if (flagP1)
{
return p1;
}
else
{
return p2;
}
} }
break; break;
}
default: default:
qDebug() << "Unxpected value" << res; qDebug() << "Unxpected value" << res;
return QPointF(); return QPointF();