From c977410d33cff751daccb7c788bb2b7ba57df130 Mon Sep 17 00:00:00 2001 From: THINKPAD Date: Sun, 31 Jul 2022 00:32:27 +0800 Subject: [PATCH] =?UTF-8?q?DataView=E5=9F=BA=E6=9C=AC=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C=E8=BF=98=E5=AD=98=E5=9C=A8=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=B0=8F=E9=94=99=E8=AF=AF=E5=92=8C=E5=B0=8F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=BC=BA=E5=A4=B1=E3=80=82=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=98=E4=B8=8D=E5=A4=AA=E6=B5=81=E7=95=85?= =?UTF-8?q?=EF=BC=8C=E8=80=83=E8=99=91=E5=8A=A0=E5=85=A5=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E7=BA=BF=E5=B7=A5=E4=BD=9C=E6=A8=A1=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataLogs/Core/ParameterNode.cs | 4 +- .../DataLogs/Core/SicFastLineSeries.cs | 16 ++++- .../DataLogs/DataHistory/DataViewModel.cs | 58 +++++++++++-------- 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/ParameterNode.cs b/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/ParameterNode.cs index 8f3c5b6..8a78b29 100644 --- a/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/ParameterNode.cs +++ b/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/ParameterNode.cs @@ -46,7 +46,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core _isUpdateSuspended = false; Name = name; - RawData = new List(); + //RawData = new List(); MaxTerminalSelectionAllowed = -1; ChildNodes = new ParameterNodeCollection(this); ChildNodes.TerminalNodeSelectionChanged += OnTerminalNodeSelectionChanged; @@ -186,7 +186,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core public ParameterNode ParentNode { get; set; } - public List RawData { get; } + //public List RawData { get; } public Visibility IsVisibilityParentNode { get; set; } diff --git a/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/SicFastLineSeries.cs b/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/SicFastLineSeries.cs index 17e8254..421c6ee 100644 --- a/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/SicFastLineSeries.cs +++ b/FrameworkLocal/UIClient/CenterViews/DataLogs/Core/SicFastLineSeries.cs @@ -4,6 +4,7 @@ using System; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows.Media; +using SciChart.Charting.Model.Filters; namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core { @@ -29,8 +30,10 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core XAxisId = "DefaultAxisId"; YAxisId = "DefaultAxisId"; - var ds = new XyDataSeries(); - DataSeries = ds; + DataSeries = new XyDataSeries + { + SeriesName = dataName + }; DisplayName = displayName; DataName = dataName; @@ -96,6 +99,12 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core } } + public double DataMin { get; } + + public double DataMax { get; } + + public double DataAverage { get; } + #endregion #region Methods @@ -120,12 +129,13 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core for (var i = 0; i < ds.Count; i++) { var y = (ds.Metadata[i] as ParameterNodePoint)?.Value; - if(y == null) + if (y == null) continue; ds.Update(i, (double)y * _dataFactor + DataOffset); } + //var dataSeries = DataSeries as XyDataSeries; //for (var index = 0; index < dataSeries.Count; ++index) // dataSeries.Update(index, _queueRawData.ElementAt(index).Item2 * _dataFactor + _dataOffset); diff --git a/FrameworkLocal/UIClient/CenterViews/DataLogs/DataHistory/DataViewModel.cs b/FrameworkLocal/UIClient/CenterViews/DataLogs/DataHistory/DataViewModel.cs index 62718ff..af0d587 100644 --- a/FrameworkLocal/UIClient/CenterViews/DataLogs/DataHistory/DataViewModel.cs +++ b/FrameworkLocal/UIClient/CenterViews/DataLogs/DataHistory/DataViewModel.cs @@ -228,27 +228,22 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory foreach (var module in selectedModules) { var selectedTerminal = module.Flatten(true).Where(x => x.IsSelected == true); - + foreach (var terminal in selectedTerminal) { - terminal.RawData.Clear(); - var line2D = new SicFastLineSeries(terminal.FullName) - { - AntiAliasing = true, - ResamplingMode = ResamplingMode.MinMax - }; - // 确保当列队未空时不会出错,选择默认黑色。 var color = colorPattern.Any() ? colorPattern.Dequeue() : Color.FromArgb(255, colorRandom.Next(0, 255), colorRandom.Next(0, 255), colorRandom.Next(0, 255)); - line2D.Stroke = System.Windows.Media.Color.FromRgb(color.R, color.G, color.B); - - var ds = line2D.GetDataSeries(); - ds.Tag = terminal; - + var line2D = new SicFastLineSeries(terminal.FullName) + { + AntiAliasing = true, + ResamplingMode = ResamplingMode.MinMax, + Stroke = System.Windows.Media.Color.FromRgb(color.R, color.G, color.B), + Tag = terminal + }; SelectedData.Add(line2D); } @@ -266,6 +261,21 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory if (e.Item1 == 100) { IsBusy = false; + + foreach (var renderableSeries in SelectedData) + { + var series = renderableSeries as SicFastLineSeries; + var dataSeries = series?.GetDataSeries(); + if (series?.Tag is ParameterNode parameterNode && dataSeries!= null) + { + parameterNode.MaxValue = ((double)dataSeries.YMax).ToString("F2"); + parameterNode.MinValue = ((double)dataSeries.YMin).ToString("F2"); + parameterNode.AverageValue = + dataSeries.Metadata.Cast().Average(x => x.Value).ToString("F2"); + } + + + } } BusyIndicatorContent = e.Item2; @@ -556,7 +566,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory var dataSeries = line2D.GetDataSeries();*/ var dataSeries = - dataSeriesList.FirstOrDefault(x => (x.Tag is ParameterNode node) && node.FullName == fullName); + dataSeriesList.FirstOrDefault(x => x.SeriesName == fullName); if (dataSeries == null) continue; @@ -564,9 +574,9 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory /*// ParameterNode放在line2D.DataSeries.Tag中,而不是line2D.Tag中,因为ParameterNode需要从Task中抛给seriesAppendDone // 进行数据统计,但Task中无法访问line2D对象,因为跨线程访问问题。 dataSeries.Tag = node;*/ - var rawData = (dataSeries.Tag as ParameterNode)?.RawData; - if(rawData == null) - continue; + //var rawData = (dataSeries.Tag as ParameterNode)?.RawData; + //if(rawData == null) + // continue; #endregion @@ -813,8 +823,8 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory for (var i = 0; i < SelectedData.Count; i++) { - var points = (((SelectedData[i] as SicFastLineSeries))?.GetDataSeries().Tag as ParameterNode) - ?.RawData; + var points = ((SelectedData[i] as SicFastLineSeries))?.GetDataSeries().Metadata + .Cast().ToList(); if (points != null) { foreach (var p in points) @@ -840,10 +850,11 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory using (_cancellationTokenSource.Token.Register(Thread.CurrentThread.Abort)) { var csvBuilder = new StringBuilder(); + csvBuilder.Append("Time,"); csvBuilder.AppendLine(string.Join(",", columns)); foreach (var tv in timeValue) { - csvBuilder.Append(tv.Key); + csvBuilder.Append($" {tv.Key:yyyy/MM/dd HH:mm:ss.fff}"); csvBuilder.Append(","); csvBuilder.AppendLine(string.Join(",", tv.Value)); @@ -945,8 +956,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory #endif - var node = cp?.GetDataSeries().Tag as ParameterNode; - var points = node?.RawData; + var points = cp?.GetDataSeries().Metadata.Cast().ToList(); var csvBuilder = new StringBuilder(); @@ -959,14 +969,14 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory { #if EXPORT_TO_CSV - csvBuilder.AppendLine($"Time,{node.FullName}"); // table header + csvBuilder.AppendLine($"Time,{cp.DataName}"); // table header #endif foreach (var p in points) { #if EXPORT_TO_CSV - csvBuilder.AppendLine($"{p.Time},{p.Value}"); + csvBuilder.AppendLine($" {p.Time:yyyy/MM/dd HH:mm:ss.fff},{p.Value}"); #else var row = ds.Tables[0].NewRow(); row[0] = p.Time;