Exemplo n.º 1
0
void XYScale::rescale() {
    KSL_PUBLIC(XYScale);

    if (m->itemList.isEmpty()) {
        setXrange(-1.0, 1.0);
        setYrange(-1.0, 1.0);
        return;
    }

    auto iter = m->itemList.begin();
    auto end = m->itemList.end();
    FigureItem *item = *iter++;

    bool firstRescalable = item->rescalable();
    while (!item->rescalable() && iter != end) {
        item = *iter++;
        if (item->rescalable())
            firstRescalable = true;
    }
    if (!firstRescalable)
        return;

    auto itemRect = item->dataRect();
    setXrange(itemRect.left(), itemRect.right());
    setYrange(itemRect.top(), itemRect.bottom());

    while (iter != end) {
        item = *iter++;
        if (item->rescalable()) {
            itemRect = item->dataRect();
            if (itemRect.left() < m->xMin) m->xMin = itemRect.left();
            if (itemRect.right() > m->xMax) m->xMax = itemRect.right();
            if (itemRect.top() < m->yMin) m->yMin = itemRect.top();
            if (itemRect.bottom() > m->yMax) m->yMax = itemRect.bottom();
        }
    }
    m->width = m->xMax - m->xMin;
    double bound = m->width / 20.0;
    m->xMin -= bound;
    m->xMax += bound;
    m->width += 2.0 * bound;

    m->height = m->yMax - m->yMin;
    bound = m->height / 20.0;
    m->yMin -= bound;
    m->yMax += bound;
    m->height += 2.0 * bound;
}
Exemplo n.º 2
0
void QSLPlotArea::addPlotable(QSLPlotable *plt)
{
    if (mPlots.size() == 0) {
        mXminData = plt->xMin();
        mXmaxData = plt->xMax();
        mYminData = plt->yMin();
        mYmaxData = plt->yMax();
    } else {
        if (plt->xMin() < mXminData) mXminData = plt->xMin();
        if (plt->xMax() > mXmaxData) mXmaxData = plt->xMax();
        if (plt->yMin() < mYminData) mYminData = plt->yMin();
        if (plt->yMax() > mYmaxData) mYmaxData = plt->yMax();
    }

    QObject::connect(plt, SIGNAL(appearenceChanged()), this, SLOT(repaint()));
    QObject::connect(plt, SIGNAL(dataChanged()), this, SLOT(replot()));
    QObject::connect(plt, SIGNAL(rangesChanged()), this, SLOT(rescale()));

    plt->mParentPlot = this;
    mPlots.append(plt);

    setXrange(mXminData,mXmaxData);
    setYrange(mYminData,mYmaxData);

    emit plotsChanged();
}
Exemplo n.º 3
0
QSLPlotArea::QSLPlotArea(QWidget *parent)
    : QWidget(parent)
    , mXlowerBound(20)
    , mXupperBound(20)
    , mYlowerBound(20)
    , mYupperBound(20)
{
    setXrange(0,1);
    setYrange(0,1);
    setBackColor(Qt::white);
    setAutoFillBackground(true);
    setMinimumSize(600,400);
    QObject::connect(this, SIGNAL(appearenceChanged()), this, SLOT(repaint()));
    QObject::connect(this, SIGNAL(plotsChanged()), this, SLOT(replot()));
}
Exemplo n.º 4
0
void XYScale::trackRect(const QRectF &rect) {
    setXrange(rect.left(), rect.right());
    setYrange(rect.top(), rect.bottom());
}