#include "line.h" Line::Line() :QLine() { m_selected = true; } bool Line::isHit(const QPoint &clickPoint) { QVector3D a(p2() - p1()); QVector3D r1(p1()); QVector3D rq(clickPoint); float dist = rq.distanceToLine(r1, a.normalized()); return dist < 5; } void Line::setSelected(bool selected) { m_selected = selected; } void Line::draw(QPainter *painter) { if(m_selected) { QPen penTemp(Qt::DotLine); penTemp.setColor(Qt::red); painter->setPen(penTemp); painter->drawEllipse(p1(), 5, 5); painter->drawEllipse(p2(), 5, 5); } else { QPen penNormal(Qt::SolidLine); penNormal.setColor(Qt::black); painter->setPen(penNormal); } painter->drawLine(p1(), p2()); } void Line::move(const QPoint &oldPoint, const QPoint &newPoint) { if(m_selected) { QPoint offset = newPoint - oldPoint; QVector3D vecOld(oldPoint); if(vecOld.distanceToPoint(QVector3D(p1())) < 5) { setP1(p1() + offset); } else if(vecOld.distanceToPoint(QVector3D(p2())) < 5) { setP2(p2() + offset); } else { setP1(p1() + offset); setP2(p2() + offset); } } }