using LB_VisionControl.ScriptEditControl;
|
using LB_VisionProcesses.Alogrithms;
|
using System.Data;
|
|
namespace LB_VisionProcesses.Processes.ScriptTool
|
{
|
public partial class ScriptToolEdit : TAlgorithmEdit
|
{
|
DataTable DataTableInputs = new DataTable();
|
DataTable DataTableOutputs = new DataTable();
|
|
ScriptEditControl ScriptEditControl = new ScriptEditControl();
|
|
public ScriptToolEdit(ScriptTool subject = null)
|
{
|
InitializeComponent();
|
if (subject == null)
|
subject = new ScriptTool();
|
|
this.grpScript.Controls.Add(ScriptEditControl);
|
ScriptEditControl.Dock = DockStyle.Fill;
|
|
this.Subject = subject;
|
this.ScriptEditControl.TabStop = false; // 避免焦点切换
|
this.ScriptEditControl.Focus();// 确保控件可获得焦点
|
|
// 设置高质量渲染模式
|
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
}
|
|
private void ScriptToolEdit_Load(object sender, EventArgs e)
|
{
|
LoadParas();
|
this.ScriptEditControl.ScriptText = ProcessParams.ConvertToString(Subject.Params.Inputs["Scrip"]);
|
}
|
|
/// <summary>
|
/// 加载运行参数
|
/// </summary>
|
public override void LoadParas()
|
{
|
this.Invoke(new Action(() =>
|
{
|
// 绑定输入参数
|
Dictionary<string, object> dicInputs = ((ScriptTool)Subject).GetInputs();
|
DataTableInputs.Columns.Add("Key", typeof(string));
|
DataTableInputs.Columns.Add("Value", typeof(object));
|
|
DataTableInputs.Rows.Clear();
|
foreach (var item in dicInputs)
|
DataTableInputs.Rows.Add(item.Key, item.Value);
|
DataGridInputs.DataSource = DataTableInputs;
|
|
// 绑定输出参数
|
Dictionary<string, object> dicOutputs = Subject.Params.Outputs.GetAllByName();
|
DataTableOutputs.Columns.Add("Key", typeof(string));
|
DataTableOutputs.Columns.Add("Value", typeof(object));
|
|
DataTableOutputs.Rows.Clear();
|
foreach (var item in dicOutputs)
|
DataTableOutputs.Rows.Add(item.Key, item.Value);
|
DataGridOutputs.DataSource = DataTableOutputs;
|
}));
|
}
|
|
private void btnCompileCode_Click(object sender, EventArgs e)
|
{
|
Subject.Params.Inputs["Scrip"] = this.ScriptEditControl.ScriptText;
|
((ScriptTool)Subject).CompileCode();
|
this.richTextBoxLog.Text = Subject.Msg;
|
}
|
|
private void btnRunCode_Click(object sender, EventArgs e)
|
{
|
//运行前需要更新输入参数Paras
|
UpdataInputs();
|
|
DateTime StartTime = DateTime.Now;
|
Subject.Run();
|
|
this.lblRunTime.Text = $"{(DateTime.Now - StartTime).TotalMilliseconds.ToString("F0")}ms";
|
this.richTextBoxLog.Text = Subject.Msg;
|
|
UpdataOutputs();
|
}
|
|
/// <summary>
|
/// 更新运行参数
|
/// </summary>
|
public override void UpdataInputs()
|
{
|
//设置运行参数
|
int iResult = 0;
|
Subject.Params.Inputs["Scrip"] = this.ScriptEditControl.ScriptText;
|
|
Dictionary<string, object> dicInputs = new Dictionary<string, object>();
|
DataTable modifiedDataInputs = (DataTable)DataGridInputs.DataSource;
|
foreach (DataRow row in modifiedDataInputs.Rows)
|
{
|
if (row["Key"] == null)
|
continue;
|
string key = row["Key"]?.ToString();
|
object value = row["Value"];
|
dicInputs.Add(key, value);
|
}
|
((ScriptTool)Subject).SetInputs(dicInputs);
|
|
DataTable modifiedDataOutputs = (DataTable)DataGridOutputs.DataSource;
|
((ScriptTool)Subject).ClearOutputs();
|
foreach (DataRow row in modifiedDataOutputs.Rows)
|
{
|
if (row["Key"] == null)
|
continue;
|
string key = row["Key"]?.ToString();
|
object value = row["Value"];
|
|
Subject.Params.Outputs.Add(key, value);
|
}
|
|
return;
|
}
|
|
/// <summary>
|
/// 更新输出结果
|
/// </summary>
|
public override void UpdataOutputs()
|
{
|
this.BeginInvoke(new Action(() =>
|
{
|
DataTableInputs.Rows.Clear();
|
foreach (var item in ((ScriptTool)Subject).GetInputs())
|
DataTableInputs.Rows.Add(item.Key, item.Value);
|
DataGridInputs.DataSource = DataTableInputs;
|
|
DataTableOutputs.Rows.Clear();
|
foreach (var item in Subject.Params.Outputs.GetAllByName())
|
DataTableOutputs.Rows.Add(item.Key, item.Value);
|
DataGridOutputs.DataSource = DataTableOutputs;
|
}));
|
}
|
}
|
}
|