Halcon与QT混合编程 C++ QT中 DrawRegion和ReduceObjectModel3dByView函数与分离后不能准确分割区域的问题
Halcon与QT混合编程在C++中,我们首先用visualize_object_model_3d函数显示3D模型。并且把continue按钮去掉。然后点击QT上的button,之后执行DrawRegion和ReduceObjectModel3dByView函数,选择3D模型中的部分区域。但是这样造成了一个问题:去掉continue按钮后,visualize_object_mode...
Halcon与QT混合编程
在C++中,我们首先用visualize_object_model_3d函数显示3D模型。并且把continue按钮去掉。
然后点击QT上的button,之后执行DrawRegion和ReduceObjectModel3dByView函数,选择3D模型中的部分区域。
但是这样造成了一个问题:
去掉continue按钮后,visualize_object_model_3d函数不能正常退出,因此我们无法使用它的返回值。hv_PoseOut便成了无效参数。
DrawRegion(&ho_UserRegion, hv_WindowHandle);
ReduceObjectModel3dByView(ho_UserRegion, hv_TeachObjectModel3DSelected, hv_CamParam,
hv_PoseOut, &hv_TeachObjectModel3DSelected);
因此,ReduceObjectModel3dByView函数就不能把3D模型中正确的区域提取出来。
因此,我们需要修改visualize_object_model_3d函数的源码,使其在不能正常退出的时候,也可以返回当前姿态。
因此便需要实时的返回当前姿态。
我们在visualize_object_model_3d函数中找到返回姿态的代码:
//Compute the output pose
if (0 != ExpGetGlobalVar_gIsSinglePose())
{
(*hv_PoseOut) = hv_Poses.TupleSelectRange(0,6);
}
else
{
(*hv_PoseOut) = hv_Poses;
}
可以看到,姿态的返回是用指针的,因此可以很方便的让它实时返回。只需要把这段代码放到显示函数的循环中即可。
放到哪里呢?
我尝试了好多次,终于找到了
dump_image_output(ho_Image, hv_WindowHandleBuffer, hv_Scene3D, hv_AlphaOrig,
hv_ObjectModel3D, hv_GenParamName, hv_GenParamValue, hv_CamParam, hv_Poses,
hv_ColorImage, hv_Title, hv_Information, hv_Label, hv_VisualizeTB, "true",
hv_TrackballCenterRow, hv_TrackballCenterCol, hv_TBSize, hv_SelectedObject,
hv_WindowCenteredRotation, hv_TBCenter);
DumpWindowImage(&ho_ImageDump, hv_WindowHandleBuffer);
HDevWindowStack::SetActive(hv_WindowHandle);
if (HDevWindowStack::IsOpen())
DispObj(ho_ImageDump, HDevWindowStack::GetActive());
//
//Check for mouse events
hv_GraphEvent = 0;
hv_Exit = 0;
//todo
while (0 != 1)
{
if (0 != ExpGetGlobalVar_gIsSinglePose())
{
(*hv_PoseOut) = hv_Poses.TupleSelectRange(0, 6);
}
else
{
(*hv_PoseOut) = hv_Poses;
}
QCoreApplication::processEvents();
//
//Check graphic event
try
{
GetMpositionSubPix(hv_WindowHandle, &hv_GraphButtonRow, &hv_GraphButtonColumn,
&hv_GraphButton);
我把它放到了这里(注意是复制到这里)
具体在第二层while (0 != 1)循环内的开始处。
然后即使切断visualize_object_model_3d函数,我们也能取得当前的姿态了。
更多推荐
所有评论(0)