PCL嵌入windows程序,实时显示雷达点云

备注1:
旧版本的pcl设置avx加速会导致cloud析构失败
新版本的pcl不设置avx会导致cloud析构失败
备注2:
![image.png](https://img-blog.csdnimg.cn/img_convert/7e8fce9ac3dc6c542fcdde9f48e5f707.png#clientId=u43b7211d-919c-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u94222f53&margin=[object Object]&name=image.png&originHeight=699&originWidth=1031&originalType=url&ratio=1&rotation=0&showTitle=false&size=88833&status=done&style=none&taskId=u75bab60d-87e8-451c-b914-200c08a99a7&title=)
一、QT Widget
新版本的PCL(如:1.12) All in One中没有VTK的QT相关库,需要自己编译VTK。
1、添加一个**OpenGL Widget,提升为 **QVTKOpenGLNativeWidget。
2、

pcl::visualization::PCLVisualizer::Ptr viewer = nullptr;
vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = nullptr;
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
renderWindow->AddRenderer(renderer);
viewer.reset(new pcl::visualization::PCLVisualizer(renderer, renderWindow, "test", false));
ui.vtk_widget->setRenderWindow(viewer->getRenderWindow());
viewer->setCameraPosition(4.75624, -0.216315, -13.357, 0.990572, 0.0766216, 0.113559);
viewer->addCoordinateSystem();
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZI> color(filted_cloud, "intensity");
viewer->addPointCloud(filted_cloud, color, "test");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1.2, "test");
renderWindow->Render();//渲染刷新

二、DirectUI
需要为VTK创建窗口句柄。

	vtkSmartPointer<vtkRenderWindow> vtk_renderWindow = nullptr;
	vtkSmartPointer<vtkRenderWindowInteractor> vtk_renderWindowInteractor = nullptr;
	std::shared_ptr<pcl::visualization::PCLVisualizer> pcl_viewer = nullptr;
vtkOutputWindow::SetGlobalWarningDisplay(0);//禁止vtkwarning窗口显示

auto renderer = vtkSmartPointer<vtkRenderer>::New();
vtk_renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
vtk_renderWindow->AddRenderer(renderer);
vtk_renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
pcl_viewer.reset(new pcl::visualization::PCLVisualizer(renderer, vtk_renderWindow, "test", false));

pcl_viewer->setBackgroundColor(0, 0, 0);
vtk_renderWindow->SetParentId(m_hWnd);
pcl_viewer->setCameraPosition(5.00589, -0.502055, -11.2723, 0.913951, 0.034915, 0.404319);
pcl_viewer->setupInteractor(vtk_renderWindowInteractor, vtk_renderWindow);
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZI> color(filted_cloud, "intensity");
viewer->addPointCloud(filted_cloud, color, "test");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1.2, "test");
renderWindow->Render();//渲染刷新
void LidarViewer::SetVisible(bool bVisible)
{
    if (m_hWnd)
    {
        if (bVisible)
            ::ShowWindow(m_hWnd, SW_SHOW);
        else
            ::ShowWindow(m_hWnd, SW_HIDE);
    }
    __super::SetVisible(bVisible);
}


void LidarViewer::SetPos(ui::UiRect rc)
{
    __super::SetPos(rc);
    if (vtk_renderWindow) vtk_renderWindow->SetSize(rc.GetWidth(), rc.GetHeight());
    if (m_hWnd) ::SetWindowPos(m_hWnd, HWND_BOTTOM, rc.left, rc.top, rc.GetWidth(), rc.GetHeight(), SWP_NOZORDER);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值