using LiveChartsCore.SkiaSharpView; using LiveChartsCore; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using LiveChartsCore.Kernel.Sketches; using LiveChartsCore.SkiaSharpView.Painting; using ScottPlot.Colormaps; using System.Drawing; using System.Windows.Media.TextFormatting; using System.Xml.Linq; using SkiaSharp; using LiveChartsCore.Defaults; using static System.Net.WebRequestMethods; using System.Collections.ObjectModel; using DyeingComputer.Properties; using LiveChartsCore.Measure; using LiveChartsCore.Motion; using SunlightCentralizedControlManagement_SCCM_.Properties; using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper; using TouchSocket.Core; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows; namespace SunlightCentralizedControlManagement_SCCM_.ViewModel { public partial class CurveDiagramViewModel : ObservableObject//ViewModelBase { public static ISeries[] Series { get; set; } public static ObservableCollection ObservableValues { get; set; } //x轴时间格式 public Axis[] XAxes { get; set; } = { new DateTimeAxis(TimeSpan.FromSeconds(5) , date => date.ToString("yyyy-MM-dd HH:mm")) { CrosshairLabelsBackground = SKColors.DarkGray.AsLvcColor(), CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkSlateBlue, 1), CrosshairPaint = new SolidColorPaint(SKColors.DarkSlateGray, 1), }, }; //颜色 private static readonly SKColor s_blue = new SKColor(25, 118, 210); private static readonly SKColor s_blue_0 = new SKColor(25, 18, 210); private static readonly SKColor s_blue_1 = new SKColor(25, 118, 170); private static readonly SKColor s_blue_2 = new SKColor(25, 118, 130); private static readonly SKColor s_blue_3 = new SKColor(25, 118, 90); private static readonly SKColor s_blue_4 = new SKColor(25, 118, 50); private static readonly SKColor s_red = new SKColor(229, 57, 53); private static readonly SKColor s_red_1 = new SKColor(189, 57, 53); private static readonly SKColor s_red_2 = new SKColor(149, 57, 53); private static readonly SKColor s_red_3 = new SKColor(109, 57, 53); private static readonly SKColor s_yellow = new SKColor(198, 167, 0); public ICartesianAxis[] YAxes { get; set; } ={ new Axis //y在此轴上缩放 { MinLimit =0, MaxLimit =160, Name = Properties.Resources.Temperature +" ( °C )", NameTextSize = 24, NamePaint = new SolidColorPaint(s_blue), NamePadding = new LiveChartsCore.Drawing.Padding(0, 20), Padding = new LiveChartsCore.Drawing.Padding(0, 0, 20, 0), TextSize = 16, LabelsPaint = new SolidColorPaint(s_blue), TicksPaint = new SolidColorPaint(s_blue), SubticksPaint = new SolidColorPaint(s_blue), DrawTicksPath = true, CrosshairSnapEnabled = true, Position = LiveChartsCore.Measure.AxisPosition.Start },//温度轴 new Axis // the "hundreds" series will be scaled on this axis { MinLimit =0, Name = Properties.Resources.WaterLevel +" ( L )", NameTextSize = 24, NamePaint = new SolidColorPaint(s_red), NamePadding = new LiveChartsCore.Drawing.Padding(0, 20), Padding = new LiveChartsCore.Drawing.Padding(20, 0, 0, 0), TextSize = 16, LabelsPaint = new SolidColorPaint(s_red), TicksPaint = new SolidColorPaint(s_red), SubticksPaint = new SolidColorPaint(s_red), DrawTicksPath = true, CrosshairSnapEnabled = true, Position = LiveChartsCore.Measure.AxisPosition.End }, //液位轴 new Axis // { MinLimit =0, MaxLimit =14, Name = "PH ( pH )", NameTextSize = 16, NamePaint = new SolidColorPaint(s_yellow), NamePadding = new LiveChartsCore.Drawing.Padding(0, 20), Padding = new LiveChartsCore.Drawing.Padding(20, 0, 0, 0), TextSize = 16, LabelsPaint = new SolidColorPaint(s_yellow), TicksPaint = new SolidColorPaint(s_yellow), SubticksPaint = new SolidColorPaint(s_yellow), DrawTicksPath = true, CrosshairSnapEnabled = true, Position = LiveChartsCore.Measure.AxisPosition.End }, //PH轴 }; private static Random _r = new Random(); private static ObservableCollection MTT_values; private static ObservableCollection MTL_values; private static ObservableCollection MTH_values; private static ObservableCollection MST_values; private static ObservableCollection MUT_values; private static ObservableCollection STTA_values; private static ObservableCollection STLA_values; private static ObservableCollection STTB_values; private static ObservableCollection STLB_values; private static ObservableCollection STTC_values; private static ObservableCollection STLC_values; private static SQLiteHelper SQLiteHelpers = null; //定义数据库 private static string ChartAdress = Environment.CurrentDirectory + "\\DataBase\\Chart.db"; //数据库路径 static DataTable CDB = new DataTable(); private static int CDB_Count;//长度 public CurveDiagramViewModel() { Curve(""); } public static void Curve(string SYSWorkNumder) { if (!string.IsNullOrEmpty(SYSWorkNumder)) { SQLiteHelpers = new SQLiteHelper(ChartAdress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 CDB = SQLiteHelpers.ExecuteDataSet("select * from Chart where DYELOT = '" + SYSWorkNumder + "'order by Time", null).Tables[0]; SQLiteHelpers.Close(); CDB_Count = CDB.Rows.Count; var MTT_items = new List(); var MTL_items = new List(); var MTH_items = new List(); var MST_items = new List(); var MUT_items = new List(); var STTA_items = new List(); var STLA_items = new List(); var STTB_items = new List(); var STLB_items = new List(); var STTC_items = new List(); var STLC_items = new List(); for (var i = 0; i < CDB_Count; i++) { DateTime TIME = Convert.ToDateTime(CDB.Rows[i].Field("Time")); MTT_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MTT"))); MTL_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MTL"))); MTH_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MTH"))); MST_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MST"))); MUT_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("MUT"))); if (MainWindowViewModel.SYS_AT1 == 1) { STTA_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STTA"))); STLA_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STLA"))); } if (MainWindowViewModel.SYS_AT2 == 1) { STTB_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STTB"))); STLB_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STLB"))); } if (MainWindowViewModel.SYS_AT3 == 1) { STTC_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STTC"))); STLC_items.Add(new DateTimePoint(TIME, CDB.Rows[i].Field("STLC"))); } } MTT_values = new ObservableCollection(MTT_items); MTL_values = new ObservableCollection(MTL_items); MTH_values = new ObservableCollection(MTH_items); MST_values = new ObservableCollection(MST_items); MUT_values = new ObservableCollection(MUT_items); if (MainWindowViewModel.SYS_AT1 == 1) { STTA_values = new ObservableCollection(STTA_items); STLA_values = new ObservableCollection(STLA_items); } if (MainWindowViewModel.SYS_AT2 == 1) { STTB_values = new ObservableCollection(STTB_items); STLB_values = new ObservableCollection(STLB_items); } if (MainWindowViewModel.SYS_AT3 == 1) { STTC_values = new ObservableCollection(STTC_items); STLC_values = new ObservableCollection(STLC_items); } Series = new ISeries[] { new LineSeries { Name = Properties.Resources.MasterCylinder +"PH", Values = MTH_values, Stroke = new SolidColorPaint(s_yellow, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_yellow, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 2, }, //PH new LineSeries { Name = Resources.Target + Resources.Temperature, Values = MST_values, Stroke = new SolidColorPaint(s_blue_0, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_blue_0, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 0, }, //目标温度 new LineSeries { Name = Properties.Resources.Temperature +"1("+Properties.Resources.MasterCylinder+")", Values = MTT_values, Stroke = new SolidColorPaint(s_blue, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_blue, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 0, }, //主缸 new LineSeries { Name = Properties.Resources.Temperature +"2("+Properties.Resources.MasterCylinder+Properties.Resources.Bottom+")", Values = MUT_values, Stroke = new SolidColorPaint(s_blue_4, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_blue_4, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 0, }, //缸底 new LineSeries { Name = Properties.Resources.Temperature +"3("+Resources.Medicine + Resources.Tank +"1)", Values = STTA_values, Stroke = new SolidColorPaint(s_blue_1, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_blue_1, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 0, }, //附缸1 new LineSeries { Name = Properties.Resources.Temperature +"4("+Resources.Medicine + Resources.Tank +"2)", Values = STTB_values, Stroke = new SolidColorPaint(s_blue_2, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_blue_2, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 0, }, //附缸2 new LineSeries { Name = Properties.Resources.Temperature +"5("+Resources.Medicine + Resources.Tank +"3)", Values = STTC_values, Stroke = new SolidColorPaint(s_blue_3, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_blue_3, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 0, }, //附缸3 new LineSeries { Name = Properties.Resources.WaterLevel +"("+Properties.Resources.MasterCylinder+")", Values = MTL_values, Stroke = new SolidColorPaint(s_red, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_red, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 1, }, //主缸液位 new LineSeries { Name = Properties.Resources.WaterLevel +"("+Resources.Medicine + Resources.Tank +"1)", Values = STLA_values, Stroke = new SolidColorPaint(s_red_1, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_red_1, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 1, }, //附缸1液位 new LineSeries { Name = Properties.Resources.WaterLevel +"("+Resources.Medicine + Resources.Tank +"2)", Values = STLB_values, Stroke = new SolidColorPaint(s_red_2, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_red_2, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 1, }, //附缸2液位 new LineSeries { Name = Properties.Resources.WaterLevel +"("+Resources.Medicine + Resources.Tank +"3)", Values = STLC_values, Stroke = new SolidColorPaint(s_red_3, 2), GeometrySize = 0, GeometryStroke = new SolidColorPaint(s_red_3, 2), Fill = null, LineSmoothness = 0, ScalesYAt = 1, }, //附缸3 液位 }; } } } }