Browse Source

修改记录曲线

LC 2 months ago
parent
commit
62a5ca4983
4 changed files with 57 additions and 35 deletions
  1. 2 6
      App.xaml
  2. 17 11
      Controls/RealTimeLineChart.xaml.cs
  3. 36 17
      Controls/RecordLineChart.xaml.cs
  4. 2 1
      Pages/DamagesPage.xaml.cs

+ 2 - 6
App.xaml

@@ -21,15 +21,11 @@
                                 <Setter Property="Height" Value="320" />
                                 <Setter Property="FontSize" Value="22"/>
                                 <Setter Property="FontWeight" Value="Medium"/>
-                                <Setter Property="FontFamily">
-                                    <Setter.Value>
-                                        <FontFamily>pack://application:,,,/SWRIS;component/Fonts/Alibaba-PuHuiTi-Medium.ttf#Alibaba PuHuiTi</FontFamily>
-                                    </Setter.Value>
-                                </Setter>
+                                <Setter Property="FontFamily" Value="{StaticResource PuHuiTiRegular}"/>
                                 <Setter Property="Background" Value="#141332" />
                                 <Setter Property="Foreground" Value="#FFFFFF" />
                                 <Setter Property="BorderBrush" Value="#615CDD"/>
-                                <Setter Property="BorderThickness" Value="1"/>
+                                <Setter Property="BorderThickness" Value="2"/>
                             </Style>
                         </pu:MessageBoxXSettings.WindowXStyle>
                         <pu:MessageBoxXSettings.ButtonStyle>

+ 17 - 11
Controls/RealTimeLineChart.xaml.cs

@@ -191,21 +191,27 @@ namespace SWRIS.Controls
                 }
                 _dataLogger.Data.Clear();
             }
-            else
+            if (inUseSensors == null || inUseSensors.Length == 0)
+            {
+                return;
+            }
+
+            for (int i = 0; i < dataPoints.ListStream.SampleCount; i++)
             {
-                for (int i = 0; i < dataPoints.ListStream.SampleCount; i++)
+                ushort totalValue = 0;
+                ushort totalCount = 0;
+                ushort[] values = dataPoints.ListStream.Data[i];
+                foreach (var j in inUseSensors)
                 {
-                    ushort totalValue = 0;
-                    ushort totalCount = 0;
-                    ushort[] values = dataPoints.ListStream.Data[i];
-                    foreach (var j in inUseSensors)
-                    {
-                        totalCount++;
-                        totalValue += values[j - 1];
-                    }
-                    _sensorDataQueues.Enqueue((ushort)(totalValue / totalCount));
+                    totalCount++;
+                    totalValue += values[j - 1];
                 }
+
+                var value = (ushort)(totalValue / totalCount);
+                _sensorDataQueues.Enqueue(value);
+
             }
+
             if (dataPoints.Position > _lastPosition)
             {
                 UpdateLoop(_lastPosition.Value, dataPoints.Position);

+ 36 - 17
Controls/RecordLineChart.xaml.cs

@@ -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
                 }
             }
         }
-        
+
     }
 }

+ 2 - 1
Pages/DamagesPage.xaml.cs

@@ -41,6 +41,7 @@ namespace SWRIS.Pages
             {
                 var query = System.Web.HttpUtility.ParseQueryString(NavigationService.CurrentSource.OriginalString.Split('?')[1]);
                 var record = recordRepository.GetRecord(int.Parse(query["id"]));
+
                 if (record != null && record.DataFilePath != null)
                 {
                     DamagesView.Record = record;
@@ -71,7 +72,7 @@ namespace SWRIS.Pages
                     if (damageData?.Length > 0)
                     {
                         var parsedData = ParseSensorData(damageData, record.SensorCount, record.StartPoint, record.EndPoint);
-                        chartLine.AddDataPoints(parsedData, record.Damages.ToList());
+                        chartLine.AddDataPoints(parsedData, inUseSensors, record.Damages.ToList());
                     }
                 }
             }