mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-23 10:30:53 +01:00
Prolongement des bornes pour ajouter des points d'accroche ulterieurement
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@40 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -90,25 +90,85 @@ void Conducteur::calculeConducteurWithNewPos(const Borne *b, const QPointF &newp
|
|||||||
priv_calculeConducteur(p1, p2);
|
priv_calculeConducteur(p1, p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param p1 Coordonnees du point d'amarrage de la borne 1
|
||||||
|
@param p2 Coordonnees du point d'amarrage de la borne 2
|
||||||
|
*/
|
||||||
void Conducteur::priv_calculeConducteur(const QPointF &p1, const QPointF &p2) {
|
void Conducteur::priv_calculeConducteur(const QPointF &p1, const QPointF &p2) {
|
||||||
QPainterPath t;
|
QPainterPath t;
|
||||||
QPointF depart, arrivee;
|
QPointF sp1, sp2, depart, newp1, newp2, arrivee, depart0, arrivee0;
|
||||||
Borne::Orientation ori_depart, ori_arrivee;
|
Borne::Orientation ori_borne1, ori_borne2, ori_depart, ori_arrivee;
|
||||||
|
|
||||||
|
// recupere les orientations des bornes
|
||||||
|
ori_borne1 = borne1 -> orientation();
|
||||||
|
ori_borne2 = borne2 -> orientation();
|
||||||
|
|
||||||
|
// mappe les points par rapport a la scene
|
||||||
|
sp1 = mapFromScene(p1);
|
||||||
|
sp2 = mapFromScene(p2);
|
||||||
|
|
||||||
|
// tailles des prolongements
|
||||||
|
qreal first_seg_size = 10;
|
||||||
|
qreal last_seg_size = 10;
|
||||||
|
|
||||||
|
// prolonge la borne 1
|
||||||
|
switch(ori_borne1) {
|
||||||
|
case Borne::Nord:
|
||||||
|
newp1 = QPointF(sp1.x(), sp1.y() - first_seg_size);
|
||||||
|
break;
|
||||||
|
case Borne::Est:
|
||||||
|
newp1 = QPointF(sp1.x() + first_seg_size, sp1.y());
|
||||||
|
break;
|
||||||
|
case Borne::Sud:
|
||||||
|
newp1 = QPointF(sp1.x(), sp1.y() + first_seg_size);
|
||||||
|
break;
|
||||||
|
case Borne::Ouest:
|
||||||
|
newp1 = QPointF(sp1.x() - first_seg_size, sp1.y());
|
||||||
|
break;
|
||||||
|
default: newp1 = sp1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// prolonge la borne 2
|
||||||
|
switch(ori_borne2) {
|
||||||
|
case Borne::Nord:
|
||||||
|
newp2 = QPointF(sp2.x(), sp2.y() - last_seg_size);
|
||||||
|
break;
|
||||||
|
case Borne::Est:
|
||||||
|
newp2 = QPointF(sp2.x() + last_seg_size, sp2.y());
|
||||||
|
break;
|
||||||
|
case Borne::Sud:
|
||||||
|
newp2 = QPointF(sp2.x(), sp2.y() + last_seg_size);
|
||||||
|
break;
|
||||||
|
case Borne::Ouest:
|
||||||
|
newp2 = QPointF(sp2.x() - last_seg_size, sp2.y());
|
||||||
|
break;
|
||||||
|
default: newp2 = sp2;
|
||||||
|
}
|
||||||
|
|
||||||
// distingue le depart de l'arrivee : le trajet se fait toujours de gauche a droite
|
// distingue le depart de l'arrivee : le trajet se fait toujours de gauche a droite
|
||||||
if (p1.x() <= p2.x()) {
|
if (newp1.x() <= newp2.x()) {
|
||||||
depart = mapFromScene(p1);
|
depart = newp1;
|
||||||
arrivee = mapFromScene(p2);
|
arrivee = newp2;
|
||||||
ori_depart = borne1 -> orientation();
|
depart0 = sp1;
|
||||||
ori_arrivee = borne2 -> orientation();
|
arrivee0 = sp2;
|
||||||
|
ori_depart = ori_borne1;
|
||||||
|
ori_arrivee = ori_borne2;
|
||||||
} else {
|
} else {
|
||||||
depart = mapFromScene(p2);
|
depart = newp2;
|
||||||
arrivee = mapFromScene(p1);
|
arrivee = newp1;
|
||||||
ori_depart = borne2 -> orientation();
|
depart0 = sp2;
|
||||||
ori_arrivee = borne1 -> orientation();
|
arrivee0 = sp1;
|
||||||
|
ori_depart = ori_borne2;
|
||||||
|
ori_arrivee = ori_borne1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// debut du trajet
|
// debut du trajet
|
||||||
t.moveTo(depart);
|
t.moveTo(depart0);
|
||||||
|
|
||||||
|
// prolongement de la borne de depart
|
||||||
|
t.lineTo(depart);
|
||||||
|
|
||||||
|
// commence le vrai trajet
|
||||||
if (depart.y() < arrivee.y()) {
|
if (depart.y() < arrivee.y()) {
|
||||||
// trajet descendant
|
// trajet descendant
|
||||||
if ((ori_depart == Borne::Nord && (ori_arrivee == Borne::Sud || ori_arrivee == Borne::Ouest)) || (ori_depart == Borne::Est && ori_arrivee == Borne::Ouest)) {
|
if ((ori_depart == Borne::Nord && (ori_arrivee == Borne::Sud || ori_arrivee == Borne::Ouest)) || (ori_depart == Borne::Est && ori_arrivee == Borne::Ouest)) {
|
||||||
@@ -140,8 +200,13 @@ void Conducteur::priv_calculeConducteur(const QPointF &p1, const QPointF &p2) {
|
|||||||
t.lineTo(depart.x(), arrivee.y()); // cas « 2 »
|
t.lineTo(depart.x(), arrivee.y()); // cas « 2 »
|
||||||
} else t.lineTo(arrivee.x(), depart.y()); // cas « 1 »
|
} else t.lineTo(arrivee.x(), depart.y()); // cas « 1 »
|
||||||
}
|
}
|
||||||
// fin du trajet
|
|
||||||
|
// fin du vrai trajet
|
||||||
t.lineTo(arrivee);
|
t.lineTo(arrivee);
|
||||||
|
|
||||||
|
// prolongement de la borne d'arrivee
|
||||||
|
t.lineTo(arrivee0);
|
||||||
|
|
||||||
setPath(t);
|
setPath(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user