更新
This commit is contained in:
@@ -22,7 +22,8 @@ public sealed class TorqueTrendControl : FrameworkElement
|
||||
private const double SensorMaxTorque = 100;
|
||||
private const double MinimumTorqueRange = 0.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 double _viewMinTorque = SensorMinTorque;
|
||||
@@ -283,12 +284,35 @@ public sealed class TorqueTrendControl : FrameworkElement
|
||||
{
|
||||
if (!_isManualView)
|
||||
{
|
||||
(_viewMinTorque, _viewMaxTorque) = GetAutoTorqueRange(samples);
|
||||
(_viewMinSpeed, _viewMaxSpeed) = GetAutoSpeedRange(samples);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
double minSpeed = samples.Min(sample => sample.SpeedRpm);
|
||||
@@ -480,15 +504,16 @@ public sealed class TorqueTrendControl : FrameworkElement
|
||||
}
|
||||
|
||||
List<TorqueSamplePayload> samples = ReadSamples();
|
||||
(_viewMinTorque, _viewMaxTorque) = samples.Count == 0
|
||||
? (SensorMinTorque, SensorMaxTorque)
|
||||
: GetAutoTorqueRange(samples);
|
||||
(_viewMinSpeed, _viewMaxSpeed) = samples.Count == 0 ? (0, 1) : GetAutoSpeedRange(samples);
|
||||
_isManualView = true;
|
||||
}
|
||||
|
||||
private void ClampView()
|
||||
{
|
||||
double torqueRange = Math.Clamp(_viewMaxTorque - _viewMinTorque, MinimumTorqueRange, SensorMaxTorque - SensorMinTorque);
|
||||
_viewMinTorque = Math.Clamp(_viewMinTorque, SensorMinTorque, SensorMaxTorque - torqueRange);
|
||||
_viewMaxTorque = _viewMinTorque + torqueRange;
|
||||
(_viewMinTorque, _viewMaxTorque) = ClampTorqueRange(_viewMinTorque, _viewMaxTorque);
|
||||
|
||||
if (!double.IsFinite(_viewMinSpeed)
|
||||
|| !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()
|
||||
{
|
||||
_lastDragPoint = null;
|
||||
|
||||
Reference in New Issue
Block a user