将Cloud Viewer与自定义PosT类型配合使用

时间:2014-03-05 21:11:18

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

我正在使用PCL(Point Cloud Library)有一个继承自pcl :: PointXYZ的自定义PointT

struct PointXYZx : public pcl::PointXYZ
{
}; 

POINT_CLOUD_REGISTER_POINT_STRUCT (PointXYZx,  (float, x, x) (float, y, y) (float, z, z))

我想用CloudViewer绘制它:

pcl::PointCloud<PointXYZx>::Ptr cloud (new pcl::PointCloud<PointXYZx>());
pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");
viewer.showCloud(cloud);

但它让我错误地说:

main.cpp: In function ‘int main()’:
main.cpp:30:29: error: no matching function for call to ‘pcl::visualization::CloudViewer::showCloud(pcl::PointCloud<PointXYZx>::Ptr&)’
     viewer.showCloud(cloud);
                      ^
/usr/include/pcl-1.7/pcl/visualization/cloud_viewer.h:97:9: note:   no known conversion for argument 1 from ‘pcl::PointCloud<PointXYZx>::Ptr {aka boost::shared_ptr<pcl::PointCloud<PointXYZx> >}’ to ‘const ConstPtr& {aka const boost::shared_ptr<const pcl::PointCloud<pcl::PointXYZ> >&}’

我尝试使用以下方法将PointXYZx转换为PointXYZ:

viewer.showCloud((pcl::PointCloud<pcl::PointXYZ>::Ptr)cloud);

然后它告诉我:

/home/bruce/projects/mapomatix/mapomatix-pc/main.cpp:30:65: error: no matching function for call to ‘boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ> >::shared_ptr(pcl::PointCloud<PointXYZx>::Ptr&)’
     viewer.showCloud((pcl::PointCloud<pcl::PointXYZ>::Ptr)(cloud));

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

showCloud函数的输入类型是&#34; boost :: shared_ptr&#34; 。你可以实例化如下的shared_ptr:

boost::shared_ptr<pcl::PointCloud<pcl::PointXYZx>> cloud_test; 
cloud_test = boost::make_shared <pcl::PointCloud<pcl::PointXYZx>> (new pcl::PointCloud<pcl::PointXYZx>);
viewer.showCloud(cloud_test);

如果你正确定义了新的点类型,那么输入&#34; cloud_test&#34;就没有问题。和功能&#34; ShowCloud&#34;。

您可以看到此link以了解有关实例化boost :: shared_ptr的更多信息。