halcon19HDrawingObject绑定回调函数

本文详细介绍了Halcon 19中HDrawingObject回调函数在C++中的使用变化,重点讲解了回调函数参数类型调整和如何处理Hlong类型的handle。通过实例展示了如何正确获取并处理回调事件中的参数,以及在实际应用中的操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

halcon19的HDrawingObject回调事件与halcon12稍微有不同,主要区别在于回调函数的数据类型与12的不一样,以C++为例,在halcon19的文档描述中的callback函数原型(long, long, char*)。
在这里插入图片描述
但是如果在c++中以这样的函数写,前两个参数的值获取不到,根据hdrawingobject.h中定义,handle的数据类型为Hlong,这与halcon12不同,因此尝试用(Hlong, Hlong, char*)的函数类型获取一下前两个参数的值。经过验证,完全正确。
在这里插入图片描述

例程

定义全局变量

 HObject ho_Image;
 HTuple hv_Width, hv_Height, hv_WindowHandle; //windowHandle最好为全局变量
 vector<Hlong> drawingObjectIndexs;
 vector<HDrawingObject> drawingObjects;

绘制矩形图形

 SetColor(hv_WindowHandle, "red");
 SetDraw(hv_WindowHandle, "margin");
 SetLineWidth(hv_WindowHandle, 3);
 HTuple Row1, Column1, Row2, Column2;
 DrawRectangle1(hv_WindowHandle, &Row1, &Column1, &Row2, &Column2);
 
 HDrawingObject rect = HDrawingObject(Row1, Column1, Row2, Column2);
 rect.SetDrawingObjectParams("color", "blue");
 attachDrawingObject(rect);//绑定图形到窗口并绑定回调函数

绑定回调函数

void attachDrawingObject(HDrawingObject draw){
 Hlong id = draw.GetHandle();
 selectDrawingObject = id;
 drawingObjectIndexs.push_back(id);
 drawingObjects.push_back(draw);
 
 draw.SetDrawingObjectCallback("on_select", (void*)CallBack_Select);
 draw.SetDrawingObjectCallback("on_drag", (void*)CallBack_Drag);       
 AttachDrawingObjectToWindow(hv_WindowHandle, draw);
 AttachBackgroundToWindow(ho_Image, hv_WindowHandle);
}

回调函数实现

void CallBack_Select(Hlong id, Hlong WindowHandle, char* type) {
 selectDrawingObject = id;
 HDrawingObject obj = HDrawingObject(id);
 obj.SetDrawingObjectParams("color", "orange");
 HTuple left = obj.GetDrawingObjectParams("column1");
 HTuple top = obj.GetDrawingObjectParams("row1");
 HTuple right = obj.GetDrawingObjectParams("column2");
 HTuple bottom = obj.GetDrawingObjectParams("row2");
 cout << "left = " << (double)left << ", top = " << (double)top 
   << ", right = " << (double)right << ", bottom = " << (double)bottom << endl;
}

void CallBack_Drag(Hlong id, Hlong WindowHandle, char* type) {
 selectDrawingObject = id;
 HDrawingObject obj = HDrawingObject(id);
 obj.SetDrawingObjectParams("color", "gray");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值