Correction du bug #21 : Une probable regression sur la methode QRectF::contains a partir de Qt 4.5 provoquait une mauvaise detection des points de jonction entre conducteurs sous Windows comme sous X11.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@591 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2009-04-16 22:41:20 +00:00
parent ebca18d563
commit e48b7116a5

View File

@@ -1134,6 +1134,33 @@ QSet<Conductor *> Conductor::relatedConductors() const {
return(other_conductors); return(other_conductors);
} }
/**
@param a reel
@param b reel
@param c reel
@return true si a est entre b et c ou est egal a l'un des deux
*/
bool isBetween(qreal a, qreal b, qreal c) {
if (b <= c) {
return(a >= b && a <= c);
} else {
return(a <= b && a >= c);
}
}
/**
@param a point
@param b point
@param c point
@return true si le point a est contenu dans le rectangle delimite par les points b et c
*/
bool isContained(const QPointF &a, const QPointF &b, const QPointF &c) {
return(
isBetween(a.x(), b.x(), c.x()) &&
isBetween(a.y(), b.y(), c.y())
);
}
/** /**
@return la liste des positions des jonctions avec d'autres conducteurs @return la liste des positions des jonctions avec d'autres conducteurs
*/ */
@@ -1177,7 +1204,7 @@ QList<QPointF> Conductor::junctions() const {
ConductorSegment *segment = c_segments[j]; ConductorSegment *segment = c_segments[j];
QRectF rect(segment -> firstPoint(), segment -> secondPoint()); QRectF rect(segment -> firstPoint(), segment -> secondPoint());
// un point commun a ete trouve sur ce segment // un point commun a ete trouve sur ce segment
if (rect.contains(conductor_point)) { if (isContained(conductor_point, segment -> firstPoint(), segment -> secondPoint())) {
is_junction = true; is_junction = true;
// ce point commun ne doit pas etre une bifurcation identique a celle-ci // ce point commun ne doit pas etre une bifurcation identique a celle-ci
QList<ConductorBend> other_conductor_bends = c -> bends(); QList<ConductorBend> other_conductor_bends = c -> bends();