spin() 函数未执行后的额外代码

extra code after spin() function is not executed

我正在开发一个需要结合 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(); 
} 

tl;dr - 别无他法

如您所知,PCLVisualizer::spin() 是一种阻塞方法。如果您想在不破坏 window 的情况下执行代码,则需要立即开始使用 PCLVisualizer::spinOnce()。如果你想保持 "scene" 刷新并处理输入事件,你需要将它保持在这种

的循环中
while (!viewer->wasStopped ())
{
  viewer->spinOnce (100);
  // (optional) boost::this_thread::sleep (boost::posix_time::microseconds (100000));
}

您添加或修改的所有内容都需要在该循环内或该线程外完成。只要确保避免修改渲染的内容 window 而 spinOnce() 是 运行.