前言
工业视觉、自动化检测和图像处理领域,流程化、模块化的开发方式越来越重要。传统硬编码的方式难以应对频繁变更的检测逻辑,而低代码、可视化的工作流引擎则能显著提升开发效率和系统灵活性。
本文推荐一个基于 WinForm 的拖拽式视觉工作流框架——它用原生 .NET 技术实现了节点拖拽、连线编排、插件集成与 Halcon 图像处理的无缝结合,既保留了 WinForm 的轻量与稳定,又具备现代低代码平台的核心能力。
项目介绍
项目是一个面向机器视觉工程师的桌面级流程编排工具。通过左侧工具箱拖拽功能模块(如"图像采集""Blob 分析""模板匹配")到工作区,再通过鼠标连线定义执行顺序,双击节点即可配置参数。
整个流程以 Tab 页形式组织,支持多方案并存。底层采用插件架构,所有视觉算法封装为独立服务,通过统一接口与主框架交互,真正实现"算法即插件、流程可编排"。
项目功能
1、可视化流程编排
支持从工具树拖拽节点到画布,自由布局、移动、删除。
2、节点智能连线
点击输出端口开始连线,点击输入端口完成连接,自动建立数据流向。
3、插件化算法集成
每个节点对应一个插件(如几何测量、缺陷检测),双击打开专属配置窗口。
4、实时图像显示
集成 HalconDisplayControl,算法结果直接渲染到主界面窗口。
5、运行日志追踪
插件执行过程中的关键信息(如"找到 3 个特征点")自动记录到日志面板。
6、多流程管理
通过 TabControl 支持多个独立视觉流程并存,便于方案对比或切换。
项目特点
纯 WinForm 实现,无 Web 依赖:不依赖 Electron 或浏览器内核,启动快、资源占用低,适合工控环境部署。
深度集成 HALCON:通过 HalconDotNet 直接调用 MVTec HALCON 算子,保证算法性能与精度。
线程安全的数据结构:使用OrderedSafeDictionary存储各 Tab 页的节点集合,避免多操作并发冲突。
事件驱动架构:节点创建、连线、移动、删除等操作均通过事件解耦,代码结构清晰易维护。
零侵入插件机制:插件只需实现标准接口,无需修改主程序即可扩展新功能。
项目技术
UI 层:WinForm + 自定义控件(MyPanel、FlowNode)
图形绘制:GDI+ 实现连线路径(贝塞尔曲线),重写 Paint 事件动态刷新
拖拽交互:利用 DoDragDrop、DragEnter、DragDrop 完成节点拖放
插件系统:通过 PluginFactory 工厂类动态加载插件服务
图像处理:HalconDotNet 封装 HALCON 算子,HWindow 负责图像渲染
数据传递:节点间通过 InputParam / OutputParam 属性传递 HObject 或结构化参数
值得一提的是,连线坐标计算采用了PointToClient和PointToScreen的组合转换,确保在嵌套控件中仍能精确定位连接点。
项目代码
流程节点容器重绘事件
#region 流程节点容器重绘事件 private void panelFlow_Paint(object? sender, PaintEventArgs e) { base.OnPaint(e); if (isLink && flowDic[tabControl1.SelectedTab].Count > 0) { foreach (var item in flowDic[tabControl1.SelectedTab]) { if (item.OutputPathInfos.Count > 0) { foreach (var pathInfo in item.OutputPathInfos) { //PointLinkToPathHelper.DrawPath(pathInfo.StartPoint, pathInfo.EndPoint, e); PointLinkToPathHelper.DrawPath( pathInfo.StartPoint, pathInfo.EndPoint, e, flowDic[tabControl1.SelectedTab] ); } } } } } #endregion项目效果
启动后,左侧工具箱按类别列出所有可用插件(如"图像处理""几何测量")。用户新建一个流程页,拖入"图像读取"节点,再拖入"边缘提取",然后从第一个节点的底部连接器拖出连线到第二个节点的顶部,即完成数据流定义。
双击"图像读取"节点,弹出文件选择窗口;运行后,结果图像实时显示在中央 Halcon 控件中,日志面板同步输出"图像加载成功"。整个过程无需写一行代码,却能构建完整的视觉检测流程。
系统主页
添加流程
Blob分析工具
项目源码
项目结构清晰,核心逻辑集中在FormMain.cs:
treeView1_ItemDrag:启动拖拽
panelFlow_DragDrop:创建 FlowNode 并注册事件
FlowNode_MouseDoubleClick:调用插件配置窗口
FlowNode_NodeLinkStart/EndClick:处理连线逻辑
panelFlow_Paint:重绘所有连接线
PluginFactory_PluginViewAction:接收插件返回的 HObject 并显示
只需在Plugin目录下新增插件类,实现标准接口,即可在工具箱中自动出现,真正做到"开箱即扩"。
总结
WinForm 在现代工业软件中依然大有可为。它没有追逐时髦的前端框架,而是立足于工程师熟悉的桌面环境,用扎实的事件处理、合理的架构设计和对 HALCON 的深度集成,打造出一个实用、稳定、可扩展的视觉开发平台。
对于需要快速搭建定制化检测流程的团队来说,这种"轻量级低代码 + 专业算法库"的组合,或许比庞大的 Web 系统更贴近实际需求。未来若加入流程保存/加载、运行调度、异常处理等功能,将更具工程价值。