|
|
@@ -64,46 +64,60 @@ namespace SWRIS.Controls
|
|
|
plot.Axes.Hairline(false);
|
|
|
}
|
|
|
|
|
|
- public void AddDataPoints((double[] Positions, ushort[,] Damages) dataPoints, List<DamageDto> alertDamages)
|
|
|
+ public void AddDataPoints((double[] Positions, ushort[,] Damages) dataPoints, int[] inUseSensors, List<DamageDto> alertDamages)
|
|
|
{
|
|
|
if (dataPoints.Damages == null || dataPoints.Positions == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
+ if (inUseSensors == null || inUseSensors.Length == 0)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
int sensorCount = dataPoints.Damages.GetLength(0);
|
|
|
int sampleCount = dataPoints.Damages.GetLength(1);
|
|
|
double startPoint = dataPoints.Positions.First();
|
|
|
double endPoint = dataPoints.Positions.Last();
|
|
|
|
|
|
- _sensorSignals = new SignalXY[sensorCount];
|
|
|
+ int enabledSensorCount = inUseSensors.Length;
|
|
|
+
|
|
|
double[] mergeData = new double[sampleCount];
|
|
|
|
|
|
// 先计算所有传感器的合并数据
|
|
|
for (int j = 0; j < sampleCount; j++)
|
|
|
{
|
|
|
- double sum = 0;
|
|
|
- for (int i = 0; i < sensorCount; i++)
|
|
|
+ ushort totalValue = 0;
|
|
|
+ foreach (var i in inUseSensors)
|
|
|
{
|
|
|
- sum += dataPoints.Damages[i, j];
|
|
|
+ totalValue += dataPoints.Damages[i - 1, j];
|
|
|
}
|
|
|
- mergeData[j] = sum / sensorCount; // 计算平均值
|
|
|
+ // 计算平均值并赋值
|
|
|
+ mergeData[j] = totalValue / enabledSensorCount;
|
|
|
}
|
|
|
|
|
|
AddMaker(dataPoints.Positions, mergeData, alertDamages);
|
|
|
|
|
|
// 然后处理每个传感器的数据
|
|
|
+ int enabledSensorIndex = 0;
|
|
|
+ _sensorSignals = new SignalXY[enabledSensorCount];
|
|
|
for (int i = 0; i < sensorCount; i++)
|
|
|
{
|
|
|
- ushort[] sensorData = new ushort[sampleCount];
|
|
|
- for (int j = 0; j < sampleCount; j++)
|
|
|
+ if (inUseSensors.Contains(i + 1))
|
|
|
{
|
|
|
- sensorData[j] = dataPoints.Damages[i, j];
|
|
|
+ ushort[] sensorData = new ushort[sampleCount];
|
|
|
+ for (int j = 0; j < sampleCount; j++)
|
|
|
+ {
|
|
|
+ sensorData[j] = dataPoints.Damages[i, j];
|
|
|
+ }
|
|
|
+ var signalPlot = WpfPlot.Plot.Add.SignalXY(dataPoints.Positions, sensorData);
|
|
|
+ signalPlot.LineWidth = 1;
|
|
|
+ signalPlot.Color = _colors[i];
|
|
|
+ signalPlot.IsVisible = false;
|
|
|
+
|
|
|
+ _sensorSignals[enabledSensorIndex] = signalPlot;
|
|
|
+ enabledSensorIndex++;
|
|
|
}
|
|
|
- var signalPlot = WpfPlot.Plot.Add.SignalXY(dataPoints.Positions, sensorData);
|
|
|
- signalPlot.LineWidth = 1;
|
|
|
- signalPlot.Color = _colors[i];
|
|
|
- signalPlot.IsVisible = false;
|
|
|
- _sensorSignals[i] = signalPlot;
|
|
|
}
|
|
|
|
|
|
_mergeSignal = WpfPlot.Plot.Add.SignalXY(dataPoints.Positions, mergeData);
|
|
|
@@ -112,11 +126,16 @@ namespace SWRIS.Controls
|
|
|
|
|
|
//差值
|
|
|
double offset = (endPoint - startPoint) * 0.1;
|
|
|
- _axisLimit = new AxisLimits(startPoint - offset, endPoint + offset, 0, MAXDAMAGE);
|
|
|
+
|
|
|
+ // 动态计算Y轴最大值
|
|
|
+ double yMax = mergeData.Length > 0 ? mergeData.Max() : MAXDAMAGE;
|
|
|
+ double yMargin = yMax * 0.1;
|
|
|
+ if (yMax == 0) yMargin = 10;
|
|
|
+
|
|
|
+ _axisLimit = new AxisLimits(startPoint - offset, endPoint + offset, 0, yMax + yMargin);
|
|
|
WpfPlot.Plot.Axes.SetLimits(_axisLimit);
|
|
|
WpfPlot.Refresh();
|
|
|
}
|
|
|
-
|
|
|
public void SignalPlotVisible(int id, bool isVisible)
|
|
|
{
|
|
|
if (id > _sensorSignals.Length) return;
|
|
|
@@ -231,6 +250,6 @@ namespace SWRIS.Controls
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
}
|