#include "stdafx.h"
#include <iostream>
#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>
#include "lasreader.h"
using namespace std;
int writePCD(string fileName,pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
//pcl::io::savePCDFileASCII(fileName,cloud);
pcl::io::savePCDFileBinary(fileName,*cloud);
return(0);
}
int main (int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);
//read las file
string file_name;
file_name="scan043.las";
FILE *file_in;
file_in=fopen(file_name.c_str(),"rb");
lasreader *lasread;
lasread=new lasreader();
if ( (lasread->open(file_in) == false) || file_in==0 )
{
return 0;
}
float boundingBoxMin[3];
float boundingBoxMax[3];
boundingBoxMin[0] = lasread->header.min_x;
boundingBoxMin[1] = lasread->header.min_y;
boundingBoxMin[2] = lasread->header.min_z;
boundingBoxMax[0] = lasread->header.max_x;
boundingBoxMax[1] = lasread->header.max_y;
boundingBoxMax[2] = lasread->header.max_z;
double midx,midy,midz;
midx=(lasread->header.max_x+lasread->header.min_x)/2;
midy=(lasread->header.max_y+lasread->header.min_y)/2;
midz=(lasread->header.max_z+lasread->header.min_z)/2;
int p_count = lasread->npoints;
lasread->open_skipheader();
//p_count=5;
LASpt pt;
unsigned char r(255), g(15), b(15);
while (lasread->p_count < p_count)
{
if (lasread->read_point(&pt))
{
pcl::PointXYZ basic_point;
basic_point.x = pt.x-midx;
basic_point.y = pt.y-midy;
basic_point.z = pt.z-midz;
basic_cloud_ptr->points.push_back(basic_point);
}
else
{
break;
}
}
//write PCDFile
string PCDfileName="las2pcd043.pcd";
writePCD(PCDfileName,basic_cloud_ptr);
return 0;
}
|