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();
}
}
}