using HalconDotNet; using LB_VisionControls; using LB_VisionProcesses.Alogrithms; using System.Data; using System.Windows.Forms; namespace LB_VisionProcesses.Processes { public partial class RecordToolEdit : TAlgorithmEdit { public RecordToolEdit(RecordTool subject = null) { InitializeComponent(); if (subject == null) subject = new RecordTool(); this.Subject = subject; // 设置高质量渲染模式 SetStyle(ControlStyles.OptimizedDoubleBuffer, true); DataGridInputs.Columns.Add("Key", "键"); DataGridInputs.Columns.Add("Value", "值"); this.SizeChanged += (s, e) => { LoadParas(); }; } private void ScriptToolEdit_Load(object sender, EventArgs e) { pnlRecord.Controls.Add(inputImageHSmartWindowControl); inputImageHSmartWindowControl.Dock = DockStyle.Fill; LoadParas(); } /// /// 加载运行参数 /// public override void LoadParas() { this.Invoke(new Action(() => { // 绑定输入参数 Dictionary dicInputs = ((RecordTool)Subject).GetInputs(); DataGridInputs.Rows.Clear(); foreach (var item in dicInputs) { int rowIndex = DataGridInputs.Rows.Add(item.Key, item.Value); } pnlOutput.Controls.Clear(); var dicRecords = ((RecordTool)Subject).GetRecords(); foreach (var record in dicRecords) { int index = record.Key; var userRecord = record.Value; // 可以在这里使用 index 和 userRecord 进行操作 RecordControl control = new RecordControl(index, userRecord, Subject.Params.Inputs); control.Width = pnlOutput.Width; pnlOutput.Controls.Add(control); control.Location = new Point(0, control.Height * (index - 1)); } })); } private void btnCompileCode_Click(object sender, EventArgs e) { } private void btnRunCode_Click(object sender, EventArgs e) { if (Subject.InputImage != null) InputImage = Subject.InputImage; DateTime StartTime = DateTime.Now; Run(); //更新日志与结果 this.BeginInvoke(new Action(() => { //if (Subject.Result) //{ // lblResult.BackColor = Color.Green; // lblResult.Text = "True"; // recordImageHSmartWindowControl.SetColor("green"); //} //else //{ // lblResult.BackColor = Color.Red; // lblResult.Text = "False"; // recordImageHSmartWindowControl.SetColor("red"); //} //lblMsg.Text = Msg.Length > 50 ? Msg.Substring(0, 50) : Msg; //lblMsgToolTip.SetToolTip(BtmStatusStrip, Msg); lblRunTime.Text = $"{(DateTime.Now - StartTime).TotalMilliseconds}ms"; UpdataOutputs(); if (Subject.InputImage != null && Subject.InputImage is HObject) { HOperatorSet.GetImageSize((HObject)Subject.InputImage, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight); inputImageHSmartWindowControl.ShowHoImage((HObject)Subject.InputImage); } //先判断子类再判断父类 if (Subject.Record != null && Subject.Record is MsgRecord msgRecord) { inputImageHSmartWindowControl.DispObj(msgRecord.RecordObject_OK, true); inputImageHSmartWindowControl.DispObj(msgRecord.RecordObject_NG, false); for (int i = 0; i < msgRecord.Msg.Length; i++) inputImageHSmartWindowControl.ShowMsg(msgRecord.Msg[i] , 1 == msgRecord.Result[i] ? true : false, msgRecord.Column[i], msgRecord.Row[i]); } else if (Subject.Record != null && Subject.Record is ObjectRecord objRecord) { inputImageHSmartWindowControl.DispObj(objRecord.RecordObject_OK, true); inputImageHSmartWindowControl.DispObj(objRecord.RecordObject_NG, false); } GC.Collect(); })); } /// /// 更新运行参数 /// public override void UpdataInputs() { //设置运行参数 int iResult = 0; Dictionary dicInputs = new Dictionary(); foreach (DataGridViewRow row in DataGridInputs.Rows) { // 使用 row.Cells["列名"] 或 row.Cells[索引] if (row.Cells["Key"].Value == null || string.IsNullOrEmpty(row.Cells["Key"].Value.ToString())) continue; string key = row.Cells["Key"].Value?.ToString(); object value = row.Cells["Value"].Value; if (!string.IsNullOrEmpty(key)) dicInputs.Add(key, value); } ((RecordTool)Subject).SetInputs(dicInputs); ((RecordTool)Subject).ClearRecord(); foreach (var control in pnlOutput.Controls) { if (control is RecordControl recordControl) ((RecordTool)Subject).AddRecord(recordControl.GetUserRecord()); } return; } /// /// 更新输出结果 /// public override void UpdataOutputs() { this.BeginInvoke(new Action(() => { DataGridInputs.Rows.Clear(); foreach (var item in ((RecordTool)Subject).GetInputs()) { int rowIndex = DataGridInputs.Rows.Add(item.Key, item.Value); } })); } private void btnAdd_Click(object sender, EventArgs e) { ((RecordTool)Subject).AddRecord(new UserRecord()); LoadParas(); } private void btnDel_Click(object sender, EventArgs e) { ((RecordTool)Subject).RemoveLastRecord(); LoadParas(); } } }