Fixed broken checking intersection workpieces.

--HG--
branch : release
This commit is contained in:
Roman Telezhynskyi 2015-05-04 10:59:35 +03:00
parent 47c7609ebb
commit 2b6f9c9fef

View File

@ -368,6 +368,9 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutDetail &detail, const i
return CrossingType::EdgeError; return CrossingType::EdgeError;
} }
const QLineF gEdge = gContour.GlobalEdge(globalI);
const QLineF dEdge = detail.Edge(detailI);
for (int i = 1; i <= globalEdgesCount; i++) for (int i = 1; i <= globalEdgesCount; i++)
{ {
const QLineF globalEdge = gContour.GlobalEdge(i); const QLineF globalEdge = gContour.GlobalEdge(i);
@ -390,11 +393,9 @@ VPosition::CrossingType VPosition::Crossing(const VLayoutDetail &detail, const i
} }
QPointF xPoint; QPointF xPoint;
QLineF::IntersectType type = globalEdge.intersect(detailEdge, &xPoint); if (globalEdge.intersect(detailEdge, &xPoint) == QLineF::BoundedIntersection)
if (type == QLineF::BoundedIntersection)
{ {
if (TrueIntersection(gContour.GlobalEdge(globalI), detail.Edge(detailI), xPoint)) if (TrueIntersection(gEdge, dEdge, xPoint))
{ {
return CrossingType::Intersection; return CrossingType::Intersection;
} }
@ -645,12 +646,24 @@ void VPosition::Rotate(int increase)
bool VPosition::TrueIntersection(const QLineF &gEdge, const QLineF &dEdge, const QPointF &p) const bool VPosition::TrueIntersection(const QLineF &gEdge, const QLineF &dEdge, const QPointF &p) const
{ {
const QPointF pX = RoundedPoint(p); const QPointF pX = RoundedPoint(p);
QPointF xPoint;
if (gEdge.intersect(dEdge, &xPoint) == QLineF::NoIntersection)
{
const QPointF gP1 = RoundedPoint(gEdge.p1()); const QPointF gP1 = RoundedPoint(gEdge.p1());
const QPointF gP2 = RoundedPoint(gEdge.p2()); const QPointF gP2 = RoundedPoint(gEdge.p2());
const QPointF dP1 = RoundedPoint(dEdge.p1()); const QPointF dP1 = RoundedPoint(dEdge.p1());
const QPointF dP2 = RoundedPoint(dEdge.p2()); const QPointF dP2 = RoundedPoint(dEdge.p2());
// If two edges are same line ignorring all intersection point that are equal to the start or the end point
return !(pX == gP1 || pX == gP2 || pX == dP1 || pX == dP2); return !(pX == gP1 || pX == gP2 || pX == dP1 || pX == dP2);
} }
else
{
// Rotation case. Ignore intersection only in the point of edges intersection.
return pX != RoundedPoint(xPoint);
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QPointF VPosition::RoundedPoint(const QPointF &p) const QPointF VPosition::RoundedPoint(const QPointF &p) const