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"]);
}
///
/// 加载运行参数
///
public override void LoadParas()
{
this.Invoke(new Action(() =>
{
// 绑定输入参数
Dictionary 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 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();
}
///
/// 更新运行参数
///
public override void UpdataInputs()
{
//设置运行参数
int iResult = 0;
Subject.Params.Inputs["Scrip"] = this.ScriptEditControl.ScriptText;
Dictionary dicInputs = new Dictionary();
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;
}
///
/// 更新输出结果
///
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;
}));
}
}
}