更新
This commit is contained in:
@@ -22,7 +22,8 @@ public sealed class TorqueTrendControl : FrameworkElement
|
|||||||
private const double SensorMaxTorque = 100;
|
private const double SensorMaxTorque = 100;
|
||||||
private const double MinimumTorqueRange = 0.1;
|
private const double MinimumTorqueRange = 0.1;
|
||||||
private const double MinimumSpeedRange = 1;
|
private const double MinimumSpeedRange = 1;
|
||||||
private const double TorqueTrendBinSize = 0.1;
|
private const double TorqueRangePaddingRatio = 0.12;
|
||||||
|
private const double TorqueTrendBinSize = 0.01;
|
||||||
|
|
||||||
private bool _isManualView;
|
private bool _isManualView;
|
||||||
private double _viewMinTorque = SensorMinTorque;
|
private double _viewMinTorque = SensorMinTorque;
|
||||||
@@ -283,12 +284,35 @@ public sealed class TorqueTrendControl : FrameworkElement
|
|||||||
{
|
{
|
||||||
if (!_isManualView)
|
if (!_isManualView)
|
||||||
{
|
{
|
||||||
|
(_viewMinTorque, _viewMaxTorque) = GetAutoTorqueRange(samples);
|
||||||
(_viewMinSpeed, _viewMaxSpeed) = GetAutoSpeedRange(samples);
|
(_viewMinSpeed, _viewMaxSpeed) = GetAutoSpeedRange(samples);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (_viewMinTorque, _viewMaxTorque, _viewMinSpeed, _viewMaxSpeed);
|
return (_viewMinTorque, _viewMaxTorque, _viewMinSpeed, _viewMaxSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static (double MinTorque, double MaxTorque) GetAutoTorqueRange(List<TorqueSamplePayload> samples)
|
||||||
|
{
|
||||||
|
double minTorque = Math.Clamp(samples.Min(sample => sample.TorqueMilliNewtonMeters), SensorMinTorque, SensorMaxTorque);
|
||||||
|
double maxTorque = Math.Clamp(samples.Max(sample => sample.TorqueMilliNewtonMeters), SensorMinTorque, SensorMaxTorque);
|
||||||
|
double range = maxTorque - minTorque;
|
||||||
|
|
||||||
|
if (range < MinimumTorqueRange)
|
||||||
|
{
|
||||||
|
double center = (minTorque + maxTorque) / 2;
|
||||||
|
minTorque = center - MinimumTorqueRange / 2;
|
||||||
|
maxTorque = center + MinimumTorqueRange / 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double padding = range * TorqueRangePaddingRatio;
|
||||||
|
minTorque -= padding;
|
||||||
|
maxTorque += padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ClampTorqueRange(minTorque, maxTorque);
|
||||||
|
}
|
||||||
|
|
||||||
private static (double MinSpeed, double MaxSpeed) GetAutoSpeedRange(List<TorqueSamplePayload> samples)
|
private static (double MinSpeed, double MaxSpeed) GetAutoSpeedRange(List<TorqueSamplePayload> samples)
|
||||||
{
|
{
|
||||||
double minSpeed = samples.Min(sample => sample.SpeedRpm);
|
double minSpeed = samples.Min(sample => sample.SpeedRpm);
|
||||||
@@ -480,15 +504,16 @@ public sealed class TorqueTrendControl : FrameworkElement
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<TorqueSamplePayload> samples = ReadSamples();
|
List<TorqueSamplePayload> samples = ReadSamples();
|
||||||
|
(_viewMinTorque, _viewMaxTorque) = samples.Count == 0
|
||||||
|
? (SensorMinTorque, SensorMaxTorque)
|
||||||
|
: GetAutoTorqueRange(samples);
|
||||||
(_viewMinSpeed, _viewMaxSpeed) = samples.Count == 0 ? (0, 1) : GetAutoSpeedRange(samples);
|
(_viewMinSpeed, _viewMaxSpeed) = samples.Count == 0 ? (0, 1) : GetAutoSpeedRange(samples);
|
||||||
_isManualView = true;
|
_isManualView = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClampView()
|
private void ClampView()
|
||||||
{
|
{
|
||||||
double torqueRange = Math.Clamp(_viewMaxTorque - _viewMinTorque, MinimumTorqueRange, SensorMaxTorque - SensorMinTorque);
|
(_viewMinTorque, _viewMaxTorque) = ClampTorqueRange(_viewMinTorque, _viewMaxTorque);
|
||||||
_viewMinTorque = Math.Clamp(_viewMinTorque, SensorMinTorque, SensorMaxTorque - torqueRange);
|
|
||||||
_viewMaxTorque = _viewMinTorque + torqueRange;
|
|
||||||
|
|
||||||
if (!double.IsFinite(_viewMinSpeed)
|
if (!double.IsFinite(_viewMinSpeed)
|
||||||
|| !double.IsFinite(_viewMaxSpeed)
|
|| !double.IsFinite(_viewMaxSpeed)
|
||||||
@@ -499,6 +524,13 @@ public sealed class TorqueTrendControl : FrameworkElement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static (double MinTorque, double MaxTorque) ClampTorqueRange(double minTorque, double maxTorque)
|
||||||
|
{
|
||||||
|
double torqueRange = Math.Clamp(maxTorque - minTorque, MinimumTorqueRange, SensorMaxTorque - SensorMinTorque);
|
||||||
|
minTorque = Math.Clamp(minTorque, SensorMinTorque, SensorMaxTorque - torqueRange);
|
||||||
|
return (minTorque, minTorque + torqueRange);
|
||||||
|
}
|
||||||
|
|
||||||
private void EndMouseDrag()
|
private void EndMouseDrag()
|
||||||
{
|
{
|
||||||
_lastDragPoint = null;
|
_lastDragPoint = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user