jiangjy 1 month ago
parent
commit
7cdbd5704c

+ 19 - 0
FrameworkLocal/UIClient/CenterViews/DataLogs/DataHistory/DataViewModel.cs

@@ -263,6 +263,25 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
             this.view.wfTimeTo.Content = SearchEndTime.ToString("yyyy-MM-dd HH:mm:ss");
         }
 
+        public void ArrowClick(string direction)
+        {
+            var view = GetView() as DataView;
+            switch (direction)
+            {
+                case "Up":
+                    view.chart.sciChart.ChartModifier.YAxis.Scroll(50, SciChart.Charting.ClipMode.ClipAtMax);
+                    break;
+                case "Down":
+                    view.chart.sciChart.ChartModifier.YAxis.Scroll(-50, SciChart.Charting.ClipMode.ClipAtMin);
+                    break;
+                case "Left":
+                    view.chart.sciChart.ChartModifier.XAxis.Scroll(-50, SciChart.Charting.ClipMode.ClipAtMin);
+                    break;
+                case "Right":
+                    view.chart.sciChart.ChartModifier.XAxis.Scroll(50, SciChart.Charting.ClipMode.ClipAtMax);
+                    break;
+            }
+        }
 
         public void SelectDate(string SelectType)
         {

+ 84 - 57
FrameworkLocal/UIClient/CenterViews/DataLogs/ProcessHistory/ProcessDetailViewModel.cs

@@ -34,6 +34,7 @@ using System.Windows.Controls;
 using SciChart.Charting.Model.ChartData;
 using MECF.Framework.UI.Client.Converter;
 using MECF.Framework.UI.Client.CenterViews.Operations.RealTime;
+using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
 
 namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
 {
@@ -109,6 +110,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
 
         public ObservableCollection<IRenderableSeries> SelectedData { get; set; }
         public ObservableCollection<IRenderableSeries> SynSelectedData { get; set; }
+        public List<ParameterNode> DoubleParameterNodes { get; set; } = new List<ParameterNode>();
 
         public List<ProcessHistoryLot> RecipeDatas { get; set; }
 
@@ -300,7 +302,12 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             SelectedData = new ObservableCollection<IRenderableSeries>();
             SynSelectedData = new ObservableCollection<IRenderableSeries>();
             VisibleRangeValue = new DoubleRange(0, 10);
-
+            DoubleParameterNodes = _realtimeProvider.GetParameters(out dict).ToList();
+            for (int j = 0; j < ParameterNodes.Count; j++)
+            {
+                ParameterNodes[j].IsVisibilityParentNode = Visibility.Hidden;
+                DoubleParameterNodes[j].IsVisibilityParentNode = Visibility.Hidden;
+            }
             // Annotations = new AnnotationCollection();
             _thread = new PeriodicJob(200, MonitorData, "ProcessDetail", true);
             try
@@ -452,11 +459,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                 if (_isAdding)
                     return true;
                 bool allUpdated = true;
-                for (int j = 0; j < ParameterNodes.Count; j++)
-                {
-                    ParameterNode par = ParameterNodes[j];
-                    par.IsVisibilityParentNode = Visibility.Hidden;
-                }
+         
                 lock (_lockSelection)
                 {
                     foreach (var item in _lstTokenTimeData)
@@ -505,14 +508,13 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                                         maxValue = pointValueList[i];
                                 }
 
-                                averageValue = sumValue / pointValueList.Count;
-
+                                averageValue = pointValueList.Count == 0 ? 0 : sumValue / pointValueList.Count;
                                 for (int i = 0; i < pointValueList.Count; i++)
                                 {
                                     stdevValue += Math.Pow(pointValueList[i] - averageValue, 2);
                                 }
 
-                                stdevValue = stdevValue / pointValueList.Count;
+                                stdevValue = pointValueList.Count == 0 ? 0 : stdevValue / pointValueList.Count;
 
                                 sigma3Value = Math.Sqrt(stdevValue) * 3;
 
@@ -621,34 +623,8 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             {
                 try
                 {
-                    var items = SelectedData.Where(x => (x as ChartDataLine<T>).DataSource == dataSource);
-                    foreach (var item in items)
-                    {
-                        var seriesItem = item as ChartDataLine<T>;
-                        if (seriesItem == null)
-                            continue;
-
-                        foreach (var data in historyData)
-                        {
-                            var dataKey = _processDetailDisplayDic.ContainsKey(seriesItem.DataName) ? _processDetailDisplayDic[seriesItem.DataName] : seriesItem.DataName;
-                            if (data.Key != dataKey)
-                                continue;
-
-                            seriesItem.Capacity += data.Value.Count;
-                            //DateTime beginTime = StepStartTime;
-                            for (int i = 0; i < data.Value.Count; i++)
-                            {
-                                var historyDataItem = data.Value[i];
-                                if (typeof(T) == typeof(double))
-                                {
-                                    //xData = Math.Round((historyDataItem.dateTime - beginTime).TotalMilliseconds / 1000, 0, MidpointRounding.AwayFromZero);
-                                    seriesItem.Append((T)Convert.ChangeType((historyDataItem.dateTime - StepStartTime).TotalMilliseconds / 1000d, typeof(T)), historyDataItem.value);
-                                }
-                                else
-                                    seriesItem.Append((T)Convert.ChangeType(historyDataItem.dateTime, typeof(T)), historyDataItem.value);
-                            }
-                        }
-                    }
+                    FillDataToChart(SelectedData, dataSource, historyData);
+                    FillDataToChart(SynSelectedData, dataSource, historyData);
                     RefresCharView();
                 }
                 catch (Exception ex)
@@ -656,6 +632,39 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     LOG.Write(ex);
                 }
             }));
