mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 22:00:35 +01:00
Prise en compte d'un cas particulier pour les lignes dans l'editeur d'elements.
Si une ligne equivalait a un point (= avait ses deux points egaux), la fonction pour calculer les quatre points delimitant la shape renvoyait un resultat stupide, ce qui genereait de nombreux avertissements en mode release et l'echec d'un assert en mode debug. De plus, l'enregistrement de ce genre de lignes est desormais evite dans la methode toXml(). git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@98 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -21,9 +21,17 @@ void PartLine::paint(QPainter *painter, const QStyleOptionGraphicsItem */*q*/, Q
|
||||
}
|
||||
|
||||
const QDomElement PartLine::toXml(QDomDocument &xml_document) const {
|
||||
QDomElement xml_element = xml_document.createElement("line");
|
||||
|
||||
QPointF p1(sceneP1());
|
||||
QPointF p2(sceneP2());
|
||||
|
||||
// cas particulier : on n'enregistre pas les lignes equivalentes a un point
|
||||
if (p1 == p2) {
|
||||
QDomElement *null_qdom_elmt = new QDomElement();
|
||||
return(*null_qdom_elmt);
|
||||
}
|
||||
|
||||
QDomElement xml_element = xml_document.createElement("line");
|
||||
xml_element.setAttribute("x1", p1.x());
|
||||
xml_element.setAttribute("y1", p1.y());
|
||||
xml_element.setAttribute("x2", p2.x());
|
||||
@@ -106,10 +114,21 @@ QRectF PartLine::boundingRect() const {
|
||||
@return une liste contenant les deux points de la droite + les 4 points entourant ces deux points
|
||||
*/
|
||||
QList<QPointF> PartLine::fourShapePoints() const {
|
||||
const qreal marge = 2.0;
|
||||
// on a donc A(xa , ya) et B(xb, yb)
|
||||
QPointF a = line().p1();
|
||||
QPointF b = line().p2();
|
||||
|
||||
QList<QPointF> result;
|
||||
|
||||
// cas particulier : la droite se ramene a un point
|
||||
if (a == b) {
|
||||
result << QPointF(a.x() - marge, a.y() - marge);
|
||||
result << QPointF(a.x() - marge, a.y() + marge);
|
||||
result << QPointF(a.x() + marge, a.y() + marge);
|
||||
result << QPointF(a.x() + marge, a.y() - marge);
|
||||
} else {
|
||||
|
||||
// on calcule le vecteur AB : (xb-xa, yb-ya)
|
||||
QPointF v_ab = b - a;
|
||||
|
||||
@@ -119,7 +138,7 @@ QList<QPointF> PartLine::fourShapePoints() const {
|
||||
// ensuite on definit le vecteur u(a, b) qui est egal au vecteur AB divise
|
||||
// par sa longueur et multiplie par la longueur de la marge que tu veux
|
||||
// laisser
|
||||
QPointF u = v_ab / ab * 2.0;
|
||||
QPointF u = v_ab / ab * marge;
|
||||
|
||||
// on d<>finit le vecteur v(-b , a) qui est perpendiculaire <20> AB
|
||||
QPointF v(-u.y(), u.x());
|
||||
@@ -130,8 +149,8 @@ QList<QPointF> PartLine::fourShapePoints() const {
|
||||
QPointF i = b - n; // I = B - N
|
||||
QPointF j = b - m; // J = B - M
|
||||
|
||||
QList<QPointF> result;
|
||||
result << h << i << j << k;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
@@ -100,3 +100,4 @@ SOURCES += aboutqet.cpp \
|
||||
RESOURCES += qelectrotech.qrc
|
||||
TRANSLATIONS += lang/qet_en.ts lang/qt_fr.ts
|
||||
QT += xml
|
||||
CONFIG += release
|
||||
|
||||
Reference in New Issue
Block a user