Compare commits
2 Commits
86f4edaa55
...
f77501b559
| Author | SHA1 | Date | |
|---|---|---|---|
|
f77501b559
|
|||
|
407c3a1731
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ obj/
|
||||
riderModule.iml
|
||||
/_ReSharper.Caches/
|
||||
/.idea/
|
||||
*.user
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup />
|
||||
</Project>
|
||||
110
src/App.cs
110
src/App.cs
@@ -11,7 +11,7 @@ public partial class App : Form
|
||||
private const int MinSampleSize = 50, MaxSampleSize = 600;
|
||||
private const float MinTimeSpan = 5F, MaxTimeSpan = 60F;
|
||||
|
||||
private const double RefreshRateMs = 1000.0 / 60.0;
|
||||
private const int FramesPerSecond = 30;
|
||||
|
||||
private static readonly Color StatusGrayColor = Color.FromArgb(70, 70, 70), GreenColor = Color.FromArgb(0, 255, 0);
|
||||
|
||||
@@ -60,7 +60,7 @@ public partial class App : Form
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
var timer = new System.Timers.Timer(RefreshRateMs);
|
||||
var timer = new System.Timers.Timer(1000.0 / FramesPerSecond);
|
||||
timer.SynchronizingObject = this;
|
||||
timer.Elapsed += delegate { OnDrawTimer(); };
|
||||
_timer = timer;
|
||||
@@ -71,7 +71,7 @@ public partial class App : Form
|
||||
if (disposing)
|
||||
{
|
||||
components?.Dispose();
|
||||
_timer.Stop();
|
||||
_timer.Close();
|
||||
_arduinoCom?.Dispose();
|
||||
_font12.Dispose();
|
||||
_font14.Dispose();
|
||||
@@ -123,33 +123,43 @@ public partial class App : Form
|
||||
arduinoCom.AddSerialObserver(Listener.Create<Sample>(sample => _sampleQueue.Enqueue(sample)));
|
||||
}
|
||||
|
||||
|
||||
private PointF CalculateGraphPosition(Rectangle graphRect, float graphMargin, int i, int sampleSize, float value,
|
||||
float minValue, float maxValue, long timestamp, long minTimestamp, long maxTimestamp) =>
|
||||
CalculateGraphPosition(new RectangleF(graphRect.X, graphRect.Y, graphRect.Width, graphRect.Height), graphMargin,
|
||||
i, sampleSize, value, minValue, maxValue, timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
private PointF CalculateGraphPosition(RectangleF graphRect, float graphMargin, int i, int sampleSize, float value,
|
||||
private PointF CalculateGraphPosition(Rectangle curveRect, int sampleIndex, int sampleSize, float value,
|
||||
float minValue, float maxValue, long timestamp, long minTimestamp, long maxTimestamp)
|
||||
{
|
||||
var x = _sampleOrTimeGraph
|
||||
? Utils.Map<float, float, float>(i, 0, sampleSize - 1, graphRect.Width, 0F)
|
||||
: Utils.Map<float, float, float>(timestamp, minTimestamp, maxTimestamp, 0F, graphRect.Width);
|
||||
var y = minValue == maxValue
|
||||
? graphRect.Height / 2F
|
||||
: Utils.Map<float, float, float>(value, minValue, maxValue, graphRect.Height - graphMargin, graphMargin);
|
||||
var x = CalculateGraphPositionX(curveRect, sampleIndex, sampleSize, timestamp, minTimestamp, maxTimestamp);
|
||||
var y = CalculateGraphPositionY(curveRect, value, minValue, maxValue);
|
||||
|
||||
return new PointF(x, y);
|
||||
}
|
||||
|
||||
private float CalculateGraphPositionX(Rectangle curveRect, int sampleIndex, int sampleSize, long timestamp,
|
||||
long minTimestamp, long maxTimestamp) => _sampleOrTimeGraph
|
||||
? CalculateGraphPositionX(curveRect, sampleIndex, sampleSize)
|
||||
: CalculateGraphPositionX(curveRect, timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
private static float CalculateGraphPositionX(Rectangle curveRect, int sampleIndex, int sampleSize) =>
|
||||
Utils.Map<int, float, float>(sampleIndex, 1, sampleSize, curveRect.Right, curveRect.Left);
|
||||
|
||||
private static float CalculateGraphPositionX(Rectangle curveRect, long timestamp, long minTimestamp,
|
||||
long maxTimestamp) =>
|
||||
Utils.Map<long, float, float>(timestamp, minTimestamp, maxTimestamp, curveRect.Left, curveRect.Right);
|
||||
|
||||
private static float CalculateGraphPositionY(Rectangle curveRect, float value, float minValue, float maxValue) =>
|
||||
minValue == maxValue
|
||||
? (curveRect.Top + curveRect.Bottom - 1) / 2F
|
||||
: Utils.Map<float, float, float>(value, minValue, maxValue, curveRect.Bottom - 1, curveRect.Top);
|
||||
|
||||
private void OnDrawTimer()
|
||||
{
|
||||
Console.WriteLine("A");
|
||||
while (_sampleQueue.Count > 0)
|
||||
{
|
||||
_samples.Add(_sampleQueue.Dequeue());
|
||||
}
|
||||
|
||||
_frameTimeStart = TimeProvider.System.GetTimestamp();
|
||||
var frameTimeStart = TimeProvider.System.GetTimestamp();
|
||||
Console.WriteLine(TimeProvider.System.GetElapsedTime(_frameTimeStart, frameTimeStart).TotalMilliseconds);
|
||||
_frameTimeStart = frameTimeStart;
|
||||
|
||||
speedGaugeCanvas.Refresh();
|
||||
graphPanel.Refresh();
|
||||
@@ -247,6 +257,9 @@ public partial class App : Form
|
||||
brakeLabel.BackColor = sample is { BrakeFlag: true } ? Color.DarkRed : StatusGrayColor;
|
||||
|
||||
_lastDrawnSample = sample;
|
||||
|
||||
Console.WriteLine(TimeProvider.System.GetElapsedTime(frameTimeStart).TotalMilliseconds);
|
||||
Console.WriteLine("B");
|
||||
}
|
||||
|
||||
private void speedGaugePanel_Paint(object sender, PaintEventArgs e)
|
||||
@@ -488,15 +501,19 @@ public partial class App : Form
|
||||
g.TranslateTransform(graphRect.Left, graphRect.Top);
|
||||
|
||||
const int graphMargin = 24;
|
||||
var curveRect = Rectangle.FromLTRB(0, graphMargin, graphRect.Width, graphRect.Height - graphMargin + 1);
|
||||
|
||||
ctx.Stroke(100);
|
||||
ctx.StrokeWeight(1);
|
||||
ctx.SetDashes(5, 5);
|
||||
g.DrawLine(ctx.DrawPen, 0, graphMargin - 1, graphRect.Width, graphMargin - 1);
|
||||
g.DrawLine(ctx.DrawPen, 0, graphRect.Height - graphMargin + 1, graphRect.Width,
|
||||
graphRect.Height - graphMargin + 1);
|
||||
g.DrawLine(ctx.DrawPen, 0, curveRect.Top - 1, graphRect.Width, curveRect.Top - 1);
|
||||
g.DrawLine(ctx.DrawPen, 0, curveRect.Bottom, graphRect.Width,
|
||||
curveRect.Bottom);
|
||||
|
||||
// MARQUEURS DES SECONDES
|
||||
|
||||
ctx.SetDashes(3, 7);
|
||||
g.SetClip(curveRect);
|
||||
|
||||
if (_sampleOrTimeGraph)
|
||||
{
|
||||
@@ -508,9 +525,9 @@ public partial class App : Form
|
||||
|
||||
if (sample.DrawTimeTick)
|
||||
{
|
||||
var tickX = Utils.Map<float, float, float>(i, 0, sampleSize, graphRect.Width, 0);
|
||||
var tickX = CalculateGraphPositionX(curveRect, i, sampleSize);
|
||||
|
||||
g.DrawLine(ctx.DrawPen, tickX, graphMargin, tickX, graphRect.Height - graphMargin);
|
||||
g.DrawLine(ctx.DrawPen, tickX, curveRect.Top, tickX, curveRect.Bottom - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -533,8 +550,11 @@ public partial class App : Form
|
||||
}
|
||||
}
|
||||
|
||||
g.ResetClip();
|
||||
ctx.ResetDashes();
|
||||
|
||||
// GRAPHES DES VALEURS
|
||||
|
||||
var points = new List<PointF>();
|
||||
|
||||
// ERREUR
|
||||
@@ -573,14 +593,11 @@ public partial class App : Form
|
||||
|
||||
if (sampleCount > 0)
|
||||
{
|
||||
g.SetClip(new RectangleF(0, graphMargin, graphRect.Width, graphRect.Height - 2 * graphMargin + 1));
|
||||
g.SetClip(curveRect);
|
||||
|
||||
if (minValue <= 0 && maxValue >= 0)
|
||||
{
|
||||
var zero = minValue == maxValue
|
||||
? graphRect.Height / 2F
|
||||
: Utils.Map<float, float, float>(0, minValue, maxValue, graphRect.Height - graphMargin,
|
||||
graphMargin);
|
||||
var zero = CalculateGraphPositionY(curveRect, 0, minValue, maxValue);
|
||||
|
||||
ctx.Stroke(63, 63, 127);
|
||||
ctx.StrokeWeight(1);
|
||||
@@ -620,7 +637,7 @@ public partial class App : Form
|
||||
continue;
|
||||
}
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Error, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Error, minValue,
|
||||
maxValue, sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
points.Add(p);
|
||||
@@ -691,7 +708,7 @@ public partial class App : Form
|
||||
|
||||
if (sampleCount > 0)
|
||||
{
|
||||
g.SetClip(new RectangleF(0, graphMargin, graphRect.Width, graphRect.Height - 2 * graphMargin + 1));
|
||||
g.SetClip(curveRect);
|
||||
|
||||
ctx.Stroke(255, 255, 0);
|
||||
ctx.StrokeWeight(1);
|
||||
@@ -724,7 +741,7 @@ public partial class App : Form
|
||||
continue;
|
||||
}
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Integral, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Integral, minValue,
|
||||
maxValue,
|
||||
sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
@@ -796,7 +813,7 @@ public partial class App : Form
|
||||
|
||||
if (sampleCount > 0)
|
||||
{
|
||||
g.SetClip(new RectangleF(0, graphMargin, graphRect.Width, graphRect.Height - 2 * graphMargin + 1));
|
||||
g.SetClip(curveRect);
|
||||
|
||||
ctx.Stroke(255, 63, 63);
|
||||
ctx.StrokeWeight(1);
|
||||
@@ -829,7 +846,7 @@ public partial class App : Form
|
||||
continue;
|
||||
}
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Derivative, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Derivative, minValue,
|
||||
maxValue,
|
||||
sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
@@ -896,7 +913,7 @@ public partial class App : Form
|
||||
|
||||
if (sampleCount > 0)
|
||||
{
|
||||
g.SetClip(new RectangleF(0, graphMargin, graphRect.Width, graphRect.Height - 2 * graphMargin + 1));
|
||||
g.SetClip(curveRect);
|
||||
|
||||
// CONSIGNE
|
||||
|
||||
@@ -910,22 +927,7 @@ public partial class App : Form
|
||||
{
|
||||
i++;
|
||||
|
||||
// if (!sample.Active)
|
||||
// {
|
||||
// if (points.Count > 0)
|
||||
// {
|
||||
// if (points.Count > 1)
|
||||
// {
|
||||
// g.DrawLines(ctx.DrawPen, CollectionsMarshal.AsSpan(points));
|
||||
// }
|
||||
//
|
||||
// points.Clear();
|
||||
// }
|
||||
//
|
||||
// continue;
|
||||
// }
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Consigne, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Consigne, minValue,
|
||||
maxValue,
|
||||
sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
@@ -955,7 +957,7 @@ public partial class App : Form
|
||||
{
|
||||
i++;
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Speed, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Speed, minValue,
|
||||
maxValue,
|
||||
sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
@@ -1027,7 +1029,7 @@ public partial class App : Form
|
||||
|
||||
if (sampleCount > 0)
|
||||
{
|
||||
g.SetClip(new RectangleF(0, graphMargin, graphRect.Width, graphRect.Height - 2 * graphMargin + 1));
|
||||
g.SetClip(curveRect);
|
||||
|
||||
ctx.Stroke(127, 255, 127);
|
||||
ctx.StrokeWeight(1);
|
||||
@@ -1060,7 +1062,7 @@ public partial class App : Form
|
||||
continue;
|
||||
}
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Acceleration, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Acceleration, minValue,
|
||||
maxValue,
|
||||
sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
@@ -1132,7 +1134,7 @@ public partial class App : Form
|
||||
|
||||
if (sampleCount > 0)
|
||||
{
|
||||
g.SetClip(new RectangleF(0, graphMargin, graphRect.Width, graphRect.Height - 2 * graphMargin + 1));
|
||||
g.SetClip(curveRect);
|
||||
|
||||
ctx.Stroke(255, 127, 255);
|
||||
ctx.StrokeWeight(1);
|
||||
@@ -1158,7 +1160,7 @@ public partial class App : Form
|
||||
continue;
|
||||
}
|
||||
|
||||
var p = CalculateGraphPosition(graphRect, graphMargin, i, sampleSize, sample.Servo, minValue,
|
||||
var p = CalculateGraphPosition(curveRect, i, sampleSize, sample.Servo, minValue,
|
||||
maxValue,
|
||||
sample.Timestamp, minTimestamp, maxTimestamp);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user