我正在研究一个需要结合pcl和vtk的c ++项目。 但是,当使用 spin 功能更新场景时,我遇到了问题。 我知道 spin 函数在无限循环中调用 spinOnce 进行更新 pcl visualizser中的场景.. 但我正在开发一个项目,我需要在使用后执行一些代码 旋转功能。 这段代码可能像:
void addBoundingBox()
{
// add vtkBoxWidget2 to the pcl visualizer.
m_label = new BoundingBoxLabel(m_pclViewer,
ia::annotalight::common::AnnnotationKinds::CAR);
m_label->addLabel(*m_labelingService);
m_pclViewer->spin();
// i need to execute this code to add the vtkBox to a QTreeWidget.
setAllLabels(m_labelingService);
initLabelsList();
}
答案 0 :(得分:1)
tl; dr - 没有别的办法
正如您已经意识到PCLVisualizer::spin()
是一种阻止方法。如果要在不破坏窗口的情况下执行代码,则需要立即开始使用PCLVisualizer::spinOnce()
。如果你想保持“场景”刷新并处理输入事件,你需要将它保持在这种循环中
while (!viewer->wasStopped ())
{
viewer->spinOnce (100);
// (optional) boost::this_thread::sleep (boost::posix_time::microseconds (100000));
}
您添加或修改的所有内容都需要在该循环内部或此线程外部完成。只需确保在spinOnce()
运行时避免修改渲染窗口的内容。