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; }
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(); }
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())); }
void XYScale::trackRect(const QRectF &rect) { setXrange(rect.left(), rect.right()); setYrange(rect.top(), rect.bottom()); }