Removed warnings, added XY-plot data next to cursor

This commit is contained in:
Jan Käberich 2020-11-25 11:55:53 +01:00
parent 37bd9a0435
commit 1b003cc481
7 changed files with 65 additions and 25 deletions

View File

@ -44,7 +44,7 @@ void TraceMarker::setTimeDomain(bool timeDomain)
return;
}
this->timeDomain = timeDomain;
// TODO handle changed setting and everything
if(timeDomain) {
// need to delete this marker if the TDR data of the trace is no longer available
connect(parentTrace, &Trace::changedTDRstate, [=](bool tdr_available){

View File

@ -99,7 +99,7 @@ void TracePlot::contextMenuEvent(QContextMenuEvent *event)
void TracePlot::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
auto pref = Preferences::getInstance();
QPainter p(this);
// p.setRenderHint(QPainter::Antialiasing);
@ -172,6 +172,7 @@ void TracePlot::mousePressEvent(QMouseEvent *event)
void TracePlot::mouseReleaseEvent(QMouseEvent *event)
{
Q_UNUSED(event)
selectedMarker = nullptr;
}

View File

@ -298,6 +298,7 @@ void TraceXYPlot::draw(QPainter &p)
case YAxisType::Impulse: labelY = "Impulse Response"; break;
case YAxisType::Step: labelY = "Step Response"; break;
case YAxisType::Impedance: labelY = "Impedance"; break;
default: break;
}
auto xStart = i == 0 ? 0 : w.width() - AxisLabelSize * 1.5;
p.save();
@ -719,6 +720,14 @@ QPoint TraceXYPlot::plotValueToPixel(QPointF plotValue, int Yaxis)
return p;
}
QPointF TraceXYPlot::pixelToPlotValue(QPoint pixel, int Yaxis)
{
QPointF p;
p.setX(Util::Scale<double>(pixel.x(), plotAreaLeft, plotAreaLeft + plotAreaWidth, XAxis.rangeMin, XAxis.rangeMax));
p.setY(Util::Scale<double>(pixel.y(), plotAreaBottom, 0, YAxis[Yaxis].rangeMin, YAxis[Yaxis].rangeMax));
return p;
}
QPoint TraceXYPlot::markerToPixel(TraceMarker *m)
{
QPoint ret = QPoint();
@ -791,3 +800,47 @@ void TraceXYPlot::traceDropped(Trace *t, QPoint position)
enableTraceAxis(t, 1, true);
}
}
QString TraceXYPlot::mouseText(QPoint pos)
{
QString ret;
if(QRect(plotAreaLeft, 0, plotAreaWidth + 1, plotAreaBottom).contains(pos)) {
// cursor within plot area
QPointF coords[2];
coords[0] = pixelToPlotValue(pos, 0);
coords[1] = pixelToPlotValue(pos, 1);
int significantDigits = floor(log10(XAxis.rangeMax)) - floor(log10((XAxis.rangeMax - XAxis.rangeMin) / 1000.0)) + 1;
ret += Unit::ToString(coords[0].x(), AxisUnit(XAxis.type), "fpnum kMG", significantDigits) + "\n";
for(int i=0;i<2;i++) {
if(YAxis[i].type != YAxisType::Disabled) {
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";
}
}
}
return ret;
}
QString TraceXYPlot::AxisUnit(TraceXYPlot::YAxisType type)
{
switch(type) {
case TraceXYPlot::YAxisType::Magnitude: return "db"; break;
case TraceXYPlot::YAxisType::Phase: return "°"; break;
case TraceXYPlot::YAxisType::VSWR: return ""; break;
case TraceXYPlot::YAxisType::Impulse: return ""; break;
case TraceXYPlot::YAxisType::Step: return ""; break;
case TraceXYPlot::YAxisType::Impedance: return "Ohm"; break;
default: return ""; break;
}
}
QString TraceXYPlot::AxisUnit(TraceXYPlot::XAxisType type)
{
switch(type) {
case XAxisType::Frequency: return "Hz"; break;
case XAxisType::Time: return "s"; break;
case XAxisType::Distance: return "m"; break;
}
}

View File

@ -63,9 +63,14 @@ private:
unsigned int numTraceSamples(Trace *t);
QPoint dataToPixel(Trace::Data d);
QPoint plotValueToPixel(QPointF plotValue, int Yaxis);
QPointF pixelToPlotValue(QPoint pixel, int YAxis);
QPoint markerToPixel(TraceMarker *m) override;
double nearestTracePoint(Trace *t, QPoint pixel) override;
void traceDropped(Trace *t, QPoint position) override;
QString mouseText(QPoint pos) override;
static QString AxisUnit(YAxisType type);
static QString AxisUnit(XAxisType type);
std::set<Trace*> tracesAxis[2];

View File

@ -21,7 +21,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
ui->Y1max->setEnabled(index != 0 && !autoRange);
ui->Y1divs->setEnabled(index != 0 && !autoRange);
auto type = (TraceXYPlot::YAxisType) index;
QString unit = YAxisUnit(type);
QString unit = TraceXYPlot::AxisUnit(type);
ui->Y1min->setUnit(unit);
ui->Y1max->setUnit(unit);
ui->Y1divs->setUnit(unit);
@ -41,7 +41,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
ui->Y2max->setEnabled(index != 0 && !autoRange);
ui->Y2divs->setEnabled(index != 0 && !autoRange);
auto type = (TraceXYPlot::YAxisType) index;
QString unit = YAxisUnit(type);
QString unit = TraceXYPlot::AxisUnit(type);
ui->Y2min->setUnit(unit);
ui->Y2max->setUnit(unit);
ui->Y2divs->setUnit(unit);
@ -160,30 +160,12 @@ void XYplotAxisDialog::XAxisTypeChanged(int XAxisIndex)
}
}
QString unit;
switch(type) {
case TraceXYPlot::XAxisType::Frequency: unit = "Hz"; break;
case TraceXYPlot::XAxisType::Time: unit = "s"; break;
case TraceXYPlot::XAxisType::Distance: unit = "m"; break;
}
QString unit = TraceXYPlot::AxisUnit(type);
ui->Xmin->setUnit(unit);
ui->Xmax->setUnit(unit);
ui->Xdivs->setUnit(unit);
}
QString XYplotAxisDialog::YAxisUnit(TraceXYPlot::YAxisType type)
{
switch(type) {
case TraceXYPlot::YAxisType::Magnitude: return "db"; break;
case TraceXYPlot::YAxisType::Phase: return "°"; break;
case TraceXYPlot::YAxisType::VSWR: return ""; break;
case TraceXYPlot::YAxisType::Impulse: return ""; break;
case TraceXYPlot::YAxisType::Step: return ""; break;
case TraceXYPlot::YAxisType::Impedance: return "Ohm"; break;
default: return ""; break;
}
}
std::set<TraceXYPlot::YAxisType> XYplotAxisDialog::supportedYAxis(TraceXYPlot::XAxisType type)
{
set<TraceXYPlot::YAxisType> ret = {TraceXYPlot::YAxisType::Disabled};

View File

@ -21,7 +21,6 @@ private slots:
void XAxisTypeChanged(int XAxisIndex);
private:
QString YAxisUnit(TraceXYPlot::YAxisType type);
std::set<TraceXYPlot::YAxisType> supportedYAxis(TraceXYPlot::XAxisType type);
Ui::XYplotAxisDialog *ui;
TraceXYPlot *plot;

View File

@ -11,7 +11,7 @@
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-1870342659776466326" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="1307432939745961523" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>