Skip to content
Snippets Groups Projects
multiline.cpp 1.25 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pelotrio's avatar
    Pelotrio committed
    
    #include "multiline.h"
    #include "scene.h"
    
    MultiLine::MultiLine(Point startIn, Scene *s) : Shape(startIn, s->getDefaultColour()) {
        points.push_back(Point(0, 0));
    }
    
    void MultiLine::addPoint(Point toAdd) {
        toAdd = Point(toAdd.x - start.x, toAdd.y - start.y);
        points.push_back(toAdd);
        points.push_back(toAdd);
    }
    
    void MultiLine::display(QPainter *qp) {
        qp->setPen(QPen(colour, 2, Qt::SolidLine));
        QVector<QPoint> qv;
        for (Point &p: points) {
            qv.push_back(QPoint(start.x + p.x, start.y + p.y));
        }
        qp->drawLines(qv);
    }
    
    void MultiLine::displayHighlight(QPainter *qp, QColor colourIn) {
        qp->setPen(QPen(colourIn, 2, Qt::DashLine));
        QVector<QPoint> qv;
        for (Point &p: points) {
            qv.push_back(QPoint(start.x + p.x, start.y + p.y));
        }
        qp->drawLines(qv);
    }
    
    void MultiLine::update(Point in, Scene *parent) {
        addPoint(in);
    }
    
    float MultiLine::innerDistance() {
        return distanceBetweenPoints(start, points.back());
    }
    
    bool MultiLine::pointInShape(Point in) {
        Point delta(in.x - start.x, in.y - start.y);
        for (int i = 1; i < (int) points.size(); i += 2) {
            Point &p = points[i];
            if (distanceBetweenPoints(delta, p) <= 1.5) {
                return true;
            }
        }
        return false;
    }