C++ 点云库-CloudViewer showCloud()-传递常量指针-可视化STL文件

C++ 点云库-CloudViewer showCloud()-传递常量指针-可视化STL文件,c++,pointers,point-cloud-library,C++,Pointers,Point Cloud Library,背景 我很抱歉为这么一个琐碎的问题打扰你。但我似乎不能把它弄对。我使用C++已经有一段时间了,所以我可能做的非常基本,非常错误。 我试图完成的是将.stl网格文件加载到PCL的cloudViewer。然而,我似乎找不到一个好的变量可以传递给showCloud() showCloud()的定义如下: void pcl::visualization::CloudViewer::showCloud(const ColorCloud::ConstPtr & cloud, const std::s

背景
我很抱歉为这么一个琐碎的问题打扰你。但我似乎不能把它弄对。我使用C++已经有一段时间了,所以我可能做的非常基本,非常错误。 我试图完成的是将
.stl
网格文件加载到PCL的
cloudViewer
。然而,我似乎找不到一个好的变量可以传递给
showCloud()

showCloud()
的定义如下:

void pcl::visualization::CloudViewer::showCloud(const ColorCloud::ConstPtr & cloud, const std::string & cloudname = "cloud")
这让我相信我需要向方法传递一个常量指针。常规指针(?)似乎也能工作。这是他们做这件事的方式,而且确实奏效了。但是,我需要加载网格,而不是直接创建的点云。以下是本教程中使用常规的
点云
实现的方法:

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);

pcl::visualization::CloudViewer viewer("Cloud Viewer");

//blocks until the cloud is actually rendered
viewer.showCloud(cloud);
错误
my IDE(VS2010)给我的错误消息是:

Error: no instance of overloaded function "pcl::visualization::CloudViewer::showCloud" matches argument list
我试过什么 我试着将
变量转换为指针、常量指针,并将其分配给新指针等,但我就是想不起来当我将其更改为指针时,
pcl::fromROSMsg()
方法会抱怨相同的错误。
因此,当一个方法有效时,另一个方法无效。以下是我尝试过的几件事(它们可能并不都有意义):

pcl::PointCloud::Ptr cloud\u Ptr;
点云;
pcl::fromROSMsg(mesh.cloud,cloud);
//...
云_ptr=云*;
//...
查看器.showCloud(cloud_ptr);
//或者。。。
点云;
pcl::fromROSMsg(mesh.cloud,cloud);
pcl::PointCloud::Ptr cloud_Ptr(cloud);
//或者。。。
点云;
pcl::PointCloud::ConstPtr cloud\u const\u pointer=&cloud;
pcl::fromROSMsg(mesh.cloud,cloud);
//...
查看器.showCloud(云常量指针);
//或者。。。
viewer.showCloud(&cloud);
//等等等等。

感谢您提前提供的帮助。

在以下帮助下,我最终找到了一种不同的方式来可视化我的
.stl
文件:

#包括
#包括
#包括
#包括
#包括
#包括
int
主要()
{
pcl::PointCloud::Ptr cloud(新的pcl::PointCloud());
多边形网格三角形;
pcl::io::LoadPolyConfiglestL(“C:/Users/bono/Documents/Kinect2/Meshes/MeshedReconstructionAnderson.stl”,三角形);
pcl::fromROSMsg(triangles.cloud,*cloud);
pcl::visualization::CloudViewer查看器(“云查看器”);
//块,直到云实际渲染为止
查看器.showCloud(cloud);
//使用以下功能访问底层更高级/功能更强大的
//视觉化器
//这只会被调用一次
viewer.runOnVisualizationThreadOnce(viewerOnOff);
//这将在每个可视化迭代中调用一次
viewer.runonvisualization线程(viewerPsycho);
而(!viewer.wastopped())
{
//你也可以在这里做很酷的处理
//FIXME:请注意,这是在viewerPsycho的单独线程中运行的
//你自己也应该提防比赛条件。。。
用户_数据++;
}
返回0;
}
Error: no instance of overloaded function "pcl::visualization::CloudViewer::showCloud" matches argument list
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_ptr;
pcl::PointCloud<pcl::PointXYZRGB> cloud;
pcl::fromROSMsg(mesh.cloud, cloud);
//...
cloud_ptr = cloud*;
//...
viewer.showCloud(cloud_ptr);

//or...
pcl::PointCloud<pcl::PointXYZRGB> cloud;
pcl::fromROSMsg(mesh.cloud, cloud);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_ptr (cloud);

//or...
pcl::PointCloud<pcl::PointXYZRGB> cloud;
pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud_const_pointer = &cloud;
pcl::fromROSMsg(mesh.cloud, cloud);
//...
viewer.showCloud(cloud_const_pointer);

//or...
viewer.showCloud(&cloud);
//etc. etc.
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/io/ply_io.h>

int 
main ()
{
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>());
    pcl::PolygonMesh triangles;
    pcl::io::loadPolygonFileSTL("C:/Users/bono/Documents/Kinect2/Meshes/MeshedReconstructionAnderson.stl", triangles);
    pcl::fromROSMsg(triangles.cloud, *cloud);

    pcl::visualization::CloudViewer viewer("Cloud Viewer");  
    //blocks until the cloud is actually rendered
    viewer.showCloud(cloud);

    //use the following functions to get access to the underlying more advanced/powerful
    //PCLVisualizer

    //This will only get called once
    viewer.runOnVisualizationThreadOnce (viewerOneOff);

    //This will get called once per visualization iteration
    viewer.runOnVisualizationThread (viewerPsycho);
    while (!viewer.wasStopped ())
    {
        //you can also do cool processing here
        //FIXME: Note that this is running in a separate thread from viewerPsycho
        //and you should guard against race conditions yourself...
        user_data++;
    }

    return 0;
}