调用halcon引擎有两个直接的好处:
避免C# 与halcon代码混编时可能产生的内存泄露问题
修改halcon程序时不用重新编译C#
勇哥写了一个示例,详细的应用感受和缺点限制勇哥会持续做相关的总结给大家分享。
对于halcon17来说,要运行下面的程序,你要引用
halcondotnet.dll hdevenginedonet.dll
using HalconDotNet; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { private HDevEngine engine = new HDevEngine(); private HDevProgramCall programCall; private string programPath; private string procedurePath; private HDevOpMultiWindowImpl MyHDevOperatorImpl; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var path1 = "drawCircle"; if (initialengine(path1)) { loadengine(); inspectengine(); } } public bool initialengine(string filename) { programPath = System.Environment.CurrentDirectory + @"\" + filename + ".hdev"; procedurePath = System.Environment.CurrentDirectory + @"\"; if(!File.Exists(programPath)) { MessageBox.Show("file not exist"); return false; } if (!HalconAPI.isWindows) { programPath = programPath.Replace("\"", "/"); procedurePath = procedurePath.Replace("\"", "/"); } engine.SetProcedurePath(procedurePath); // viewPort.HalconWindow.SetLineWidth(4); MyHDevOperatorImpl = new HDevOpMultiWindowImpl(hWindowControl1.Handle); engine.SetHDevOperators(MyHDevOperatorImpl); return true; } public void loadengine() { try { HDevProgram program = new HDevProgram(programPath); programCall = new HDevProgramCall(program); } catch { } } public void disposeengine() { try { programCall.Dispose(); } catch { } } public void inspectengine() { try { programCall.Execute(); } catch { } } } }
halcon代码如下,只是简单的画了一个圆。
px:=280 py:=300 r:=200 xary:=[] yary:=[] step:=2 for Index := 0 to 360/step by step x:=px+px/2*cos(rad(step*Index+step)) y:=py+py/2*sin(rad(step*Index+step)) xary[Index/step]:=x yary[Index/step]:=y disp_polygon(200000, xary, yary) endfor
勇哥2020/8/24注:
我后来写了一个系列的贴子来讲解怎么样调用halcon引擎,请参考:
halcon引擎学习笔记(七)在在HDevEngine/C#中使用实时编译器JIT
halcon引擎学习笔记(六)多线程并发执行外部函数,多窗口显示
halcon引擎学习笔记(二)执行Procedure程序,扩展名为hdvp的halcon函数
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

