PCL:如何在 pcl::visualizer 中更新法线的云?

PCL: How can I update the normals's cloud in pcl::visualizer?

本文关键字:更新 visualizer pcl PCL      更新时间:2023-10-16

我有一个线程,在处理点云时可以将其可视化。我还需要可视化法线,如何更新它们?

对于普通云,我找不到类似updateClouds的内容。

void pclVisualizerThread::operator()()
{
    // prepare visualizer named "viewer"
    while (!viewer_->wasStopped ())
    {
        viewer_->spinOnce (100);
        // Get lock on the boolean update and check if cloud was updated
        boost::mutex::scoped_lock updateLock(*(updateModelMutex_.get()));
        if((*update_))
        {
            // I NEED ALSO TO UPDATE THE NORMALS
            if(!viewer_->updatePointCloud(cloud_, "Triangulated points"))
            {
                viewer_->addPointCloud<pcl::PointXYZRGB>(cloud_, *rgb_, "Triangulated points");
                viewer_->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "Triangulated points");
            }
            (*update_) = false;
        }
        updateLock.unlock();
    }   
} 

提前谢谢。

一种方法是移除法线的云并再次添加它:

void pclVisualizerThread::operator()()
{
    // prepare visualizer named "viewer"
    while (!viewer_->wasStopped ())
    {
        viewer_->spinOnce (100);
        // Get lock on the boolean update and check if cloud was updated
        boost::mutex::scoped_lock updateLock(*(updateModelMutex_.get()));
        if((*update_))
        {
            if(!viewer_->updatePointCloud(cloud_, "Triangulated points"))
            {
                viewer_->addPointCloud<pcl::PointXYZRGB>(cloud_, *rgb_, "Triangulated points");
                viewer_->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "Triangulated points");
            }
            viewer_->removePointCloud("normals", 0);
            viewer_->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal> (cloud_, normals_, 150, 0.35, "normals");
            (*update_) = false;
        }
        updateLock.unlock();
    }   
}