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();
|
}
|
|
/// <summary>
|
/// 加载运行参数
|
/// </summary>
|
public override void LoadParas()
|
{
|
this.Invoke(new Action(() =>
|
{
|
// 绑定输入参数
|
Dictionary<string, object> 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();
|
}));
|
}
|
|
/// <summary>
|
/// 更新运行参数
|
/// </summary>
|
public override void UpdataInputs()
|
{
|
//设置运行参数
|
int iResult = 0;
|
|
Dictionary<string, object> dicInputs = new Dictionary<string, object>();
|
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;
|
}
|
|
/// <summary>
|
/// 更新输出结果
|
/// </summary>
|
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();
|
}
|
}
|
}
|