+
+        }
+        void FillDataToChart(ObservableCollection<IRenderableSeries> series, string dataSource, Dictionary<string, List<HistoryDataItem>> historyData)
+        {
+            var items = series.Where(x => (x as ChartDataLine<T>).DataSource == dataSource);
+            if (items == null) return;
+            foreach (var item in items)
+            {
+                var seriesItem = item as ChartDataLine<T>;
+                if (seriesItem == null)
+                    continue;
+
+                foreach (var data in historyData)
+                {
+                    var dataKey = _processDetailDisplayDic.ContainsKey(seriesItem.DataName) ? _processDetailDisplayDic[seriesItem.DataName] : seriesItem.DataName;
+                    if (data.Key != dataKey)
+                        continue;
+
+                    seriesItem.Capacity += data.Value.Count;
+                    //DateTime beginTime = StepStartTime;
+                    for (int i = 0; i < data.Value.Count; i++)
+                    {
+                        var historyDataItem = data.Value[i];
+                        if (typeof(T) == typeof(double))
+                        {
+                            //xData = Math.Round((historyDataItem.dateTime - beginTime).TotalMilliseconds / 1000, 0, MidpointRounding.AwayFromZero);
+                            seriesItem.Append((T)Convert.ChangeType((historyDataItem.dateTime - StepStartTime).TotalMilliseconds / 1000d, typeof(T)), historyDataItem.value);
+                        }
+                        else
+                            seriesItem.Append((T)Convert.ChangeType(historyDataItem.dateTime, typeof(T)), historyDataItem.value);
+                    }
+                }
+            }
         }
         /// <summary>
         /// 获取时间列表
@@ -699,14 +708,14 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                 }
             }
         }
-        public void TxtMouseLeftButtonDown(ParameterNode node)
+        public void TxtMouseLeftButtonDown(ParameterNode node, ObservableCollection<IRenderableSeries> series)
         {
             node.Selected = !node.Selected;
-            ParameterCheck(node);
+            ParameterCheck(node, series);
         }
