PCL: Как продолжить обновление окна просмотра?

Я в беде.

Я искал здесь ответ, я прочитал это:

Поток визуализации точек облака с использованием PCL

Но я не понимаю, как это сделать.

Мне нужно использовать отдельный поток для визуализации с помощью средства просмотра PCL набора точек, хранящихся в C++... этот массив будет обновляться при каждой разработке из другого потока, который очищает и пополняет его новыми точками.

Мне нужно, чтобы окно PCL было визуализатором этих точек в реальном времени... поэтому при каждом новом конце разработки из другого потока визуализировалось обновление его рисунка.

Это мой код функции визуализации в моей программе:

void VisualizzaPointCl()
{
      //dichiarazione del cloud
    pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);

       //Creazione del cloud

       for (int i=0;i<Clist.size();i++)
       {
            pcl::PointXYZ basic_point;
            basic_point.x = Clist[i].x;
            basic_point.y = Clist[i].y;
            basic_point.z = Clist[i].z;
            basic_cloud_ptr->points.push_back(basic_point);
        }

       //puntatore al cloud
      basic_cloud_ptr->width = (int) basic_cloud_ptr->points.size ();
      basic_cloud_ptr->height = 1;

       //avvia il viewer
      boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
      viewer = simpleVis(basic_cloud_ptr);

  //--------------------
  // -----loop-----
  //--------------------
  while (!viewer->wasStopped ())
  {
    viewer->spinOnce (100,true);
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }
}

Если я буду запускать эту функцию при каждой доработке, выводить все в порядке, но блокировать поток моей программы...

Пожалуйста, помогите мне, как я могу это сделать?


person Domenico    schedule 28.04.2014    source источник


Ответы (1)


Вы запускаете бесконечный цикл while.

Решением будет размещение вашей функции в отдельном потоке (или просто вызовите spinOnce после остального кода в каждом кадре).

person Simson    schedule 06.05.2014