MFC显示点云
环境是vs2015,pcl1.8.1,vtk8.1。不知道其他vtk版本有没有问题。。。感觉vtk还是很烦。。动不动就报错。。。完整代码https://github.com/izhangrui/MFCPCLDemo创建一个简单的MFC对话框添加picture control控件,把id改为IDC_FRAME(当然用默认名也可以),添加一个打开点云按钮在当前界面的cpp文件顶...
·
环境是vs2015,pcl1.8.1,vtk8.1。不知道其他vtk版本有没有问题。。。感觉vtk还是很烦。。动不动就报错。。。
完整代码https://github.com/izhangrui/MFCPCLDemo
创建一个简单的MFC对话框
添加picture control控件,把id改为IDC_FRAME(当然用默认名也可以),添加一个打开点云按钮
在当前界面的cpp文件顶部加入包含库
#include <opencv2/opencv.hpp>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
using namespace pcl;
using namespace std;
大概就这些
然后在下面申明一些全局变量,一个窗口和两个句柄
vtkSmartPointer<vtkRenderWindow> m_win;
vtkSmartPointer<vtkRenderWindowInteractor> m_iren;
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer", false));
在:OnInitDialog()中添加代码将窗口和之前的图像控件绑定
//==========================将viewer窗口结合到MFC图像控件上===========================
CRect rect;
m_iren = vtkRenderWindowInteractor::New();//重新申请地址
m_win = viewer->getRenderWindow();//获取viewer的句柄
GetDlgItem(IDC_FRAME)->GetClientRect(&rect);//获取图像控件的实际大小
m_win->SetSize(rect.right - rect.left, rect.bottom - rect.top);//将viewer大小设置为图像控件大小
m_win->SetParentId(GetDlgItem(IDC_FRAME)->m_hWnd);//将vtk窗口结合到MFC窗口中
viewer->resetCamera();
m_iren->SetRenderWindow(m_win);
viewer->createInteractor();//由于初始化设置为false,该处重新创建PCL风格的Interactor
m_win->Render();
//========================================================================================
完成这一步,界面上的控件和窗口就绑定了。大概就这个样子
最后在打开点云按钮下面添加代码,打开当前目录下的cloud.pcd文件并显示
PointCloudT::Ptr cloud(new PointCloudT);
pcl::io::loadPCDFile("cloud.pcd", *cloud);
viewer->addPointCloud(cloud);
最后结果
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)