using System; using System.Collections.Generic; namespace TeamAAS.Vision { /// 图层内容类型(决定显示控件如何渲染)。 public enum LayerKind { /// 底图(图像)。 Image = 0, /// 区域(Region)。 Region = 1, /// 轮廓/边界(XLD 等)。 Contour = 2, /// 几何对象(矩形/圆/线等,由各平台自行解释)。 Geometry = 3, /// 文字/标注。 Text = 4, /// 其他(平台自定义)。 Other = 99, } /// /// 一个图层项:视觉节点运行后产出的可显示对象。 /// 为平台对象(HObject / GenImage / Vm 对象等),所有权由 标记: /// Owned=true 表示该对象由图层库创建(图层被淘汰时负责释放);false 表示归流程注册表所有,图层只引用不释放。 /// public sealed class LayerItem { /// 图层显示名(ComboBox 里显示的文案,如 “H阈值分割.区域”)。 public string Name { get; set; } /// 图层类型。 public LayerKind Kind { get; set; } /// 平台显示对象。 public object Content { get; set; } /// 是否为图层库自有对象(淘汰时需要释放)。 public bool Owned { get; set; } /// 建议颜色(如 "red"/"#FF0000"),null 用显示控件默认。 public string Color { get; set; } public LayerItem() { } public LayerItem(string name, LayerKind kind, object content, bool owned = false, string color = null) { Name = name; Kind = kind; Content = content; Owned = owned; Color = color; } } /// 一次发布 = 某节点一次运行的完整图层集(整体替换,不做增量叠加,避免内存堆积)。 public sealed class LayerPublishArgs { /// 流程 Id(子流程用子图 GraphId)。 public string FlowId { get; set; } /// 节点名(DisplayName)。 public string NodeName { get; set; } /// 节点显示名(与 NodeName 相同,冗余给 UI 绑定用)。 public string NodeDisplay => NodeName; /// 运行批次号(同批次整体替换旧图层;跨批次自动淘汰)。 public string RunStamp { get; set; } /// /// 发布方推荐的显示图层(节点属性「输出图层」里配置的那一项)。 /// 显示端在"节点级/最新运行"视图下优先显示它;null=用发布方默认(根记录/底图)。 /// public string PreferredLayer { get; set; } /// 本批次图层(顺序 = 叠加顺序;[0] 通常是底图/根记录)。 public List Layers { get; } = new List(); } /// /// 视觉图层发布器契约:节点运行后把自己的渲染图层发布进来;显示端(编辑器大预览窗/主页画面)订阅消费。 /// 三平台(Halcon/Vm/Vpp)共用同一契约,显示控件按 LayerKind + 平台自行解释 Content。 /// public interface ILayerPublisher { /// 发布一个节点的图层集(整体替换该节点当前批次的图层;后台线程调用安全)。 void Publish(LayerPublishArgs args); /// 清除指定流程(或节点,nodeName 为 null 时全流程)的所有图层并释放 owned 对象。 void Clear(string flowId, string nodeName = null); } }