QwtValueList Log2ScaleEngine::buildMinorTicks(const QwtValueList &majorTicks, int maxMinSteps, double stepSize) const { if ( maxMinSteps < 1 ) return QwtValueList(); int majTicks = (int)majorTicks.count(); if (majTicks > 1){ QwtValueList minorTicks; for (int i = 0; i < majTicks - 1; i++){ const double v = majorTicks[i]; const double dv = fabs(majorTicks[i + 1] - majorTicks[i])/double(maxMinSteps - 1); for (int j = 0; j < maxMinSteps; j++) minorTicks += v + j*dv; } return minorTicks; } return QwtValueList(); }
void ProbabilityScaleEngine::buildTicks( const QwtDoubleInterval& interval, int stepSize, QwtValueList ticks[QwtScaleDiv::NTickTypes]) const { ticks[QwtScaleDiv::MajorTick] = buildMajorTicks(interval, stepSize); ticks[QwtScaleDiv::MinorTick] = QwtValueList(); for ( int i = 0; i < QwtScaleDiv::NTickTypes; i++ ) ticks[i] = strip(ticks[i], interval); }
/*! Remove ticks from a list, that are not inside an interval \param ticks Tick list \param interval Interval \return Stripped tick list */ QwtValueList QwtScaleEngine::strip( const QwtValueList& ticks, const QwtDoubleInterval &interval) const { if ( !interval.isValid() || ticks.count() == 0 ) return QwtValueList(); QwtValueList strippedTicks; for ( int i = 0; i < (int)ticks.count(); i++ ) { double v = ticks[i]; if ( contains(interval, v) && !strippedTicks.contains(v)) strippedTicks += v; } return strippedTicks; }
/*! Remove ticks from a list, that are not inside an interval \param ticks Tick list \param interval Interval \return Stripped tick list */ QwtValueList QwtScaleEngine::strip( const QwtValueList& ticks, const QwtDoubleInterval &interval) const { if ( !interval.isValid() || ticks.count() == 0 ) return QwtValueList(); if ( contains(interval, ticks.first()) && contains(interval, ticks.last()) ) { return ticks; } QwtValueList strippedTicks; for ( int i = 0; i < (int)ticks.count(); i++ ) { if ( contains(interval, ticks[i]) ) strippedTicks += ticks[i]; } return strippedTicks; }
QwtValueList QwtLog10ScaleEngine::buildMinorTicks( const QwtValueList &majorTicks, int maxMinSteps, double stepSize) const { if (stepSize < 1.1) // major step width is one decade { if ( maxMinSteps < 1 ) return QwtValueList(); int k0, kstep, kmax; if (maxMinSteps >= 8) { k0 = 2; kmax = 9; kstep = 1; } else if (maxMinSteps >= 4) { k0 = 2; kmax = 8; kstep = 2; } else if (maxMinSteps >= 2) { k0 = 2; kmax = 5; kstep = 3; } else { k0 = 5; kmax = 5; kstep = 1; } QwtValueList minorTicks; for (int i = 0; i < (int)majorTicks.count(); i++) { const double v = majorTicks[i]; for (int k = k0; k<= kmax; k+=kstep) minorTicks += v * double(k); } return minorTicks; } else // major step > one decade { double minStep = divideInterval(stepSize, maxMinSteps); if ( minStep == 0.0 ) return QwtValueList(); if ( minStep < 1.0 ) minStep = 1.0; // # subticks per interval int nMin = qRound(stepSize / minStep) - 1; // Do the minor steps fit into the interval? if ( QwtScaleArithmetic::compareEps((nMin + 1) * minStep, qwtAbs(stepSize), stepSize) > 0) { nMin = 0; } if (nMin < 1) return QwtValueList(); // no subticks // substep factor = 10^substeps const double minFactor = qwtMax(pow(10.0, minStep), 10.0); QwtValueList minorTicks; for (int i = 0; i < (int)majorTicks.count(); i++) { double val = majorTicks[i]; for (int k=0; k< nMin; k++) { val *= minFactor; minorTicks += val; } } return minorTicks; } }