增加监控界面

This commit is contained in:
2024-07-12 10:39:55 +08:00
parent 1e0cba7b53
commit c9f4e88e04
11 changed files with 892 additions and 141 deletions

View File

@@ -1,9 +1,11 @@
using Arction.Wpf.Charting;
using Arction.Wpf.Charting.Annotations;
using Arction.Wpf.Charting.Axes;
using Arction.Wpf.Charting.Maps;
using Arction.Wpf.Charting.Series3D;
using Arction.Wpf.Charting.SeriesXY;
using Arction.Wpf.Charting.Views.ViewXY;
using CapMachine.Model;
using ImTools;
using Prism.Mvvm;
using System;
@@ -18,60 +20,64 @@ namespace CapMachine.Wpf.Models
/// <summary>
/// 曲线实时系列模型
/// </summary>
public class ChartRtSeries:BindableBase
public class ChartRtSeries : BindableBase
{
public ChartRtSeries(AxisY axisY, LightningChart lightningChart, string SeriesName)
{
//var CreateAxisY = new AxisY();
//CreateAxisY.Title.Text = Name;
//CreateAxisY.Title.AllowDragging = false;
//CreateAxisY.SetRange(0, 100);
//CreateAxisY.MajorGrid.Visible = false;
////取消滚轮缩放
//CreateAxisY.ZoomingEnabled = false;
/// <summary>
/// 实例化函数
/// </summary>
/// <param name="axisY"></param>
/// <param name="lightningChart"></param>
/// <param name="SeriesName"></param>
//public ChartRtSeries(AxisY axisY, LightningChart lightningChart, string SeriesName)
//{
// //var CreateAxisY = new AxisY();
// //CreateAxisY.Title.Text = Name;
// //CreateAxisY.Title.AllowDragging = false;
// //CreateAxisY.SetRange(0, 100);
// //CreateAxisY.MajorGrid.Visible = false;
// ////取消滚轮缩放
// //CreateAxisY.ZoomingEnabled = false;
// //模型赋值
// LightningChartInstance = lightningChart;
// //ChartAxisY = axisY;
// ChartAxisX = lightningChart.ViewXY.XAxes[0];
// Name = SeriesName;
// //Unit = "℃";
// //判断别重复因为可能共用Y轴的信息
// //绑定lightningChart
// lightningChart.ViewXY.YAxes.Add(axisY);
// ChartPointLineSeries = new PointLineSeries(lightningChart.ViewXY, lightningChart.ViewXY.XAxes[0], axisY);
// ChartPointLineSeries.Title.Text = SeriesName;
// //绑定lightningChart
// lightningChart.ViewXY.PointLineSeries.Add(ChartPointLineSeries);
//}
/// <summary>
/// 实例化函数
/// </summary>
public ChartRtSeries(LightningChart lightningChart, ChartConfig chartConfig, List<ChartRtSeries> listchartRtSeries, ConfigChartSelect configChartSelect)
{
//模型赋值
LightningChartInstance = lightningChart;
ChartAxisY = axisY;
ChartAxisX = lightningChart.ViewXY.XAxes[0];
Name = SeriesName;
ChartConfigInfo = chartConfig;
ChartAxisY = configChartSelect.ConfigChartYAxis;
ChartAxisX = LightningChartInstance.ViewXY.XAxes[0];
Name = configChartSelect.Name;
ListChartRtSeries= listchartRtSeries;
Unit = "℃";
AddSeries(configChartSelect.Name!, configChartSelect.ConfigChartYAxis!);
//判断别重复因为可能共用Y轴的信息
//绑定lightningChart
lightningChart.ViewXY.YAxes.Add(axisY);
ChartPointLineSeries = new PointLineSeries(lightningChart.ViewXY, lightningChart.ViewXY.XAxes[0], axisY);
ChartPointLineSeries.Title.Text = SeriesName;
//绑定lightningChart
lightningChart.ViewXY.PointLineSeries.Add(ChartPointLineSeries);
}
///// <summary>
///// 名称
///// </summary>
//public string? Name { get; set; }
///// <summary>
///// 值
///// </summary>
//public double Value { get; set; }
#region
///// <summary>
///// Max
///// </summary>
//public double Max { get; set; }
///// <summary>
///// Min
///// </summary>
//public double Min { get; set; }
///// <summary>
///// 单位
///// </summary>
//public string? Unit { get; set; }
private string? _Name;
/// <summary>
@@ -93,37 +99,159 @@ namespace CapMachine.Wpf.Models
set { _Value = value; RaisePropertyChanged(); }
}
private double _Max;
//private string? _Unit;
///// <summary>
///// 单位
///// </summary>
//public string? Unit
//{
// get { return _Unit; }
// set { _Unit = value; RaisePropertyChanged(); }
//}
#endregion
/// <summary>
/// Max
/// 删除Y轴信息
/// </summary>
public double Max
public void DeleteAxisY()
{
get { return _Max; }
set { _Max = value; RaisePropertyChanged(); }
//删除Y轴信息
LightningChartInstance.ViewXY.YAxes.Remove(LightningChartInstance.ViewXY.YAxes.FindFirst(a => a.Title.Text == ChartAxisY.Name));
}
private double _Min;
/// <summary>
/// Min
/// 删除系列
/// </summary>
public double Min
public void DeleteSeries()
{
get { return _Min; }
set { _Min = value; RaisePropertyChanged(); }
LightningChartInstance.BeginUpdate();
LightningChartInstance.ViewXY.PointLineSeries.Remove(ChartPointLineSeries);
LightningChartInstance.EndUpdate();
ListChartRtSeries.Remove(ListChartRtSeries.FindFirst(a=>a.Name== Name));
}
private string? _Unit;
/// <summary>
/// 单位
/// 增加系列
/// </summary>
public string? Unit
/// <param name="Name"></param>
private void AddSeries(string SeriesName, ConfigChartYAxis configChartYAxis)
{
get { return _Unit; }
set { _Unit = value; RaisePropertyChanged(); }
LightningChartInstance.BeginUpdate();
//判断之前的系列是否已经存在(依据名称),存在使用之前的系列,否则新增
var AxisYInfo = GetAxisY(configChartYAxis.Name);
if (AxisYInfo == null)
{
//新增
AxisYInfo = new AxisY();
AxisYInfo.Title.Text = configChartYAxis.Name;
AxisYInfo.Title.AllowDragging = false;
AxisYInfo.SetRange(configChartYAxis.Min, configChartYAxis.Max);
AxisYInfo.MajorGrid.Visible = false;
//取消滚轮缩放
AxisYInfo.ZoomingEnabled = false;
LightningChartInstance.ViewXY.YAxes.Add(AxisYInfo);
}
else
{
//使用之前
AxisYInfo.SetRange(configChartYAxis.Min, configChartYAxis.Max);
}
var SeriesInfo = GetPointLineSeries(SeriesName);
if (SeriesInfo == null)
{
//新增
SeriesInfo = new PointLineSeries(LightningChartInstance.ViewXY, LightningChartInstance.ViewXY.XAxes[0], AxisYInfo);
SeriesInfo.Title.Text = SeriesName;
SeriesInfo.LineStyle.Color = ChartConfigInfo.ListColor[LightningChartInstance.ViewXY.YAxes.Count + 1];
SeriesInfo.AllowUserInteraction = false;
LightningChartInstance.ViewXY.PointLineSeries.Add(SeriesInfo);
}
else
{
//使用之前
SeriesInfo.AssignYAxisIndex = AxisYInfo.SegmentIndex;
}
//赋值给当前的模型
ChartPointLineSeries = SeriesInfo;
//Configure and add series to the chart
LightningChartInstance.EndUpdate();
}
/// <summary>
/// 获取AxisY信息
/// </summary>
/// <param name="AxisName"></param>
/// <returns></returns>
private AxisY GetAxisY(string AxisName)
{
var AxisYs = LightningChartInstance.ViewXY.YAxes;
if (AxisYs != null)
{
var findAxis = AxisYs.FindFirst(a => a.Title.Text == AxisName);
if (findAxis != null)
{
return findAxis;
}
else
{
return null;
}
}
else
{
return null;
}
}
/// <summary>
/// 获取PointLineSeries信息
/// </summary>
/// <param name="AxisName"></param>
/// <returns></returns>
private PointLineSeries GetPointLineSeries(string SeriesName)
{
var PointLineSeries = LightningChartInstance.ViewXY.PointLineSeries;
if (PointLineSeries != null)
{
var findSeries = PointLineSeries.FindFirst(a => a.Title.Text == SeriesName);
if (findSeries != null)
{
return findSeries;
}
else
{
return null;
}
}
else
{
return null;
}
}
/// <summary>
/// 上层管理集合
/// </summary>
public List<ChartRtSeries> ListChartRtSeries { get; set; }
/// <summary>
/// 曲线
/// </summary>
@@ -132,7 +260,7 @@ namespace CapMachine.Wpf.Models
/// <summary>
/// Y轴
/// </summary>
public AxisY? ChartAxisY { get; set; }
public ConfigChartYAxis? ChartAxisY { get; set; }
/// <summary>
/// X轴
@@ -144,6 +272,12 @@ namespace CapMachine.Wpf.Models
/// </summary>
public LightningChart LightningChartInstance { get; set; }
/// <summary>
/// 曲线配置信息
/// </summary>
public ChartConfig ChartConfigInfo { get; set; }
/// <summary>
/// X轴滚动
/// </summary>
@@ -160,7 +294,7 @@ namespace CapMachine.Wpf.Models
/// </summary>
public void AddValue(double Data)
{
//foreach (var item in lightningChart1.ViewXY.PointLineSeries)
//foreach (var item in LightningChartInstance.ViewXY.PointLineSeries)
//{
//Disable updates, to prevent several extra refreshes
LightningChartInstance.BeginUpdate();
@@ -183,10 +317,11 @@ namespace CapMachine.Wpf.Models
LightningChartInstance.ViewXY.XAxes[0].ScrollPosition = _previousX;
}
//Allow updates again, and update
LightningChartInstance.EndUpdate();
Value = Data;
//}
}

View File

@@ -1,5 +1,6 @@
using Arction.Wpf.Charting.Axes;
using Arction.Wpf.Charting.SeriesXY;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -11,7 +12,7 @@ namespace CapMachine.Wpf.Models
/// <summary>
/// 曲线实时数据模型
/// </summary>
public class ChartRtValue
public class ChartRtValue:BindableBase
{
public ChartRtValue()
{
@@ -23,10 +24,15 @@ namespace CapMachine.Wpf.Models
/// </summary>
public string? Name { get; set; }
private double _Value;
/// <summary>
/// 值
/// </summary>
public double Value { get; set; }
public double Value
{
get { return _Value; }
set { _Value = value; RaisePropertyChanged(); }
}
/// <summary>
/// Max