调用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
版权声明:本文为博主原创文章,转载请附上博文链接!