视觉定位提交保存

This commit is contained in:
liyaobang 2025-04-18 14:58:05 +08:00
parent 43e7f3009d
commit 74051a4287
2 changed files with 81 additions and 51 deletions

View File

@ -1,18 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
namespace DH.Commons.Base namespace DH.Commons.Base
{ {
[Serializable]
public class VisualLocalization public class VisualLocalization
{ {
// 必须包含公共无参构造函数 // 配置属性
public VisualLocalization() { }
public string CameraName { get; set; } public string CameraName { get; set; }
public string ModelPath { get; set; } public string ModelPath { get; set; }
public string ImgPath { get; set; } public string ImgPath { get; set; }
@ -20,45 +16,62 @@ namespace DH.Commons.Base
public string Direction { get; set; } public string Direction { get; set; }
public string Speed { get; set; } public string Speed { get; set; }
// 保存到文件 // 配置文件路径
public void SaveToFile(string filePath) private const string ConfigFile = "VisualConfigs.json";
private static readonly object _fileLock = new object();
/// <summary>
/// 保存当前配置(存在则更新,不存在则新增)
/// </summary>
public void Save()
{ {
try lock (_fileLock)
{
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);
}
}
/// <summary>
/// 获取全部配置列表
/// </summary>
public static List<VisualLocalization> LoadAll()
{
lock (_fileLock)
{
if (!File.Exists(ConfigFile)) return new List<VisualLocalization>();
var json = File.ReadAllText(ConfigFile);
return JsonSerializer.Deserialize<List<VisualLocalization>>(json)
?? new List<VisualLocalization>();
}
}
private static void SaveAll(List<VisualLocalization> list)
{ {
var options = new JsonSerializerOptions var options = new JsonSerializerOptions
{ {
WriteIndented = true, // 美化格式 WriteIndented = true,
IgnoreNullValues = true // 忽略空值 IgnoreNullValues = true
}; };
string json = JsonSerializer.Serialize(this, options); File.WriteAllText(ConfigFile, JsonSerializer.Serialize(list, options));
File.WriteAllText(filePath, json);
}
catch (Exception ex)
{
throw new InvalidOperationException($"保存失败: {ex.Message}");
}
}
// 从文件加载
public static VisualLocalization LoadFromFile(string filePath)
{
if (!File.Exists(filePath))
throw new FileNotFoundException("文件不存在", filePath);
try
{
string json = File.ReadAllText(filePath);
return JsonSerializer.Deserialize<VisualLocalization>(json);
}
catch (JsonException ex)
{
throw new InvalidOperationException($"JSON解析错误: {ex.Message}");
}
catch (IOException ex)
{
throw new InvalidOperationException($"文件读取失败: {ex.Message}");
}
} }
} }
} }

View File

@ -1,21 +1,12 @@
using System; using System.Data;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AntdUI; using AntdUI;
using DH.Commons.Base; using DH.Commons.Base;
using DH.Commons.Enums; using DH.Commons.Enums;
using DH.Devices.Camera; using DH.Devices.Camera;
using HalconDotNet; using HalconDotNet;
using OpenCvSharp.Extensions; using OpenCvSharp.Extensions;
using Sunny.UI;
using static System.Net.Mime.MediaTypeNames;
namespace DHSoftware.Views namespace DHSoftware.Views
{ {
@ -36,6 +27,8 @@ namespace DHSoftware.Views
//定时器 //定时器
private System.Threading.Timer Timer; private System.Threading.Timer Timer;
List<VisualLocalization> localizations = new List<VisualLocalization>();
public VisualLocalizationWindow() public VisualLocalizationWindow()
{ {
@ -51,10 +44,34 @@ namespace DHSoftware.Views
btnReverse.MouseUp += BtnReverse_MouseUp; btnReverse.MouseUp += BtnReverse_MouseUp;
btnSaveImg.Click += BtnSaveImg_Click; btnSaveImg.Click += BtnSaveImg_Click;
btnSavePos.Click += BtnSavePos_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) private void BtnSavePos_Click(object? sender, EventArgs e)
{ {
@ -65,15 +82,15 @@ namespace DHSoftware.Views
}); });
if (form.submit) if (form.submit)
{ {
//保存用户操作到文件
VisualLocalization visualLocalization = new VisualLocalization(); VisualLocalization visualLocalization = new VisualLocalization();
//保存用户操作到文件
visualLocalization.CameraName = sltCameraName.Text; visualLocalization.CameraName = sltCameraName.Text;
visualLocalization.ModelPath=iptModel.Text; visualLocalization.ModelPath=iptModel.Text;
visualLocalization.ImgPath=iptBackImg.Text; visualLocalization.ImgPath=iptBackImg.Text;
visualLocalization.Threshold=iptThreshold.Text; visualLocalization.Threshold=iptThreshold.Text;
visualLocalization.Direction=sltDirection.Text; visualLocalization.Direction=sltDirection.Text;
visualLocalization.Speed=iptSpeed.Text; visualLocalization.Speed=iptSpeed.Text;
visualLocalization.SaveToFile("VisualLocalization.json"); visualLocalization.Save();
} }
} }