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

时间:2018-03-06 10:08:58

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

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

1 个答案:

答案 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()运行时避免修改渲染窗口的内容。