From e48b7116a525b1c1ca7b980f8d4d0285aa4437fe Mon Sep 17 00:00:00 2001 From: xavier Date: Thu, 16 Apr 2009 22:41:20 +0000 Subject: [PATCH] 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 --- sources/conductor.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/sources/conductor.cpp b/sources/conductor.cpp index b0a1ab7fc..5c2147496 100644 --- a/sources/conductor.cpp +++ b/sources/conductor.cpp @@ -1134,6 +1134,33 @@ QSet Conductor::relatedConductors() const { 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 */ @@ -1177,7 +1204,7 @@ QList Conductor::junctions() const { ConductorSegment *segment = c_segments[j]; QRectF rect(segment -> firstPoint(), segment -> secondPoint()); // 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; // ce point commun ne doit pas etre une bifurcation identique a celle-ci QList other_conductor_bends = c -> bends();