#include<pcl/visualization/cloud_viewer.h>//可视化必须包含的头文件
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>//pcd 读写类相关的头文件。
#include<pcl/io/ply_io.h>
#include<pcl/point_types.h> //PCL中支持的点类型头文件。

#include<iostream>//标准C++库中的输入输出类相关头文件。
#include<string>

using namespace std;

boost::shared_ptr<pcl::visualization::PCLVisualizer> SimpleVisual(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("Simple Viewer"));	//创建一个窗口;创建一个PCLVisualizer的可视化类,这个可视化窗口的名字叫:Simple Viewer

//对两种名字的解释:第一种:Simple Viewer这是代表窗口的名字;第二种:Simple Cloud,代表点云的名字
	viewer->setBackgroundColor(0, 0, 0);	//设置背景颜色,里面的数字代表R、G、B三种颜色
	viewer->addPointCloud<pcl::PointXYZ>(cloud, "Simple Cloud");	//添加一个cloud点云,它的小名为:Simple Cloud,后续如果对点云进行设置颜色或者大小都要以此名字来设置
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "Simple Cloud");	//设置点云呈现的属性,括号中的意思为:设置点云的大小为:1,Simple Cloud仍然为该点云的名字;补充:若为多窗口则需要在"Simple Cloud"后面加上窗口名字
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 250, 250, 0, "Simple Cloud");//设置点云的颜色,通过R、G、B三原色来设置 注:17/18行分别是对点云的大小和颜色进行设置
	viewer->addCoordinateSystem(1.0);	//添加一个坐标系统,也就是x,y,z三个坐标轴,比例尺设为1.0 // 注:设置比例尺寸会改变坐标轴的大小,若太大则会导致点云图显得过小,不易于观察
	viewer->initCameraParameters();	//初始化相机参数,让用户在默认的角度下观察点云,目前对此句的功能尚不明确
	return viewer;
}

int main()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

	string filepath = "bunny.pcd";//读取PCD文件,若该文件在工程目录下则可以直接写文件名,若不在工程目录下,则以绝对路径填入
	if (-1 == pcl::io::loadPCDFile(filepath, *cloud)) //打开点云文件
	{
		cout << "error input!" << endl;
		return -1;
	}

	cout << cloud->points.size() << endl;
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
	viewer = SimpleVisual(cloud);

	while (!viewer->wasStopped())//该while循环作用是让点云显示窗口一直显示
	{
		viewer->spinOnce(100);	//100ms刷新一次屏幕
		std::this_thread::sleep_for(std::chrono::microseconds(100000));
		//boost::this_thread::sleep(boost::posix_time::microseconds(100000));
		//sleep(100);
	}

	return 0;
}
// 设置多窗口的三个语句
//int v1; //这是第一个窗口名字
//viewer->createViewPort (0.0, 0.0, 0.5, 0.5, v1); //(Xmin,Ymin,Xmax,Ymax)设置窗口坐标
//viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1); //添加一个cloud点云,名字为:"sample cloud",显示窗口为:v1

存在疑问:设置初始化相机参数的目的

待总结:头文件的使用

下一篇介绍:多窗口的可视化

学习心得:学习过程中还是需要研究每一句代码的意思,如何修改、所在位置,前后语句的搭配使用等