退出PCL查看器:即使关闭窗口,wasStopped()也不改变值

时间:2018-08-14 14:24:13

标签: c++ visualization point-cloud-library

我一直在尝试根据PCL网站上的this tutorial使用PCL可视化工具,并且正在使用以下方法来可视化点云:

boost::shared_ptr<pcl::visualization::PCLVisualizer> createViewer (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud, std::string& viewerName) 
{ 
    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer (viewerName)); 

    viewer->setBackgroundColor (0, 0, 0); 
    viewer->addPointCloud<pcl::PointXYZ> (cloud, viewerName); 
    viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, viewerName); 
    viewer->addCoordinateSystem (1.0); 
    viewer->initCameraParameters (); 

    return viewer; 
} 

void visualizePointCloud (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud) 
{ 
    std::string viewerName = "3D Viewer: Cloud"; 

    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer; 
    viewer = createViewer(cloud, viewerName); 

    while (!viewer->wasStopped()) 
    { 
        viewer->spinOnce(100); 
        boost::this_thread::sleep (boost::posix_time::microseconds (100000)); 
    } 
} 

一切都可视化,但是我似乎无法摆脱困境! 如果您通过单击“ x”关闭查看器窗口,则什么也没有发生,wasStopped()仍返回false,并且程序被卡住。

任何人都知道如何正确终止查看器,以便程序可以继续其余的代码吗?我只是愚蠢吗? 提前谢谢了!

P.S .:我在Mac OS 10.13.6上,带有PCL 1.8.1(通过Homebrew安装)。

2 个答案:

答案 0 :(得分:1)

您可以随时使用方法关闭打开的查看器

viewer->close();

我想它是在PCL 1.6中添加的:http://www.pcl-users.org/How-to-close-the-window-of-a-PCLViewer-and-how-to-make-it-stop-by-code-td3824712.html

答案 1 :(得分:0)

我有点尴尬,但是答案真的很简单……尝试了Flumenque的解决方案后偶然发现了它……事实证明一切都按预期进行,我实在太简单了,无法意识到:

可以通过按键盘上的“ q”来终止查看器。但是,即使窗口已经具有焦点,也必须首先在可视化区域内单击!

以防万一有人将其与我的愚蠢相提并论,我会把它写出来...;)