using LB_VisionControls;
using LB_VisionProcesses.Alogrithms;
using System.Data;
using System.Windows.Forms;
namespace LB_VisionProcesses.Processes
{
public partial class ScriptToolEdit : TAlgorithmEdit
{
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);
DataGridInputs.ForeColor = Color.Black;
DataGridOutputs.ForeColor = Color.Black;
}
private void ScriptToolEdit_Load(object sender, EventArgs e)
{
LoadParas();
this.ScriptEditControl.ScriptText = ProcessParams.ConvertToString(Subject.Params.Inputs["Scrip"]);
}
DataGridViewComboBoxColumn CreateComboBox(string[] items, string Name = "Type", string HeaderText = "类型"
, string DataPropertyName = "Type")
{
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn
{
Name = Name,
HeaderText = HeaderText,
DataPropertyName = DataPropertyName,
//FlatStyle = FlatStyle.Flat,
//Width = 120
};
column.Items.AddRange(items);
return column;
}
///
/// 加载运行参数
///
public override void LoadParas()
{
this.Invoke(new Action(() =>
{
// 绑定输入参数
Dictionary dicInputs = ((ScriptTool)Subject).GetInputs();
DataGridInputs.Columns.Add("Key", "键");
DataGridInputs.Columns.Add("Type", "类");
if (DataGridOutputs.Columns.Contains("Type"))
DataGridOutputs.Columns["Type"].ReadOnly = true;
//DataGridInputs.Columns.Add(CreateComboBox(((ScriptTool)Subject).SupportTypeArray));
DataGridInputs.Columns.Add("Value", "值");
DataGridInputs.Rows.Clear();
foreach (var item in dicInputs)
{
// 添加行并设置文本
string type = item.Value?.GetType().Name;
int rowIndex = DataGridInputs.Rows.Add(item.Key, type, item.Value);
}
// 绑定输出参数
Dictionary dicOutputs = Subject.Params.Outputs.GetAllByName();
DataGridOutputs.Columns.Add("Key", "键");
DataGridOutputs.Columns.Add("Type", "类");
if (DataGridOutputs.Columns.Contains("Type"))
DataGridOutputs.Columns["Type"].ReadOnly = true;
//DataGridOutputs.Columns.Add(CreateComboBox(((ScriptTool)Subject).SupportTypeArray));
DataGridOutputs.Columns.Add("Value", "值");
DataGridOutputs.Rows.Clear();
foreach (var item in dicOutputs)
{
// 添加行并设置文本
string type = item.Value?.GetType().Name;
int rowIndex = DataGridOutputs.Rows.Add(item.Key, type, item.Value);
}
}));
}
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();
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);
}
((ScriptTool)Subject).SetInputs(dicInputs);
((ScriptTool)Subject).ClearOutputs();
foreach (DataGridViewRow row in DataGridOutputs.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))
Subject.Params.Outputs.Add(key, value);
}
return;
}
///
/// 更新输出结果
///
public override void UpdataOutputs()
{
this.BeginInvoke(new Action(() =>
{
DataGridInputs.Rows.Clear();
foreach (var item in ((ScriptTool)Subject).GetInputs())
{
// 添加行并设置文本
string type = item.Value?.GetType().Name ?? "String";
int rowIndex = DataGridInputs.Rows.Add(item.Key, type, item.Value);
}
DataGridOutputs.Rows.Clear();
foreach (var item in Subject.Params.Outputs.GetAllByName())
{
// 添加行并设置文本
string type = item.Value?.GetType().Name ?? "String";
int rowIndex = DataGridOutputs.Rows.Add(item.Key, type, item.Value);
}
}));
}
}
}