From ebcc1d53f14112363bbf539bcaf0202aadcdc9d7 Mon Sep 17 00:00:00 2001
From: C3032 <1057644574@qq.com>
Date: 星期一, 13 四月 2026 12:58:58 +0800
Subject: [PATCH] 2D取图计数功能完成
---
LB_VisionProcesses/Processes/TyreCounter/TyreCounterProcessEdit.cs | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 161 insertions(+), 0 deletions(-)
diff --git a/LB_VisionProcesses/Processes/TyreCounter/TyreCounterProcessEdit.cs b/LB_VisionProcesses/Processes/TyreCounter/TyreCounterProcessEdit.cs
new file mode 100644
index 0000000..e93c114
--- /dev/null
+++ b/LB_VisionProcesses/Processes/TyreCounter/TyreCounterProcessEdit.cs
@@ -0,0 +1,161 @@
+using LB_VisionProcesses.Alogrithms;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace LB_VisionProcesses.Processes
+{
+ /// <summary>
+ /// 杞儙璁℃暟宸ュ叿缂栬緫鍣�
+ /// </summary>
+ public partial class TyreCounterProcessEdit : TAlgorithmEdit
+ {
+ DataTable DataTableInputs = new DataTable();
+ DataTable DataTableOutputs = new DataTable();
+
+ public TyreCounterProcessEdit(TyreCounterProcess subject = null)
+ {
+ InitializeComponent();
+ if (subject == null)
+ subject = new TyreCounterProcess();
+
+ this.Subject = subject;
+ }
+
+ private void TyreCounterProcessEdit_Load(object sender, EventArgs e)
+ {
+ LoadParas();
+ }
+
+ /// <summary>
+ /// 鍔犺浇鍙傛暟
+ /// </summary>
+ public override void LoadParas()
+ {
+ if (Subject is TyreCounterProcess counter)
+ {
+ // 鍔犺浇閰嶇疆鍙傛暟
+ numericUpDownImagesPerTyre.Value = counter.ImagesPerTyre;
+ comboBoxJudgeRule.SelectedItem = counter.JudgeRule.ToString();
+ checkBoxAutoReset.Checked = counter.AutoReset;
+
+ // 鍔犺浇缁熻淇℃伅
+ UpdateStatistics();
+
+ // 缁戝畾杈撳叆鍙傛暟
+ DataTableInputs.Columns.Add("Key", typeof(string));
+ DataTableInputs.Columns.Add("Value", typeof(object));
+ DataTableInputs.Rows.Clear();
+
+ var inputs = new Dictionary<string, object>
+ {
+ { "ImagesPerTyre", counter.ImagesPerTyre },
+ { "JudgeRule", counter.JudgeRule.ToString() },
+ { "AutoReset", counter.AutoReset }
+ };
+
+ foreach (var item in inputs)
+ DataTableInputs.Rows.Add(item.Key, item.Value);
+
+ dataGridInputs.DataSource = DataTableInputs;
+
+ // 缁戝畾杈撳嚭鍙傛暟
+ DataTableOutputs.Columns.Add("Key", typeof(string));
+ DataTableOutputs.Columns.Add("Value", typeof(object));
+ DataTableOutputs.Rows.Clear();
+
+ var outputs = new Dictionary<string, object>
+ {
+ { "CurrentTyreID", counter.CurrentTyreID },
+ { "CurrentImageIndex", counter.CurrentImageIndex },
+ { "IsTyreComplete", counter.IsTyreComplete },
+ { "TyreResult", counter.TyreResult },
+ { "TyreTotal", counter.TyreTotal },
+ { "TyreOK", counter.TyreOK },
+ { "TyreNG", counter.TyreNG },
+ { "TyreRateOK", counter.TyreRateOK }
+ };
+
+ foreach (var item in outputs)
+ DataTableOutputs.Rows.Add(item.Key, item.Value);
+
+ dataGridOutputs.DataSource = DataTableOutputs;
+
+ // 璁剧疆鐘舵�佹爮
+ lblResult.Text = $"缁撴灉: {(counter.Result ? "OK" : "NG")}";
+ lblResult.ForeColor = counter.Result ? Color.LightGreen : Color.LightCoral;
+ lblMsg.Text = counter.Msg;
+ }
+ }
+
+ /// <summary>
+ /// 鏇存柊缁熻淇℃伅鏄剧ず
+ /// </summary>
+ private void UpdateStatistics()
+ {
+ if (Subject is TyreCounterProcess counter)
+ {
+ txtCurrentTyreID.Text = counter.CurrentTyreID.ToString();
+ txtCurrentImageIndex.Text = $"{counter.CurrentImageIndex}/{counter.ImagesPerTyre}";
+ txtTyreTotal.Text = counter.TyreTotal.ToString();
+ txtTyreOK.Text = counter.TyreOK.ToString();
+ txtTyreNG.Text = counter.TyreNG.ToString();
+ txtTyreRateOK.Text = $"{counter.TyreRateOK:F2}%";
+ }
+ }
+
+ /// <summary>
+ /// 鏇存柊杈撳叆鍙傛暟
+ /// </summary>
+ public override void UpdataInputs()
+ {
+ if (Subject is TyreCounterProcess counter)
+ {
+ counter.ImagesPerTyre = (int)numericUpDownImagesPerTyre.Value;
+ counter.JudgeRule = (TyreJudgeRule)Enum.Parse(typeof(TyreJudgeRule), comboBoxJudgeRule.SelectedItem?.ToString() ?? "AnyNG");
+ counter.AutoReset = checkBoxAutoReset.Checked;
+
+ // 鏇存柊杈撳叆鍙傛暟琛�
+ Subject.Params.Inputs["ImagesPerTyre"] = counter.ImagesPerTyre;
+ Subject.Params.Inputs["JudgeRule"] = counter.JudgeRule.ToString();
+ Subject.Params.Inputs["AutoReset"] = counter.AutoReset;
+ }
+ }
+
+ private void btnSave_Click(object sender, EventArgs e)
+ {
+ UpdataInputs();
+ lblMsg.Text = "鍙傛暟宸蹭繚瀛�";
+ lblMsg.ForeColor = Color.LightGreen;
+ }
+
+ private void btnReset_Click(object sender, EventArgs e)
+ {
+ if (Subject is TyreCounterProcess counter)
+ {
+ counter.ResetTyreCount();
+ UpdateStatistics();
+ LoadParas();
+ lblMsg.Text = "璁℃暟鍣ㄥ凡閲嶇疆";
+ lblMsg.ForeColor = Color.LightGreen;
+ }
+ }
+
+ private void btnRun_Click(object sender, EventArgs e)
+ {
+ UpdataInputs();
+ Subject.Run();
+ UpdateStatistics();
+ LoadParas();
+ lblResult.Text = $"缁撴灉: {(Subject.Result ? "OK" : "NG")}";
+ lblResult.ForeColor = Subject.Result ? Color.LightGreen : Color.LightCoral;
+ lblMsg.Text = Subject.Msg;
+ }
+ }
+}
--
Gitblit v1.9.3