设置首页收藏本站
授权版本:2024_10
开启左侧

Halcon20.05导出visualize_object_model_3d无法刷新3d图像(一片黑)?

[复制链接]
Criss 发表于 2020-7-3 15:08:16 | 显示全部楼层 |阅读模式
Halcon测试代码如下:
  1. dev_get_window (WindowHandle)
  2. read_object_model_3d ('bmc_mini', 'mm', [], [], ObjectModel3D, Status)
  3. visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut)
复制代码

导出到C#中运行,始终不显示图像(Halcon12中是完全没有问题的)
微信截图_20200703150223.png
通过变量检测可以看到ho_ImageDump变量是有图的,但是就是显示不出来,在continue按钮出现的大概黑色附近点击,还是可以显示最后的图像(才刷新)。
所以,笔者认为这个地方可能出现了图像刷新的堵塞,所以我们尝试加入主程序主线程刷新消息看看。
添加下面代码:
  1. System.Windows.Forms.Application.DoEvents();
复制代码

在主程序visualize_object_model_3d函数里面找到并添加如下:
  1. dump_image_output(ho_Image, hv_WindowHandleBuffer, hv_Scene3D, hv_AlphaOrig,
  2.     hv_ObjectModel3D, hv_GenParamName_COPY_INP_TMP, hv_GenParamValue_COPY_INP_TMP,
  3.     hv_CamParam_COPY_INP_TMP, hv_Poses, hv_ColorImage, hv_Title, hv_Information,
  4.     hv_Label_COPY_INP_TMP, hv_VisualizeTB, "true", hv_TrackballCenterRow,
  5.     hv_TrackballCenterCol, hv_TBSize, hv_SelectedObject, hv_WindowCenteredRotation,
  6.     hv_TBCenter);
  7. ho_ImageDump.Dispose();
  8. HOperatorSet.DumpWindowImage(out ho_ImageDump, hv_WindowHandleBuffer);
  9. HDevWindowStack.SetActive(hv_WindowHandle);
  10. if (HDevWindowStack.IsOpen())
  11. {
  12.     HOperatorSet.DispObj(ho_ImageDump, hv_WindowHandle);
  13.     System.Windows.Forms.Application.DoEvents();
  14. }
复制代码

初步测试已经可以了,就是消息所在的位置导致可能会出现卡顿情况,尝试几个while地方都加上应该会好些。
微信截图_20200703150639.png
暂时先这样吧。
接下来,我们再继续研究看看高版本是否还有其他解决方式。
解决方法一:尝试导出Halcon后,初始化让halcon使用windows线程机制!
  1. set_system('use_window_thread','true')
复制代码

=================华丽的分割线==========================
后面重新用19.05测试了下,其实阻塞在主线程处理主线程消息也会导致卡顿,甚至可能导致无法响应鼠标消息。
最好的解决办法:让visualize_object_model_3d 算子运行在子线程中!
visualize_object_model_3d算子自带例子(修改了下窗口句柄是获取不是打开新的窗口):
  1. dev_get_window (WindowHandle)
  2. read_object_model_3d ('pipe_joint', 'm', [], [], ObjectModel3D1, Status)
  3. read_object_model_3d ('clamp_sloped', 'mm', [], [], ObjectModel3D2, Status)
  4. gen_cam_par_area_scan_division (0.016, 0, 5e-6, 5e-6, 320, 240, 640, 480, CamParam)
  5. get_cam_par_data (CamParam, 'image_width', Width)
  6. get_cam_par_data (CamParam, 'image_height', Height)
  7. create_pose (-0.02, 0.01, .6, 110, 5, 320, 'Rp+T', 'gba', 'point', Pose1)
  8. create_pose (0.01, 0.03, .6, 130, 315, 340, 'Rp+T', 'gba', 'point', Pose2)
  9. visualize_object_model_3d (WindowHandle, [ObjectModel3D1, ObjectModel3D2], \
  10.                            CamParam, [Pose1, Pose2], \
  11.                            ['alpha', 'color_0', 'color_1', 'disp_pose'], \
  12.                            [0.5,     'orange',  'yellow',  'true'], \
  13.                            ['3D visualization demo'], ['pipe joint', 'clamp'], \
  14.                            ['Use mouse to change view'], PoseOut)
复制代码

导出为C#函数,然后新建winform工程并在界面添加HWindowControl控件,并在Form1添加代码:
  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             HDevWindowStack.Push(this.hWindowControl1.HalconWindow);
  4.             HDevWindowStack.SetActive(this.hWindowControl1.HalconWindow);
  5.             Thread th = new Thread(HalconProc);
  6.             th.IsBackground = true;
  7.             th.Start();
  8.         }
  9.         
  10.         private void HalconProc()
  11.         {
  12.             HDevelopExport hal = new HDevelopExport();
  13.         }
复制代码

记得顶部引用命名空间:using HalconDotNet;
编译测试,功能完全正常!
微信截图_20210416195327.jpg

如果鼠标不在图像控件区域内则会引发异常,这是正常的:
  1. 引发的异常:“HalconDotNet.HOperatorException”(位于 halcondotnet.dll 中)
复制代码


测试代码:
WindowsFormsApplication1.rar (42.39 KB, 下载次数: 116)
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
panrs 发表于 2022-1-11 14:36:04 | 显示全部楼层
用到.net 4.0 要运用halcon高版本,17还不行!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
panrs 发表于 2022-1-11 14:55:54 | 显示全部楼层
好多报错 htuple dispose, 要用HALCON 18以上版本!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
vince01 发表于 2023-1-29 17:43:54 | 显示全部楼层
在HSmartWindowControlWPF中使用visualize_object_model_3d 算子显示模型,会出现鼠标操作的优先级存在于HSmartWindow特性上(系统认为是平面图像,左键是平移效果),而使用HWindowControlWPF则3D视图操作一切正常(左键旋转),楼主遇见过这情况吗
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
S916901 发表于 2023-3-14 15:09:03 | 显示全部楼层
同样问题,已解决
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表