From 74051a428770775463a6ef02f62e44d13dc45f72 Mon Sep 17 00:00:00 2001 From: liyaobang <884131781@qq.com> Date: Fri, 18 Apr 2025 14:58:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E8=A7=89=E5=AE=9A=E4=BD=8D=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DH.Commons/Base/VisualLocalization.cs | 87 +++++++++++--------- DHSoftware/Views/VisualLocalizationWindow.cs | 45 ++++++---- 2 files changed, 81 insertions(+), 51 deletions(-) diff --git a/DH.Commons/Base/VisualLocalization.cs b/DH.Commons/Base/VisualLocalization.cs index c6be68c..a38ce7a 100644 --- a/DH.Commons/Base/VisualLocalization.cs +++ b/DH.Commons/Base/VisualLocalization.cs @@ -1,18 +1,14 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; -using System.Text; using System.Text.Json; -using System.Threading.Tasks; namespace DH.Commons.Base { - [Serializable] public class VisualLocalization { - // 必须包含公共无参构造函数 - public VisualLocalization() { } - + // 配置属性 public string CameraName { get; set; } public string ModelPath { get; set; } public string ImgPath { get; set; } @@ -20,45 +16,62 @@ namespace DH.Commons.Base public string Direction { get; set; } public string Speed { get; set; } - // 保存到文件 - public void SaveToFile(string filePath) - { - try - { - var options = new JsonSerializerOptions - { - WriteIndented = true, // 美化格式 - IgnoreNullValues = true // 忽略空值 - }; + // 配置文件路径 + private const string ConfigFile = "VisualConfigs.json"; + private static readonly object _fileLock = new object(); - string json = JsonSerializer.Serialize(this, options); - File.WriteAllText(filePath, json); - } - catch (Exception ex) + /// + /// 保存当前配置(存在则更新,不存在则新增) + /// + public void Save() + { + lock (_fileLock) { - throw new InvalidOperationException($"保存失败: {ex.Message}"); + var list = LoadAll(); + var existing = list.FirstOrDefault(c => c.CameraName == CameraName); + + if (existing != null) + { + // 更新现有配置 + existing.ModelPath = ModelPath; + existing.ImgPath = ImgPath; + existing.Threshold = Threshold; + existing.Direction = Direction; + existing.Speed = Speed; + } + else + { + list.Add(this); + } + + SaveAll(list); } } - // 从文件加载 - public static VisualLocalization LoadFromFile(string filePath) + /// + /// 获取全部配置列表 + /// + public static List LoadAll() { - if (!File.Exists(filePath)) - throw new FileNotFoundException("文件不存在", filePath); + lock (_fileLock) + { + if (!File.Exists(ConfigFile)) return new List(); - try - { - string json = File.ReadAllText(filePath); - return JsonSerializer.Deserialize(json); + var json = File.ReadAllText(ConfigFile); + return JsonSerializer.Deserialize>(json) + ?? new List(); } - catch (JsonException ex) + } + + private static void SaveAll(List list) + { + var options = new JsonSerializerOptions { - throw new InvalidOperationException($"JSON解析错误: {ex.Message}"); - } - catch (IOException ex) - { - throw new InvalidOperationException($"文件读取失败: {ex.Message}"); - } + WriteIndented = true, + IgnoreNullValues = true + }; + + File.WriteAllText(ConfigFile, JsonSerializer.Serialize(list, options)); } } -} +} \ No newline at end of file diff --git a/DHSoftware/Views/VisualLocalizationWindow.cs b/DHSoftware/Views/VisualLocalizationWindow.cs index 87577b8..a63affa 100644 --- a/DHSoftware/Views/VisualLocalizationWindow.cs +++ b/DHSoftware/Views/VisualLocalizationWindow.cs @@ -1,21 +1,12 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; +using System.Data; using System.Drawing.Imaging; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; using AntdUI; using DH.Commons.Base; using DH.Commons.Enums; using DH.Devices.Camera; using HalconDotNet; using OpenCvSharp.Extensions; -using Sunny.UI; -using static System.Net.Mime.MediaTypeNames; + namespace DHSoftware.Views { @@ -36,7 +27,9 @@ namespace DHSoftware.Views //定时器 private System.Threading.Timer Timer; + List localizations = new List(); + public VisualLocalizationWindow() { InitializeComponent(); @@ -51,10 +44,34 @@ namespace DHSoftware.Views btnReverse.MouseUp += BtnReverse_MouseUp; btnSaveImg.Click += BtnSaveImg_Click; btnSavePos.Click += BtnSavePos_Click; - + sltCameraName.SelectedIndexChanged += SltCameraName_SelectedIndexChanged; + + try + { + localizations = VisualLocalization.LoadAll(); + + } + catch + { + + } } + private void SltCameraName_SelectedIndexChanged(object sender, IntEventArgs e) + { + + string cameraName= sltCameraName.Text; + VisualLocalization? visual= localizations.Where(it=>it.CameraName==cameraName).FirstOrDefault(); + if (visual != null) + { + iptModel.Text = visual.ModelPath; + iptBackImg.Text = visual.ImgPath; + iptThreshold.Text = visual.Threshold; + sltDirection.SelectedIndex = visual.Direction == "正方向" ? 0 : 1; + iptSpeed.Text = visual.Speed; + } + } private void BtnSavePos_Click(object? sender, EventArgs e) { @@ -65,15 +82,15 @@ namespace DHSoftware.Views }); if (form.submit) { - //保存用户操作到文件 VisualLocalization visualLocalization = new VisualLocalization(); + //保存用户操作到文件 visualLocalization.CameraName = sltCameraName.Text; visualLocalization.ModelPath=iptModel.Text; visualLocalization.ImgPath=iptBackImg.Text; visualLocalization.Threshold=iptThreshold.Text; visualLocalization.Direction=sltDirection.Text; visualLocalization.Speed=iptSpeed.Text; - visualLocalization.SaveToFile("VisualLocalization.json"); + visualLocalization.Save(); } }