| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using System;
- using System.ComponentModel;
- namespace Plugins.Script.Models
- {
- /// <summary>
- /// 脚本工具节点模型:承载用户的完整 C# 代码,序列化进 .aas 流程文件。
- /// 用户代码是一个完整的插件类(约定:继承 BasePlugin<ScriptToolModel> 的类为入口,含 PluginRun/DeclareOutputs),
- /// 由宿主 ScriptToolPlugin 编译后注入 Model/Context/Registry 并委托执行——脚本因此拥有普通插件的全部能力。
- /// </summary>
- [Serializable]
- public class ScriptToolModel : TeamAAS.FlowEditor.Plugins.BasePluginModel
- {
- /// <summary>用户的完整 C# 代码(自由编写命名空间/多个类/方法;至少含一个继承 BasePlugin<ScriptToolModel> 的入口类)。</summary>
- [Browsable(false)]
- public string Code { get; set; }
- public ScriptToolModel()
- {
- Code = DefaultCode;
- }
- /// <summary>首次新建节点时的脚手架代码(照 VisionMaster C#脚本 的做法:完整插件类 + 预写好方法,用户想咋改咋改)。</summary>
- public const string DefaultCode = @"using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using TeamAAS; // LogLevel
- using TeamAAS.Core; // CoreManager
- using TeamAAS.Camera; // CameraManager
- using TeamAAS.Camera.Images; // GenImage
- using TeamAAS.FlowEditor.Plugins; // BasePlugin
- using TeamAAS.FlowEditor.Models; // OutputField / NodeRunStatus
- using TeamAAS.FlowEngine.FormulaData; // FormulaBound
- using Plugins.Script.Models; // ScriptToolModel
- // ══════════════════════════════════════════════════════════════════════
- // 脚本入口类:继承 BasePlugin<ScriptToolModel> —— 就是一个完整的插件类,
- // 拥有和普通插件一模一样的能力:
- // 读上游变量: GetValue<T>(FormulaBound) 或 RegistryOrDebug.ResolveFormula(Model.FlowId, ""&{节点.字段}"")
- // 取平台服务: Service<CameraManager>() / Context / CoreManager.Camera
- // 写插件日志: Log(2, ""..."")
- // 节点模型: Model
- // 运行时自动查找「继承 BasePlugin<ScriptToolModel> 的类」,注入 Model/Context/Registry 后调用 PluginRun。
- // 下面两个方法已写好,随便改;也可以自由增删 using、添加任意多个类/方法。
- // ══════════════════════════════════════════════════════════════════════
- public class MyScript : BasePlugin<ScriptToolModel>
- {
- // 声明本节点输出字段(下游节点可按 ""&{本节点.字段名}"" 引用)
- public override List<OutputField> DeclareOutputs()
- {
- return new List<OutputField>
- {
- new OutputField(""结果"", typeof(object)),
- };
- }
- // 节点执行入口 —— 想咋写咋写
- public override NodeRunStatus PluginRun(CancellationToken token, out Dictionary<string, object> results)
- {
- results = new Dictionary<string, object>();
- try
- {
- // 读上游示例: var img = RegistryOrDebug.ResolveFormula(Model.FlowId, ""&{图像采集.图像}"") as GenImage;
- // 取服务示例: var cam = Service<CameraManager>();
- Log(2, ""脚本开始执行"");
- object result = 1 + 1;
- results[""结果""] = result;
- return NodeRunStatus.Success;
- }
- catch (Exception ex)
- {
- results[""Error""] = ex.Message;
- Log(1, ""脚本异常: "" + ex.Message, LogLevel.Error);
- return NodeRunStatus.Failed;
- }
- }
- }
- ";
- }
- }
|