#include
#include
#include
#include
#include
#include
#include
#include
#include "las_file.h"
//加入自己的数据类型
using namespace std;
int main()
{
int i = 0;
CLasOperator clas;
clas.readLasFile("dragon.las");
std::vector &point3d = clas.getPointData();
pcl::PointCloud::Ptr cloud (new pcl::PointCloud);
cloud->points.resize (point3d.size());
for(i = 0;i < point3d.size();i++)
{
cloud->points[i].x = point3d[i].x;
cloud->points[i].y = point3d[i].y;
cloud->points[i].z = point3d[i].z;
}
pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");
viewer.showCloud(cloud);
while(!viewer.wasStopped())
{
}
}
根据自己所写的文件用结构体将点云数据读取出来,然后再赋值给新的结构体保存!!新的结构体就是点云的类型,才能满足模板类的需求
如果要自己添加新的类型,比较麻烦,要满足模版的相关定义才行,所以用以上的方法来进行实现
#include
#include
#include
#include
#include "box3d.h"
#include "las_file.h"
int user_data;
void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
//viewer.removeCoordinateSystem();
viewer.setBackgroundColor (1.0, 0, 0);
//viewer.setFullScreen(true);
pcl::PointXYZ o;
o.x = 0;
o.y = 0;
o.z = 0;
viewer.addSphere (o, 0.05, "sphere", 0);
std::cout << "i only run once" << std::endl;
}
void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = 0;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape ("text", 0);
viewer.addText (ss.str(), 200, 300, "text", 0);
//FIXME: possible race condition here:
user_data++;
}
int main ()
{
int i = 0;
CLasOperator clas;
clas.readLasFile("dragon.las");
std::vector &point3d = clas.getPointData();
//建立Box 对坐标进行平移
//RBox3D box(point3d.begin(),point3d.end());
//double translatex = (box.x_max()+box.x_min())*0.5;
//double translatey = (box.y_max()+box.y_min())*0.5;
//double translatez = (box.z_max()+box.z_min())*0.5;
/*cout<::Ptr cloud (new pcl::PointCloud);
cloud->points.resize (point3d.size());
for(i = 0;i < point3d.size();i++)
{
cloud->points[i].x = point3d[i].x ;
cloud->points[i].y = point3d[i].y ;
cloud->points[i].z = point3d[i].z ;
}
pcl::visualization::CloudViewer viewer("Cloud Viewer");
//showCloud函数是同步的,在此处等待直到渲染显示为止
viewer.showCloud(cloud);
//该注册函数在可视化时只调用一次
viewer.runOnVisualizationThreadOnce (viewerOneOff);
//该注册函数在渲染输出时每次都调用
viewer.runOnVisualizationThread (viewerPsycho);
while (!viewer.wasStopped ())
{
//在此处可以添加其他处理
user_data++;
}
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include "las_file.h"
//加入自己的数据类型
using namespace std;
//
//void viewOneOff(pcl::visualization::PCLVisualizer& viewer)
//{
// viewer.setBackgroundColor(1,1,1);
//}
//可视化单个点云
boost::shared_ptr simpleVis (pcl::PointCloud::ConstPtr cloud)
{
//创建3D窗口并添加点云
boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (0.5,0.5,0.5);
viewer->addPointCloud (cloud, "sample cloud");
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
viewer->addCoordinateSystem (0.1);
viewer->initCameraParameters ();
return (viewer);
}
//可视化点云颜色特征
boost::shared_ptr rgbVis (pcl::PointCloud::ConstPtr cloud)
{
//创建3D窗口并添加点云
boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (1, 1, 1);
pcl::visualization::PointCloudColorHandlerRGBField rgb(cloud);
viewer->addPointCloud (cloud, rgb, "sample cloud");
//viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
//viewer->addCoordinateSystem (1.0);
viewer->initCameraParameters ();
return (viewer);
}
//
boost::shared_ptr customColourVis (pcl::PointCloud::ConstPtr cloud)
{
//创建3D窗口并添加点云
boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (1, 1, 1);
pcl::visualization::PointCloudColorHandlerCustom single_color(cloud, 0, 255, 0);
viewer->addPointCloud (cloud, single_color, "sample cloud");
//viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
//viewer->addCoordinateSystem (1.0);
viewer->initCameraParameters ();
return (viewer);
}
boost::shared_ptr shapesVis (pcl::PointCloud::ConstPtr cloud)
{
//创建3D窗口并添加点云
boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (255, 255, 255);
pcl::visualization::PointCloudColorHandlerRGBField rgb(cloud);
viewer->addPointCloud (cloud, rgb, "sample cloud");
//viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
viewer->addCoordinateSystem (0.05);
viewer->initCameraParameters ();
//在点云上添加直线和球体模型
viewer->addLine (cloud->points[0],
cloud->points[cloud->size() - 1], "line");
//0.2为半径 后面为颜色
viewer->addSphere (cloud->points[0], 0.02, 0.5, 0.5, 0.0, "sphere");
//在其他位置添加基于模型参数的平面及圆锥体
pcl::ModelCoefficients coeffs;
//values为一个矩阵
coeffs.values.push_back (0.0);
coeffs.values.push_back (0.0);
coeffs.values.push_back (0.02);
coeffs.values.push_back (0.0);
viewer->addPlane (coeffs, "plane");
coeffs.values.clear ();
coeffs.values.push_back (0.3);
coeffs.values.push_back (0.3);
coeffs.values.push_back (0.0);
coeffs.values.push_back (0.0);
coeffs.values.push_back (1.0);
coeffs.values.push_back (0.0);
coeffs.values.push_back (5.0);
viewer->addCone (coeffs, "cone");
return (viewer);
}
//显示法向量
boost::shared_ptr normalsVis (pcl::PointCloud::ConstPtr cloud,
pcl::PointCloud::ConstPtr normals)
{
//创建3D窗口并添加点云其包括法线
boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (255, 255, 255);
pcl::visualization::PointCloudColorHandlerRGBField rgb(cloud);
viewer->addPointCloud (cloud, rgb, "sample cloud");
//viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
//法向量可以显示颜色吗?
viewer->addPointCloudNormals (cloud, normals, 500, 0.005, "normals");
//viewer->addCoordinateSystem (1.0);
viewer->initCameraParameters ();
return (viewer);
}
int main()
{
int i = 0;
CLasOperator clas;
clas.readLasFile("dragon.las");
std::vector &point3d = clas.getPointData();
//pcl::PointCloud::Ptr cloud (new pcl::PointCloud);
//使用智能指针效果最好
boost::shared_ptr> cloud(new pcl::PointCloud);
boost::shared_ptr> normals(new pcl::PointCloud);
//pcl::PointCloud::Ptr normals(new pcl::PointCloud);
cloud->points.resize (point3d.size());
normals->points.resize(point3d.size());
for(i = 0;i < point3d.size();i++)
{
cloud->points[i].x = point3d[i].x;
cloud->points[i].y = point3d[i].y;
cloud->points[i].z = point3d[i].z;
cloud->points[i].r = 255;
normals->points[i].normal_x = 1;
normals->points[i].normal_y = 1;
normals->points[i].normal_z = 1;
}
boost::shared_ptr viewer;
viewer = shapesVis(cloud);
//viewer = rgbVis(cloud);
//viewer = simpleVis(cloud);
//viewer = customColourVis(cloud);
//viewer = normalsVis(cloud,normals);
//pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");
//viewer.showCloud(cloud);
//viewer.runOnVisualizationThreadOnce(viewOneOff);
//while(!viewer.wasStopped())
//{
//}
while (!viewer->wasStopped ())
{
viewer->spinOnce(100);
}
}