Fixed broken checking intersection workpieces.
--HG-- branch : release
This commit is contained in:
parent
47c7609ebb
commit
2b6f9c9fef
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user