退出 PCL 查看器:即使 window 已关闭,wasStopped() 也不会更改值

Exiting PCL viewer: wasStopped() not changing value even though window was closed

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

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" 关闭查看器 window,没有任何反应,wasStopped() 仍然 returns false,并且程序卡住了。

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

P.S.: 我在 Mac OS 10.13.6 和 PCL 1.8.1(通过 Homebrew 安装)。

您可以随时使用方法

关闭打开的查看器
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

我有点尴尬,但答案真的很简单...在尝试 Flumenque 的解决方案后无意中发现了它...事实证明一切正常,我太简单了,无法意识到它:

可以通过按键盘上的 "q" 来终止查看器。但是,您必须先在可视化区域内单击,即使 window 已经获得焦点!

我想我会把它写下来,以防其他人与我的愚蠢行为相吻合……;)