Use different prefixes depending on the axis type

This commit is contained in:
Jan Käberich 2022-02-04 12:47:07 +01:00
parent 2265b8f6c0
commit 670dff15c6
3 changed files with 46 additions and 2 deletions

View File

@ -405,10 +405,12 @@ void TraceXYPlot::draw(QPainter &p)
auto tickLen = i == 0 ? -2 : 2;
p.drawLine(tickStart, yCoord, tickStart + tickLen, yCoord);
QString unit = "";
QString prefix = " ";
if(pref.Graphs.showUnits) {
unit = AxisUnit(YAxis[i].type);
prefix = AxisPrefixes(YAxis[i].type);
}
auto tickValue = Unit::ToString(YAxis[i].ticks[j], unit, "fpnum kMG", significantDigits);
auto tickValue = Unit::ToString(YAxis[i].ticks[j], unit, prefix, significantDigits);
if(i == 0) {
p.drawText(QRectF(0, yCoord - AxisLabelSize/2 - 2, tickStart + 2 * tickLen, AxisLabelSize), Qt::AlignRight, tickValue);
} else {
@ -1218,7 +1220,7 @@ QString TraceXYPlot::mouseText(QPoint pos)
auto max = qMax(abs(YAxis[i].rangeMax), abs(YAxis[i].rangeMin));
auto step = abs(YAxis[i].rangeMax - YAxis[i].rangeMin) / 1000.0;
significantDigits = floor(log10(max)) - floor(log10(step)) + 1;
ret += Unit::ToString(coords[i].y(), AxisUnit(YAxis[i].type), "fpnum kMG", significantDigits) + "\n";
ret += Unit::ToString(coords[i].y(), AxisUnit(YAxis[i].type), AxisPrefixes(YAxis[i].type), significantDigits) + "\n";
}
}
}
@ -1259,6 +1261,39 @@ QString TraceXYPlot::AxisUnit(TraceXYPlot::YAxisType type)
return "";
}
QString TraceXYPlot::AxisPrefixes(TraceXYPlot::YAxisType type)
{
auto source = model.getSource();
if(source == TraceModel::DataSource::VNA) {
switch(type) {
case TraceXYPlot::YAxisType::Magnitude: return " ";
case TraceXYPlot::YAxisType::Phase: return " ";
case TraceXYPlot::YAxisType::UnwrappedPhase: return " ";
case TraceXYPlot::YAxisType::VSWR: return " ";
case TraceXYPlot::YAxisType::ImpulseReal: return "pnum kMG";
case TraceXYPlot::YAxisType::ImpulseMag: return " ";
case TraceXYPlot::YAxisType::Step: return "pnum kMG";
case TraceXYPlot::YAxisType::Impedance: return "m kM";
case TraceXYPlot::YAxisType::GroupDelay: return "pnum ";
case TraceXYPlot::YAxisType::Disabled: return " ";
case TraceXYPlot::YAxisType::Real: return "pnum ";
case TraceXYPlot::YAxisType::Imaginary: return "pnum ";
case TraceXYPlot::YAxisType::QualityFactor: return " ";
case TraceXYPlot::YAxisType::SeriesR: return "m kM";
case TraceXYPlot::YAxisType::Reactance: return "m kM";
case TraceXYPlot::YAxisType::Capacitance: return "pnum ";
case TraceXYPlot::YAxisType::Inductance: return "pnum ";
case TraceXYPlot::YAxisType::Last: return " ";
}
} else if(source == TraceModel::DataSource::SA) {
switch(type) {
case TraceXYPlot::YAxisType::Magnitude: return " ";
default: return " ";
}
}
return " ";
}
QString TraceXYPlot::AxisUnit(TraceXYPlot::XAxisType type)
{
switch(type) {

View File

@ -95,6 +95,7 @@ private:
QString mouseText(QPoint pos) override;
QString AxisUnit(YAxisType type);
QString AxisPrefixes(YAxisType type);
static QString AxisUnit(XAxisType type);
std::set<Trace*> tracesAxis[2];

View File

@ -53,9 +53,13 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
ui->Y1divs->setEnabled(index != 0 && !autoRange);
auto type = (TraceXYPlot::YAxisType) index;
QString unit = plot->AxisUnit(type);
QString prefixes = plot->AxisPrefixes(type);
ui->Y1min->setUnit(unit);
ui->Y1min->setPrefixes(prefixes);
ui->Y1max->setUnit(unit);
ui->Y1max->setPrefixes(prefixes);
ui->Y1divs->setUnit(unit);
ui->Y1divs->setPrefixes(prefixes);
});
connect(ui->Y1auto, &QCheckBox::toggled, [this](bool checked) {
ui->Y1min->setEnabled(!checked);
@ -73,9 +77,13 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
ui->Y2divs->setEnabled(index != 0 && !autoRange);
auto type = (TraceXYPlot::YAxisType) index;
QString unit = plot->AxisUnit(type);
QString prefixes = plot->AxisPrefixes(type);
ui->Y2min->setUnit(unit);
ui->Y2min->setPrefixes(prefixes);
ui->Y2max->setUnit(unit);
ui->Y2max->setPrefixes(prefixes);
ui->Y2divs->setUnit(unit);
ui->Y2divs->setPrefixes(prefixes);
});
connect(ui->Y2auto, &QCheckBox::toggled, [this](bool checked) {