From 9bc56a274831ae8dd1a51634b6d65806fb7bcd2c Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Mon, 22 Sep 2025 10:39:50 +0200 Subject: [PATCH] Added header for ImPlot utility and functions for drawing horizontal/vertical lines and boxes. --- public/raid/imraid_plot.hpp | 60 +++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 public/raid/imraid_plot.hpp diff --git a/public/raid/imraid_plot.hpp b/public/raid/imraid_plot.hpp new file mode 100644 index 0000000..32e8fe9 --- /dev/null +++ b/public/raid/imraid_plot.hpp @@ -0,0 +1,60 @@ + +#pragma once + +#if !defined(RAID_PUBLIC_RAID_IMRAID_PLOT_HPP_INCLUDED) +#define RAID_PUBLIC_RAID_IMRAID_PLOT_HPP_INCLUDED 1 + +#include +#include +#include + +namespace ImRaid::Plot +{ +inline void AddVerticalLine(double xValue, ImU32 color, float thickness = 1.f, ImAxis dataAxis = ImAxis_X1) +{ + const ImVec2 plotPos = ImPlot::GetPlotPos(); + const ImVec2 plotSize = ImPlot::GetPlotSize(); + const float xScaled = ImPlot::GetCurrentPlot()->Axes[dataAxis].PlotToPixels(xValue); + const ImVec2 v0 = ImVec2(xScaled, plotPos.y); + const ImVec2 v1 = ImVec2(xScaled, plotPos.y + plotSize.y); + + ImPlot::GetPlotDrawList()->AddLine(v0, v1, color, thickness); +} + +inline void AddHorizontalLine(double yValue, ImU32 color, float thickness = 1.f, ImAxis dataAxis = ImAxis_Y1) +{ + const ImVec2 plotPos = ImPlot::GetPlotPos(); + const ImVec2 plotSize = ImPlot::GetPlotSize(); + const float yScaled = ImPlot::GetCurrentPlot()->Axes[dataAxis].PlotToPixels(yValue); + const ImVec2 v0 = ImVec2(plotPos.y, yScaled); + const ImVec2 v1 = ImVec2(plotPos.y + plotSize.y, yScaled); + + ImPlot::GetPlotDrawList()->AddLine(v0, v1, color, thickness); +} + +inline void AddVerticalRect(double xStart, double xEnd, ImU32 color, ImAxis dataAxis = ImAxis_X1) +{ + const ImVec2 plotPos = ImPlot::GetPlotPos(); + const ImVec2 plotSize = ImPlot::GetPlotSize(); + const float xStartScaled = ImPlot::GetCurrentPlot()->Axes[dataAxis].PlotToPixels(xStart); + const float xEndScaled = ImPlot::GetCurrentPlot()->Axes[dataAxis].PlotToPixels(xEnd); + const ImVec2 v0 = ImVec2(xStartScaled, plotPos.y); + const ImVec2 v1 = ImVec2(xEndScaled, plotPos.y + plotSize.y); + + ImPlot::GetPlotDrawList()->AddRectFilled(v0, v1, color); +} + +inline void AddHorizontalRect(double yStart, double yEnd, ImU32 color, ImAxis dataAxis = ImAxis_Y1) +{ + const ImVec2 plotPos = ImPlot::GetPlotPos(); + const ImVec2 plotSize = ImPlot::GetPlotSize(); + const float yStartScaled = ImPlot::GetCurrentPlot()->Axes[dataAxis].PlotToPixels(yStart); + const float yEndScaled = ImPlot::GetCurrentPlot()->Axes[dataAxis].PlotToPixels(yEnd); + const ImVec2 v0 = ImVec2(plotPos.x, yStartScaled); + const ImVec2 v1 = ImVec2(plotPos.x + plotSize.x, yEndScaled); + + ImPlot::GetPlotDrawList()->AddRectFilled(v0, v1, color); +} +} + +#endif // !defined(RAID_PUBLIC_RAID_IMRAID_PLOT_HPP_INCLUDED) \ No newline at end of file