QQ登录

只需一步,快速开始

halcon 带回调函数算子的使用

[ 复制链接 ]
提供例程C#下载.
运行程序,点击 绑定,拖动图形窗口直线,触发回调函数。
点击解绑,释放资源

halcon 带回调函数算子的使用

halcon 带回调函数算子的使用

请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:halcon 带回调函数算子的使用.rar 
文件大小:9.53 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我




在halcon中,其提供有很多函数,函数要求传递回调。
例如
set_drawing_object_callback
set_content_update_callback
第一次使用这些函数,不知道如何传递函数,因为其回调函数并非以函数名进行传递。
这里在halcon 随意编写代码
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*open_window (0, 0, 256, 256, WindowHandle, 'visible', '', WindowHandle1)
create_drawing_object_circle (100, 100, 80, DrawID)
create_drawing_object_line (100, 100, 200, 200, DrawID1)
* set_content_update_callback (WindowHandle,'gen_line' , '123')
attach_drawing_object_to_window (WindowHandle, DrawID)
set_drawing_object_callback (DrawID, 'on_resize', 'disp_image')


导出到C#中进行使用,演示set_drawing_object_callback如何给其传递回调函数
导出操作就不介绍。只介绍在C#中如何一步步实现函数的使用
0.创建窗口工程,添加标签label1,按钮 图形绑定,图形解绑,以及两按钮的点击函数。

1.添加引用 halcondotnet

2.添加命名空间
using HalconDotNet;
using System.Runtime.InteropServices;


3.窗口代码中,添加全局变量与回调函数
        HTuple hv_WindowHandle = null, hv_DrawID = null;
        public void DrawingObjectCallbackFun(IntPtr ObjectID, IntPtr hWindow, string sEventType)//回调函数;
        {
            label1.Text = sEventType;
        }

4.绑定窗口按钮,点击函数为
        private void button2_Click(object sender, EventArgs e)
        {

            HalconDotNet.HDrawingObject.HDrawingObjectCallback DrawingObjectCallback = DrawingObjectCallbackFun;//定义一个委托;
            IntPtr pCallBakc = Marshal.GetFunctionPointerForDelegate(DrawingObjectCallback);//取回调函数的地址;

            HOperatorSet.OpenWindow(0, 0, 512, 512, button3.Handle, "visible", "", out hv_WindowHandle);
            HDevWindowStack.Push(hv_WindowHandle);

            HOperatorSet.CreateDrawingObjectLine(0, 0, 200, 200, out hv_DrawID);
            HOperatorSet.AttachDrawingObjectToWindow(hv_WindowHandle, hv_DrawID);
            HOperatorSet.SetDrawingObjectCallback(hv_DrawID, "on_resize", pCallBakc);
        }


5.解绑按钮点击函数为      
private void button1_Click(object sender, EventArgs e)
        {
            HOperatorSet.DetachDrawingObjectFromWindow(hv_WindowHandle,hv_DrawID);
            HOperatorSet.ClearDrawingObject(hv_DrawID);
        }

关键点有
1.SetDrawingObjectCallback的回调函数地址由下面一句获得。
Marshal.GetFunctionPointerForDelegate(DrawingObjectCallback);//取回调函数的地址;

Marshal的使用得添加using System.Runtime.InteropServices;

2.函数中参数DrawingObjectCallback由 HALCON定义HalconDotNet.HDrawingObject.HDrawingObjectCallback
HalconDotNet.有很多细分,当前使用HDrawingObject分类。


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索