Files
2026-07-13 13:13:17 +08:00

59 lines
1.6 KiB
C#

using ImGuiNET;
using T3.Core.Utils;
namespace T3.Editor.Gui.UiHelpers;
public class CurvePlot
{
public CurvePlot(string label = "", float width = float.NaN, int resolution = 500)
{
_sampleCount = resolution;
_graphValues = new float[_sampleCount];
_label = label;
_width = width;
}
public void Draw(float value)
{
_graphValues[_sampleOffset] = value;
if (Damping)
{
_dampedValue = MathUtils.Lerp(_dampedValue, value, 0.01f);
value = _dampedValue;
}
_sampleOffset = (_sampleOffset + 1) % _sampleCount;
if (_width > 0)
ImGui.SetNextItemWidth(120);
if (float.IsNaN(MinValue))
{
ImGui.PlotLines($"{value:##.##} {_label}", ref _graphValues[0], _sampleCount, _sampleOffset);
}
else
{
ImGui.PlotLines($"{value:##.##} {_label}", ref _graphValues[0], _sampleCount, _sampleOffset, "",
scale_min: MinValue,
scale_max: MaxValue);
}
}
public void Reset(float clearValue = 0)
{
for (var index = 0; index < _sampleCount; index++)
{
_graphValues[index] = clearValue;
}
}
public float MinValue = float.NaN;
public float MaxValue = 100;
private readonly float[] _graphValues;
private int _sampleOffset;
private readonly int _sampleCount;
private readonly string _label;
private readonly float _width;
public bool Damping;
private float _dampedValue;
}