-        public void ParameterCheck(ParameterNode node)
+        public void ParameterCheck(ParameterNode node, ObservableCollection<IRenderableSeries> series)
         {
-            bool result = RefreshTreeStatusToChild(node);
+            bool result = RefreshTreeStatusToChild(node, series);
             if (!result)
             {
                 node.Selected = !node.Selected;
@@ -719,7 +728,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
         /// <summary>
         /// Refresh tree node status from current to children, and add data to SelectedData
         /// </summary>
-        private bool RefreshTreeStatusToChild(ParameterNode node)
+        private bool RefreshTreeStatusToChild(ParameterNode node, ObservableCollection<IRenderableSeries> SelectedData)
         {
             if (node?.ChildNodes.Count > 0)
             {
@@ -728,7 +737,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     ParameterNode n = node.ChildNodes[i];
                     n.Selected = node.Selected;
 
-                    if (!RefreshTreeStatusToChild(n))
+                    if (!RefreshTreeStatusToChild(n, SelectedData))
                     {
                         n.Selected = !n.Selected;
                         return false;
@@ -741,17 +750,10 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                 try
                 {
                     var item = SelectedData?.FirstOrDefault(x => (x as ChartDataLine<T>).DataName == node.Name);
-                    if (item == null) item = SynSelectedData.FirstOrDefault(x => (x as ChartDataLine<T>).DataName == node.Name);
                     bool isExist = item != null;
                     if (isExist && !node.Selected)//删除
                     {
                         SelectedData.Remove(item);
-                        SynSelectedData.Remove(item);
-                        if (SynSelectedData.Count == 0 && this.view.syncChart.Visibility == Visibility.Visible)
-                        {
-                            this.view.syncChart.Visibility = Visibility.Hidden;
-                            Grid.SetRowSpan(this.view.sciChart, 2);
-                        }
                     }
                     else
                     {
@@ -858,12 +860,6 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                 RefreshTreeStatusToParent(cp.Tag as ParameterNode);
             }
             SelectedData.Clear();
-            SynSelectedData.Clear();
-            if (this.view.syncChart.Visibility == Visibility.Visible)
-            {
-                this.view.syncChart.Visibility = Visibility.Hidden;
-                Grid.SetRowSpan(this.view.sciChart, 2);
-            }
         }
 
         private void SetParameterNode(ObservableCollection<ParameterNode> nodes, bool isChecked)
@@ -1237,6 +1233,36 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
         {
             this.view.sciChart.ZoomExtents();
         }
+        public void ArrowClick(string direction)
+        {
+            switch (direction)
+            {
+                case "Up":
+                    if (VisibleRangeValue is DoubleRange uprange)
+                    {
+                        VisibleRangeValue = new DoubleRange(uprange.Min + YScale, uprange.Max + YScale);
+                    }
+                    break;
+                case "Down":
+                    if (VisibleRangeValue is DoubleRange downrange)
+                    {
+                        VisibleRangeValue = new DoubleRange(downrange.Min - YScale, downrange.Max - YScale);
+                    }
+                    break;
+                case "Left":
+                    if (VisibleRangeTime is DoubleRange leftrange)
+                    {
+                        VisibleRangeTime = new DoubleRange(leftrange.Min - XScale, leftrange.Max - XScale);
+                    }
+                    break;
+                case "Right":
+                    if (VisibleRangeTime is DoubleRange range)
+                    {
+                        VisibleRangeTime = new DoubleRange(range.Min + XScale, range.Max + XScale);
+                    }
+                    break;
+            }
+        }
         public void BackPan()//前移
         {
             if ((_directionByte & 0x01) == 1)//x
@@ -1374,7 +1400,8 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     allCheckNode.AddRange(GetAllCheckedLeafNode(x));
                 });
 
-                allCheckNode.ForEach(x => { ParameterCheck(x); });
+                allCheckNode.ForEach(x => { ParameterCheck(x, SelectedData); });
+
             }
         }