C#中调用halcon引擎来执行hdev程序

调用halcon引擎有两个直接的好处:

  • 避免C# 与halcon代码混编时可能产生的内存泄露问题

  • 修改halcon程序时不用重新编译C# 


勇哥写了一个示例,详细的应用感受和缺点限制勇哥会持续做相关的总结给大家分享。

对于halcon17来说,要运行下面的程序,你要引用

halcondotnet.dll
hdevenginedonet.dll


image.png


image.png

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引擎学习笔记(八)使用向量变量

halcon引擎学习笔记(七)在在HDevEngine/C#中使用实时编译器JIT 

halcon引擎学习笔记(六)多线程并发执行外部函数,多窗口显示  

halcon引擎学习笔记(五)多线程并发执行外部函数  

halcon引擎学习笔记(四)调用时的错误处理   

halcon引擎学习笔记(三)执行本地或者外部程序   

halcon引擎学习笔记(二)执行Procedure程序,扩展名为hdvp的halcon函数   

halcon引擎学习笔记(一)执行hdev程序   


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864