备注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);
}