59 lines
1.6 KiB
C#
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;
|
|
} |