1 #include "qnstviewlink.h"
11 QnstViewLink::~QnstViewLink()
16 QLineF QnstViewLink::getLine()
const
21 void QnstViewLink::setLine(QLineF line)
28 void QnstViewLink::adjust(
bool avoidCollision)
30 QPointF pointa = line.p1();
31 QPointF pointb = line.p2();
33 if (pointa.x() <= pointb.x() && pointa.y() <= pointb.y())
36 setLeft(pointa.x()-6);
37 setWidth((pointb.x()-6)-(pointa.x()-6) + 12);
38 setHeight((pointb.y()-6)-(pointa.y()-6) + 12);
40 else if (pointa.x() > pointb.x() && pointa.y() < pointb.y())
43 setLeft(pointb.x()-6);
44 setWidth((pointa.x()-6)-(pointb.x()-6) + 12);
45 setHeight((pointb.y()-6)-(pointa.y()-6) + 12);
47 else if (pointa.x() < pointb.x() && pointa.y() > pointb.y())
50 setLeft((pointa.x()-6));
51 setWidth((pointb.x()-6)-(pointa.x()-6) + 12);
52 setHeight((pointa.y()-6)-(pointb.y()-6) + 12);
54 else if (pointa.x() > pointb.x() && pointa.y() > pointb.y())
57 setLeft(pointb.x()-6);
58 setWidth((pointa.x()-6)-(pointb.x()-6) + 12);
59 setHeight((pointa.y()-6)-(pointb.y()-6) + 12);
66 void QnstViewLink::draw(QPainter* painter)
68 painter->setRenderHint(QPainter::Antialiasing,
true);
72 QPointF pointa = line.p1();
73 QPointF pointb = line.p2();
75 if (pointa.x() <= pointb.x() && pointa.y() <= pointb.y())
77 painter->setPen(QPen(QBrush(QColor(
"#000000")), 1, Qt::DashLine));
79 painter->drawLine(4+6,4+6, 4+6+getWidth()-12-2, 4+6+getHeight()-12-2);
81 painter->setBrush(QBrush(QColor(
"#000000")));
82 painter->setPen(Qt::NoPen);
84 painter->drawEllipse(4,4,12,12);
86 p1 = QPointF(4+6+getWidth()-12, 4+6+getHeight()-12);
89 else if (pointa.x() > pointb.x() && pointa.y() < pointb.y())
91 painter->setPen(QPen(QBrush(QColor(
"#000000")), 1, Qt::DashLine));
93 painter->drawLine(4+6+getWidth()-12,4+6, 4+6, 4+6+getHeight()-12);
95 painter->setBrush(QBrush(QColor(
"#000000")));
96 painter->setPen(Qt::NoPen);
98 painter->drawEllipse(4+getWidth()-12,4,12,12);
100 p1 = QPointF(4+6, 4+6+getHeight()-12);
103 else if (pointa.x() < pointb.x() && pointa.y() > pointb.y())
105 painter->setPen(QPen(QBrush(QColor(
"#000000")), 1, Qt::DashLine));
107 painter->drawLine(4+6, 4+6+getHeight()-12, 4+6+getWidth()-12, 4+6);
109 painter->setBrush(QBrush(QColor(
"#000000")));
110 painter->setPen(Qt::NoPen);
112 painter->drawEllipse(4, 4+getHeight()-12, 12, 12);
114 p1 = QPointF(4+6+getWidth()-12, 4+6);
117 else if (pointa.x() > pointb.x() && pointa.y() > pointb.y())
119 painter->setPen(QPen(QBrush(QColor(
"#000000")), 1, Qt::DashLine));
121 painter->drawLine(4+6+getWidth()-12, 4+6+getHeight()-12, 4+6, 4+6);
123 painter->setBrush(QBrush(QColor(
"#000000")));
124 painter->setPen(Qt::NoPen);
126 painter->drawEllipse(4+getWidth()-12, 4+getHeight()-12, 12, 12);
128 p1 = QPointF(4+6, 4+6);
131 double angle = ::acos(line.dx() / line.length());
135 angle = (PI * 2) - angle;
138 QPointF p2 = p1 - QPointF(sin(angle + PI / 3) * 12, cos(angle + PI / 3) * 12);
139 QPointF p3 = p1 - QPointF(sin(angle + PI - PI / 3) * 12, cos(angle + PI - PI / 3) * 12);
141 QVector<QPointF> polygon;
147 painter->drawPolygon(QPolygonF(polygon));
150 void QnstViewLink::delineate(QPainterPath* painter)
const
155 void QnstViewLink::move(QGraphicsSceneMouseEvent* event)
160 void QnstViewLink::resize(QGraphicsSceneMouseEvent* event)