提供例程C#下载.
运行程序,点击 绑定,拖动图形窗口直线,触发回调函数。
点击解绑,释放资源
halcon 带回调函数算子的使用
在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分类。
|