| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using Cognex.VisionPro;
- using Cognex.VisionPro.ToolBlock;
- using PropertyGridLib.Attributes;
- using PropertyGridLib.Controls;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using TeamAAS.FlowEditor.Plugins;
- using TeamAAS.FlowEngine.FormulaData;
- namespace Plugins.Vpp.Models
- {
- [Serializable]
- public class VppToolBlockModel : BasePluginModel
- {
- [Category("I.参数")]
- [DisplayName("1.输入参数映射")]
- [Description("将主流程前序节点的输出映射到 VPP ToolBlock 的输入终端。Key 必须与 ToolBlock 内输入名一致。")]
- public List<VppInputMapping> InputMappings { get; set; } = new List<VppInputMapping>();
- [Browsable(false)]
- public CogToolBlock ToolBlock { get; set; }
- /// <summary>
- /// 上次运行学习到的「输出图层」数量(RunRecord.SubRecords.Count)。
- /// 图层数量取决于工具块内部工具,只有运行后才知道;此处持久化快照,
- /// 使 <see cref="VppToolBlockPlugin.DeclareOutputs"/> 在跑之前就能声明 输出图层N,被下游绑定树索引。
- /// </summary>
- [Browsable(false)]
- public int LastLayerCount { get; set; } = 0;
- // ── 高级编辑(属性面板按钮) ──
- // PropertyGridLib v1.1.2 [Button]:属性面板渲染按钮,点击反射调用 OpenAdvancedEditor。
- // 宿主在承载该模型时把 AdvancedEditorLauncher 指到原生 VisionPro 工具块编辑入口
- // (CogToolBlockEditorV2 等);未注入时按钮点击无副作用。双击节点打开自定义视图的原路径保持不变。
- [NonSerialized]
- public Action AdvancedEditorLauncher;
- [Category("II.高级编辑")]
- [DisplayName("1.打开 VPP 工具编辑")]
- [Description("打开 Cognex VisionPro 原生工具块编辑器(与双击节点等效)")]
- [Button("打开 VPP 工具编辑", nameof(OpenAdvancedEditor))]
- public object AdvancedEditButton { get; set; }
- public void OpenAdvancedEditor()
- {
- var launch = AdvancedEditorLauncher;
- if (launch != null) launch();
- }
- public VppToolBlockModel()
- {
- ToolBlock = new CogToolBlock();
- }
- }
- [Serializable]
- public class VppInputMapping
- {
- public VppInputMapping()
- {
- Source = new FormulaBound<object>();
- }
- [Category("输入映射")]
- [DisplayName("输入名")]
- [Description("必须与 VPP ToolBlock 里定义的输入终端名完全一致")]
- public string InputName { get; set; } = "";
- [Category("输入映射")]
- [DisplayName("来源值")]
- [Description("从主流程前序节点的输出结果中选择")]
- [FormulaEditor(typeof(InputSourceDataProvider))]
- public FormulaBound<object> Source { get; set; }
- public override string ToString() => $"{InputName} ← {Source?.Formula ?? ""}";
- }
- }
|