点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 52124|回复: 134

如何实现基于MFC对话框的PCL显示(3)

  [复制链接]
发表于 2013-5-17 15:38:38 | 显示全部楼层 |阅读模式
本帖最后由 tyzaizl 于 2015-7-23 22:27 编辑

如何实现基于MFC对话框的PCL显示(2)

田玉珍(CIOMP)



2.3.9 添加消息WM_SIZE响应函数OnSize,保证PCLVisualizer窗口viewer随对话框变化。
  1. void CPCLDialogDlg::OnSize(UINT nType, int cx, int cy)
  2. {
  3.         CDialogEx::OnSize(nType, cx, cy);
  4.         // TODO: Add your message handler code here
  5.         if (::IsWindow(this->GetSafeHwnd()))
  6.         {
  7.                 if (this->viewer)
  8.                 {
  9.                         cx -= ptBorder.x;
  10.                         cy -= ptBorder.y;
  11.                         this->GetDlgItem(IDC_PCLVIWER)->SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
  12.                         this->viewer->SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
  13.                 }
  14. }
  15. }
复制代码
2.3.10 新建button控件,captionOpen PCDIDIDC_OPENPCD,为控件添加响应函OnBnClickedOpenpcd()
  1. void CPCLDialogDlg::OnBnClickedOpenpcd()
  2. {
  3.         this->viewer->removeAllPointClouds ();

  4.         // TODO: Add your control notification handler code here
  5.         static TCHAR BASED_CODE szFilter[] = _T("PCD (*.pcd )|*.pcd||");
  6.         CFileDialog cFileDialog(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT| OFN_NOCHANGEDIR ,szFilter);

  7.         if (cFileDialog.DoModal() == IDOK)
  8.         {
  9.                 /////////////////////////////////////////////////////////////////////////////
  10.                 //文档名称
  11.                 std::string filename;
  12.                 filename = cFileDialog.GetPathName();

  13.                 //reset data
  14.                 this->binary_blob.reset();
  15.                 binary_blob = sensor_msgs::PointCloud2::Ptr (new sensor_msgs::PointCloud2);
  16.                 // read new data
  17.                 //*.pcd文件
  18.                 pcl::PCDReader pcd_reader;        
  19.                 if (pcd_reader.read ((char*)_bstr_t(filename.c_str()), *binary_blob) != 0) //* load the file
  20.                 {
  21.                         MessageBox (_T("Couldn't read PCData file!"));
  22.                         return;
  23.                 }        
  24.         }
  25.         if (binary_blob == NULL)
  26.         {
  27.                 MessageBox("Please load PCD file firstly!");
  28.                 return;
  29.         }
  30.         else
  31.         {
  32.                 //其他句柄
  33.                 if (pcl::getFieldIndex(*binary_blob, "rgb") > 0)
  34.                 {
  35.                         color_Handler = pcl::mfc_visualization::PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2>::Ptr
  36.                                 (new pcl::mfc_visualization::PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2> (binary_blob));
  37.                         this->viewer->addPointCloud(binary_blob, color_Handler, sensor_origin, sensor_orientation);
  38.                 }
  39.                 else
  40.                 {
  41.                         xyz_Handler = pcl::mfc_visualization::PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2>::Ptr
  42.                                 (new pcl::mfc_visualization::PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2> (binary_blob));
  43.                         this->viewer->addPointCloud(binary_blob, xyz_Handler, sensor_origin, sensor_orientation);
  44.                 }        
  45.                 this->viewer->resetCamera();
  46.         }
  47. }
复制代码
2.3.11 最终效果,图4所示

2.3.12实现多项功能的程序效果,如图5所示

      由于级别不够所以附件大小限制,这里只给出图4和图5,图1~3不重要,所以不给出了。压缩文件是修改好的源代码(如有需要请回复留下邮箱,我可以发给大家),按说明操作即可。

       修改源代码的使用请看如何实现基于MFC对话框的PCL显示(4)——关于修改源代码的使用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复

使用道具 举报

 楼主| 发表于 2013-5-17 16:35:50 | 显示全部楼层

第一次发帖,请大家多多指教:)
回复 支持 反对

使用道具 举报

发表于 2013-5-17 17:12:51 | 显示全部楼层
非常感谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-17 18:19:59 | 显示全部楼层
meno10 发表于 2013-5-17 17:12
非常感谢

呵呵!多多指教
回复 支持 反对

使用道具 举报

发表于 2013-5-18 00:00:29 | 显示全部楼层
此贴实用,有了GUI,方便参数调整,赞一个!
回复 支持 反对

使用道具 举报

发表于 2013-5-18 02:48:43 | 显示全部楼层
非常好,非常好,多谢多谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-18 09:32:20 | 显示全部楼层
wangguo0123 发表于 2013-5-18 00:00
此贴实用,有了GUI,方便参数调整,赞一个!

呵呵,一开始也是这么想得,所以就花了好长时间改源代码,没想到最后还成功了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-18 09:33:12 | 显示全部楼层
iimzwhld 发表于 2013-5-18 02:48
非常好,非常好,多谢多谢!

呵呵,相互学习探讨!欢迎批评指正
回复 支持 反对

使用道具 举报

发表于 2013-5-18 09:44:15 | 显示全部楼层
tyzaizl 发表于 2013-5-18 09:32
呵呵,一开始也是这么想得,所以就花了好长时间改源代码,没想到最后还成功了 ...

你好,能否给我发一份带GUI的代码,wangguo0123@foxmail.com谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-18 10:27:59 | 显示全部楼层
wangguo0123 发表于 2013-5-18 09:44
你好,能否给我发一份带GUI的代码,谢谢

呵呵,没问题,已经发过去了,查收一下
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-27 09:37 , Processed in 2.383343 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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