#include "visualizer.h"
/**
* @brief 显示点云
* @param [in] point_cloud 待显示点云
* @param [in] show_normals 是否显示法向量
* @return
*/
void showPointCloud(const pcl::PointCloud<pcl::PointNormal>::Ptr& point_cloud, bool show_normals)
{
pcl::visualization::PCLVisualizer viewer; // 定义对象
viewer.setBackgroundColor(0, 0, 0); // 设置背景颜色,rgb
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointNormal> red(point_cloud, 255, 0, 0); // rgb
// 将点云设置颜色,默认白色
viewer.addPointCloud<pcl::PointNormal>(point_cloud, red, "point_cloud");
if (show_normals) {
int level = 5; // 多少条法向量集合显示成一条
float scale = 2.0; // 法向量长度
viewer.addPointCloudNormals<pcl::PointNormal>(point_cloud, level, scale, "point_normals");
}
viewer.spin(); // 阻塞式显示
}
/**
* @brief 同一个视口,显示两个点云
* @param [in] point_cloud_1 待显示点云1(红色)
* @param [in] point_cloud_2 待显示点云1(绿色)
* @return
*/
void showPointCloud(const pcl::PointCloud<pcl::PointNormal>::Ptr& point_cloud_1,
const pcl::PointCloud<pcl::PointNormal>::Ptr& point_cloud_2)
{
pcl::visualization::PCLVisualizer viewer; // 定义对象
viewer.setBackgroundColor(0, 0, 0); // 设置背景颜色,rgb
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointNormal> red(point_cloud_1, 255, 0, 0); // rgb
// 将点云设置颜色,默认白色
viewer.addPointCloud<pcl::PointNormal>(point_cloud_1, red, "point_cloud_1");
//将点按照大小为3显示
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "point_cloud_1");
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointNormal> green(point_cloud_2, 0, 255, 0); // rgb
// 将点云设置颜色,默认白色
viewer.addPointCloud<pcl::PointNormal>(point_cloud_2, green, "point_cloud_2");
//将点按照大小为5显示
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5, "point_cloud_2");
viewer.spin(); // 阻塞式显示
}
/**
* @brief 分左右两个视口,显示两个点云
* @param [in] point_cloud_1 待显示点云1(红色)
* @param [in] point_cloud_2 待显示点云1(绿色)
* @return
* @note 如果不显示按下r键
*/
void showPointCloud2ViewPort(const pcl::PointCloud<pcl::PointNormal>::Ptr& point_cloud_1,
const pcl::PointCloud<pcl::PointNormal>::Ptr& point_cloud_2)
{
// 定义对象
pcl::visualization::PCLVisualizer viewer;
int v1(1); // viewport
viewer.createViewPort(0.0, 0.0, 0.5, 1.0, v1);
viewer.setBackgroundColor(0, 0, 0, v1);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointNormal> red(point_cloud_1, 255, 0 , 0); // rgb
viewer.addPointCloud<pcl::PointNormal>(point_cloud_1, red, "point_cloud_1", v1);
int v2(2);// viewport
viewer.createViewPort(0.5, 0.0, 1.0, 1.0, v2);
viewer.setBackgroundColor(0, 0, 0, v2);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointNormal> green(point_cloud_2, 0, 255, 0); // rgb
viewer.addPointCloud<pcl::PointNormal>(point_cloud_2, green, "point_cloud_2", v2);
viewer.spin();
}
/**
* @brief 显示网格数据
* @param [in] poly_mesh 待显示网格数据
* @return
*/
void showPolygonMesh(const pcl::PolygonMesh::Ptr& poly_mesh)
{
pcl::visualization::PCLVisualizer viewer; // 定义对象
viewer.addPolygonMesh(*poly_mesh, "poly_mesh");
viewer.spin();
}