//! Rebuild the scales and maps void QwtPlot::updateAxes() { // Find bounding interval of the item data // for all axes, where autoscaling is enabled QwtDoubleInterval intv[axisCnt]; const QwtPlotItemList& itmList = itemList(); QwtPlotItemIterator it; for ( it = itmList.begin(); it != itmList.end(); ++it ) { const QwtPlotItem *item = *it; if ( !item->testItemAttribute(QwtPlotItem::AutoScale) ) continue; if ( axisAutoScale(item->xAxis()) || axisAutoScale(item->yAxis()) ) { const QwtDoubleRect rect = item->boundingRect(); intv[item->xAxis()] |= QwtDoubleInterval(rect.left(), rect.right()); intv[item->yAxis()] |= QwtDoubleInterval(rect.top(), rect.bottom()); } } // Adjust scales for (int axisId = 0; axisId < axisCnt; axisId++) { AxisData &d = *d_axisData[axisId]; double minValue = d.minValue; double maxValue = d.maxValue; double stepSize = d.stepSize; if ( d.doAutoScale && intv[axisId].isValid() ) { d.scaleDiv.invalidate(); minValue = intv[axisId].minValue(); maxValue = intv[axisId].maxValue(); d.scaleEngine->autoScale(d.maxMajor, minValue, maxValue, stepSize); } if ( !d.scaleDiv.isValid() ) { d.scaleDiv = d.scaleEngine->divideScale( minValue, maxValue, d.maxMajor, d.maxMinor, stepSize); } QwtScaleWidget *scaleWidget = axisWidget(axisId); scaleWidget->setScaleDiv( d.scaleEngine->transformation(), d.scaleDiv); int startDist, endDist; scaleWidget->getBorderDistHint(startDist, endDist); scaleWidget->setBorderDist(startDist, endDist); } for ( it = itmList.begin(); it != itmList.end(); ++it ) { QwtPlotItem *item = *it; item->updateScaleDiv( *axisScaleDiv(item->xAxis()), *axisScaleDiv(item->yAxis())); } }