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