退出 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 已经获得焦点!
我想我会把它写下来,以防其他人与我的愚蠢行为相吻合……;)
我一直在根据 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 已经获得焦点!
我想我会把它写下来,以防其他人与我的愚蠢行为相吻合……;)