命名类的成员变量时,单词之间用下划线隔开并以下划线结尾,例如:
int example_int_;//对阅读pcl源码很有帮助,可明显区分成员变量与局部变量。
pcl代码块的标准缩进是两个空格,这里用单个空格来隔开函数/类成员函数名字与其参数列表,例如:
int exampleMethod(int example_arg);
点索引机制,向PCL算法传递点云数据的标准方法是通过访问setInputCloud()。另外,PCL也可通过setIndices()传递用户感兴趣区域或点云集,而不是整个点云。
点云是复杂的n维结构,它应该能表示不同类型的信息,然而用户应该知道并理解需要传送什么样的信息,从而使代码更易于调试、优化等。
PointXYZI是一个简单的XYZ坐标加intensity的point类型,理想情况下,这四个变量将新建单独一个结构体,并且满足存储对齐,然而,由于point的大部分操作会把data[4]元素设置成0或1(用于变换),不能让intensity与xyz在同一个结构体中,如果这样的话其内容将会被覆盖。
Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值。
PointWithRange除了range包含从所获得的视点到采样点的距离测量值以外,其他与PointXYZI类似。
PointWithViewpoint除了vp_x,vp_y和vp_z以三维点表示所获得的视点以外,其他与PointXYZI类似。
MomentInvariants是一个包含采样曲面上面片三个不变矩的point类型,描述面片上质量的分布情况。
为了增加新的point类型,首先需要定义,例如:
struct MyPointType{
float test;
};
然后,得确保你的代码包含了PCL中特定的类/算法的模板头文件的实现,它将和新point类型MyPointType共同使用。例如,你想使用pcl::PassThrough,则只需要使用下面的代码即可。
#include <pcl/filters/passthrough.h>
#include <pcl/filters/impl/passthrough.hpp>
如果你的代码是库的一部分,可以被他人利用,则需要为你自己的MyPointType类型进行实例化显示。