C3204
2025-12-18 d85cbf0ccd61d95b96695756e0c90db8b7679545
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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;
            }));
        }
    }
}