/*\author Radu Bogdan Rusu
* adaptation Raphael Favier*/#include#include#include#include#include#include#include#include#include#include#include#include
usingpcl::visualization::PointCloudColorHandlerGenericField;usingpcl::visualization::PointCloudColorHandlerCustom;//简单类型定义
typedef pcl::PointXYZ PointT;
typedef pcl::PointCloudPointCloud;
typedef pcl::PointNormal PointNormalT;
typedef pcl::PointCloudPointCloudWithNormals;//这是一个辅助教程,因此我们可以负担全局变量//创建可视化工具
pcl::visualization::PCLVisualizer *p;//定义左右视点
intvp_1, vp_2;//处理点云的方便的结构定义
structPCD
{
PointCloud::Ptr cloud;
std::stringf_name;
PCD() : cloud (newPointCloud) {};
};structPCDComparator
{bool operator () (const PCD& p1, const PCD&p2)
{return (p1.f_name
}
};//以< x, y, z, curvature >形式定义一个新的点
class MyPointRepresentation : public pcl::PointRepresentation {using pcl::PointRepresentation::nr_dimensions_;public:
MyPointRepresentation ()
{//定义尺寸值
nr_dimensions_ = 4;
}//覆盖copyToFloatArray方法来定义我们的特征矢量
virtual void copyToFloatArray (const PointNormalT &p, float * out) const{//< x, y, z, curvature >
out[0] =p.x;out[1] =p.y;out[2] =p.z;out[3] =p.curvature;
}
};
/** 在可视化窗口的第一视点显示源点云和目标点云
**/
void showCloudsLeft(const PointCloud::Ptr cloud_target, constPointCloud::Ptr cloud_source)
{
p->removePointCloud ("vp1_target");
p->removePointCloud ("vp1_source");
PointCloudColorHandlerCustom tgt_h (cloud_target, 0, 255, 0);
PointCloudColorHandlerCustom src_h (cloud_source, 255, 0, 0);
p->addPointCloud (cloud_target, tgt_h, "vp1_target", vp_1);
p->addPoint