PluginAttribute.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. namespace TeamAAS.FlowEditor.Plugins
  3. {
  4. /// <summary>
  5. /// 插件分类(工具箱分组用)
  6. /// </summary>
  7. public enum PluginCategory
  8. {
  9. 视觉模块 = 0,
  10. 硬件模块 = 1,
  11. 通讯模块 = 2,
  12. Mes模块 = 3,
  13. 逻辑判断 = 4,
  14. 深度学习 = 5,
  15. 文件操作 = 6,
  16. Vpp模块 = 7,
  17. Vm模块 = 8,
  18. Halocn模块 = 9,
  19. OpenCv模块 = 10,
  20. 三维视觉 = 11,
  21. 其他 = 100
  22. }
  23. public enum VisionPlugin
  24. {
  25. 图像处理 = 1,
  26. 检测识别 = 2,
  27. 几何测量 = 3,
  28. 坐标标定 = 5,
  29. 深度学习 = 6,
  30. 三维视觉 = 7,
  31. 其他 = 100
  32. }
  33. /// <summary>
  34. /// 插件特性 - 声明插件的名称、分类、模型、视图、图标
  35. /// 参照 VisionKit 的 ViewsBindName 特性
  36. /// </summary>
  37. [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
  38. public class PluginAttribute : Attribute
  39. {
  40. /// <summary>插件显示名称(工具箱和节点标题)</summary>
  41. public string DisplayName { get; }
  42. /// <summary>插件分类(工具箱分组)</summary>
  43. public PluginCategory Category { get; }
  44. /// <summary>插件模型类型</summary>
  45. public Type ModelType { get; }
  46. /// <summary>自定义视图类型(null=使用PropertyGrid编辑器)</summary>
  47. public Type ViewType { get; }
  48. /// <summary>图标Geometry路径字符串</summary>
  49. public string IconGeometry { get; }
  50. /// <summary>节点形状(决定编辑器中的外观)</summary>
  51. public Models.NodeCategory NodeShape { get; set; } = Models.NodeCategory.Normal;
  52. /// <summary>插件描述</summary>
  53. public string Description { get; set; } = "";
  54. /// <summary>
  55. /// 是否为「子流程专用节点」。true=该节点只在对应子流程编辑器(如 Halcon 流程)的工具箱中出现,
  56. /// 不会进入主流程工具箱;默认 false=普通主流程节点(保持既有行为不变)。
  57. /// 仅影响工具箱过滤,不影响插件注册/创建/执行。
  58. /// </summary>
  59. public bool IsSubFlowNode { get; set; } = false;
  60. /// <summary>
  61. /// 子流程工具箱的分组类别(<see cref="VisionPlugin"/> 枚举)。仅当 <see cref="IsSubFlowNode"/>=true 时用于分组,
  62. /// 例如 Halcon 流程编辑器按 图像处理/检测识别/几何测量… 归类节点。默认 其他。
  63. /// </summary>
  64. public VisionPlugin VisionCategory { get; set; } = VisionPlugin.其他;
  65. /// <summary>
  66. /// 构造函数(无自定义视图,使用PropertyGrid编辑器)
  67. /// </summary>
  68. public PluginAttribute(string displayName, PluginCategory category, Type modelType, string iconGeometry = "M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z")
  69. {
  70. DisplayName = displayName;
  71. Category = category;
  72. ModelType = modelType;
  73. IconGeometry = iconGeometry;
  74. ViewType = null;
  75. }
  76. /// <summary>
  77. /// 构造函数(有自定义视图,双击弹插件自己的窗体)
  78. /// </summary>
  79. public PluginAttribute(string displayName, PluginCategory category, Type modelType, Type viewType, string iconGeometry = "M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z")
  80. {
  81. DisplayName = displayName;
  82. Category = category;
  83. ModelType = modelType;
  84. ViewType = viewType;
  85. IconGeometry = iconGeometry;
  86. }
  87. }
  88. }