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