From b38f0927c7d1c055513d436d04b392113bd30781 Mon Sep 17 00:00:00 2001 From: Piotr Wasilewski Date: Wed, 12 Jul 2023 21:21:04 +0200 Subject: [PATCH] wip: working on improved cursors --- src/Gui/Gui.cpp | 15 +++++++++------ src/ScrollingBuffer/ScrollingBuffer.hpp | 13 +++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/Gui/Gui.cpp b/src/Gui/Gui.cpp index 4371b75a..06cfed99 100644 --- a/src/Gui/Gui.cpp +++ b/src/Gui/Gui.cpp @@ -525,12 +525,13 @@ void Gui::drawPlotCurveBar(Plot* plot, ScrollingBuffer& time, std::mapgetMarkerValueX0(); if (markerPos == 0.0) { - markerPos = plotLimits.X.Min * 1.1f; + markerPos = plotLimits.X.Min + ((std::abs(plotLimits.X.Max) - std::abs(plotLimits.X.Min)) / 3.0f); plot->setMarkerValueX0(markerPos); } ImPlot::DragLineX(0, &markerPos, ImVec4(1, 0, 1, 1)); plot->setMarkerValueX0(markerPos); - ImPlot::Annotation(markerPos, 0, ImVec4(0, 0, 0, 0), ImVec2(-10, -100), true, "x0 %.5f", markerPos); + + ImPlot::Annotation(markerPos, plotLimits.Y.Max, ImVec4(0, 0, 0, 0), ImVec2(-10, 0), true, "x0 %.5f", markerPos); } else plot->setMarkerValueX0(0.0); @@ -540,14 +541,14 @@ void Gui::drawPlotCurveBar(Plot* plot, ScrollingBuffer& time, std::mapgetMarkerValueX1(); if (markerPos == 0.0) { - markerPos = plotLimits.X.Max * 0.9f; + markerPos = plotLimits.X.Min + (2.0f * (std::abs(plotLimits.X.Max) - std::abs(plotLimits.X.Min)) / 3.0f); plot->setMarkerValueX1(markerPos); } ImPlot::DragLineX(1, &markerPos, ImVec4(1, 1, 0, 1)); plot->setMarkerValueX1(markerPos); - ImPlot::Annotation(markerPos, 0, ImVec4(0, 0, 0, 0), ImVec2(10, -100), true, "x1 %.5f", markerPos); + ImPlot::Annotation(markerPos, plotLimits.Y.Max, ImVec4(0, 0, 0, 0), ImVec2(10, 0), true, "x1 %.5f", markerPos); double dx = markerPos - plot->getMarkerValueX0(); - ImPlot::Annotation(markerPos, 0, ImVec4(0, 0, 0, 0), ImVec2(10, 100), true, "x1-x0 %.5f", dx); + ImPlot::Annotation(markerPos, plotLimits.Y.Max, ImVec4(0, 0, 0, 0), ImVec2(10, 20), true, "x1-x0 %.5f", dx); } else plot->setMarkerValueX1(0.0); @@ -569,9 +570,11 @@ void Gui::drawPlotCurveBar(Plot* plot, ScrollingBuffer& time, std::mapvisible) continue; + double value = *(serPtr->buffer->getFirstElementCopy() + time.getIndexFromvalue(plot->getMarkerValueX0())); ImPlot::SetNextLineStyle(ImVec4(serPtr->var->getColor().r, serPtr->var->getColor().g, serPtr->var->getColor().b, 1.0f)); ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle, 2.0f); - ImPlot::PlotLine(serPtr->var->getName().c_str(), time.getFirstElementCopy(), serPtr->buffer->getFirstElementCopy(), size, 0, offset, sizeof(double)); + auto name = plot->getMarkerStateX0() ? (key + " = " + std::to_string(value)) : key; + ImPlot::PlotLine(name.c_str(), time.getFirstElementCopy(), serPtr->buffer->getFirstElementCopy(), size, 0, offset, sizeof(double)); } ImPlot::EndPlot(); diff --git a/src/ScrollingBuffer/ScrollingBuffer.hpp b/src/ScrollingBuffer/ScrollingBuffer.hpp index 6fea5cca..2acddaba 100644 --- a/src/ScrollingBuffer/ScrollingBuffer.hpp +++ b/src/ScrollingBuffer/ScrollingBuffer.hpp @@ -68,6 +68,19 @@ class ScrollingBuffer maxSize = newMaxSize; } + uint32_t getIndexFromvalue(double value) + { + for (uint32_t t = 0; t < getSize(); t++) + { + double first = dataCopy[t]; + double second = dataCopy[t + 1]; + + if (value >= first && value <= second) + return t; + } + return 0; + } + private: mutable std::mutex mtx; uint32_t maxSize = 10000;