skyscraper8/GUIs/skyscraper8.UI.ImGui/Forms/SdlScottPlotWindowRfSpectrum.cs
2025-08-06 22:05:22 +02:00

71 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Echo.UserInterface.Backend;
using ScottPlot;
using ScottPlot.Plottables;
using skyscraper5.Dvb.Descriptors;
using skyscraper5.src.InteractionChannel.Model;
using Color = System.Drawing.Color;
namespace skyscraper8.UI.ImGui.Forms
{
internal class SdlScottPlotWindowRfSpectrum : SdlScottPlotWindow
{
private DataLogger[] loggers;
private Color[] colors = new Color[]
{
System.Drawing.Color.FromArgb(52, 152, 152),
System.Drawing.Color.FromArgb(252, 52, 52),
System.Drawing.Color.FromArgb(152, 52, 152),
System.Drawing.Color.FromArgb(52, 52, 252),
};
public SdlScottPlotWindowRfSpectrum(ImGuiDevice imGuiDevice)
: base(imGuiDevice, new Plot(), 1000, 200, "RF Spectrum")
{
locakable = new object();
}
protected override void BeforeRender()
{
if (_queuedSamples == null)
return;
lock (locakable)
{
while (_queuedSamples.Count > 0)
{
Tuple<SatelliteDeliverySystemDescriptor.PolarizationEnum, int, double> value = _queuedSamples.Dequeue();
if (loggers == null)
loggers = new DataLogger[4];
if (loggers[(int)value.Item1] == null)
{
loggers[(int)value.Item1] = _plot.Add.DataLogger();
loggers[(int)value.Item1].LegendText = value.Item1.ToString();
loggers[(int)value.Item1].Color = ScottPlot.Color.FromColor(colors[(int)value.Item1]);
}
loggers[(int)value.Item1].Add(value.Item2, value.Item3);
}
}
}
private Queue<Tuple<SatelliteDeliverySystemDescriptor.PolarizationEnum, int, double>> _queuedSamples;
private object locakable;
public void EnqueueSample(SatelliteDeliverySystemDescriptor.PolarizationEnum polarization, int frequency, double sample)
{
if (_queuedSamples == null)
_queuedSamples = new Queue<Tuple<SatelliteDeliverySystemDescriptor.PolarizationEnum, int, double>>();
lock (locakable)
{
_queuedSamples.Enqueue(new Tuple<SatelliteDeliverySystemDescriptor.PolarizationEnum, int, double>(polarization, frequency, sample));
}
}
}
}