1. Struct Data IO
int SpaHunter::CountLines(std::string& data_path)
{
std::ifstream ReadFile;
int n = 0;
std::string tmp;
ReadFile.open(data_path, std::ios::in);//ios::in 表示以只读的方式读取文件
if (ReadFile.fail())//文件打开失败:返回0
{
return 0;
}
else//文件存在
{
while (getline(ReadFile, tmp, '\n'))
{
n++;
}
ReadFile.close();
return n;
}
}
IO Struct Data
void SpaHunter::GetSpaceInfo(std::string space_path,
std::vector<PlatInfo>& platinfo,
std::vector<Eigen::Vector3d>& space,
std::vector<double>& space_x,
std::vector<double>& space_y,
std::vector<double>& space_z){
int line_num = CountLines(space_path);
// std::cout<<"line_num =" <<line_num<<std::endl;
std::ifstream pose_file(space_path, std::ios::in);
if(pose_file.is_open()){
for(size_t i=0; i<line_num; ++i){
PlatInfo single_plat_info;
std::string str;
std::getline(pose_file,str);
std::istringstream istring(str);
// string single;
// for(size_t j=0; j<9; ++j){
// istring>>single;
// std::cout<<single<<std::endl;
// // istring>>single;
// }
// std::cout<<" ---------"<<std::endl;
istring>>single_plat_info.time_stamp;
istring>>single_plat_info.position[0];
istring>>single_plat_info.position[1];
istring>>single_plat_info.position[2];
istring>>single_plat_info.quate.x();
istring>>single_plat_info.quate.y();
istring>>single_plat_info.quate.z();
istring>>single_plat_info.quate.w();
istring>>single_plat_info.frame_id;
space.emplace_back(single_plat_info.position);
platinfo.emplace_back(single_plat_info);
}
// std::cout<<"space.size = "<< space.size() <<std::endl;
// std::cout<<"platinfo.size = "<< platinfo.size() <<std::endl;
}
// PrintPlatInfos(platinfo);
for(size_t i=0; i<platinfo.size(); ++i){
space_x.emplace_back(platinfo[i].position[0]);
space_y.emplace_back(platinfo[i].position[1]);
space_z.emplace_back(platinfo[i].position[2]);
}
}
void SavePointCloud(const std::string&filename,
std::vector<Eigen::Vector3d> point_cloud){
std::ofstream out(filename,std::ios::out|std::ios::app);
size_t size =point_cloud.size();
if(out.is_open()){
// out << "ply\n";
// out << "format ascii 1.0\n";
// out << "comment created by C++ WritePly\n";
// out << "element vertex " << size << "\n";
// out << "property float x\n";
// out << "property float y\n";
// out << "property float z\n";
// out << "end_header\n";
for (int i = 0; i < size; i++) {
if(point_cloud[i].y()>0 && point_cloud[i].y()<2300){
out << point_cloud[i].x() << "\t" << point_cloud[i].y() << "\t" << point_cloud[i].z() << "\t\n";
}
}
}
out.close();
}
void loadPcl(std::string path,std::vector<Eigen::Vector3d>& pcl){
int line_num = CountLines(path);
std::cout<<"line_num =" <<line_num<<std::endl;
std::ifstream pose_file(path, std::ios::in);
if(!pose_file.is_open()){
return;
}
for (int i = 0; i < line_num; ++i) {
Eigen::Vector3d point_cloud;
std::string str;
std::getline(pose_file,str);
std::istringstream istring(str);
istring>>point_cloud.x();
istring>>point_cloud.y();
istring>>point_cloud.z();
pcl.emplace_back(point_cloud);
//std::cout<< i<<" " <<point_cloud.transpose()<<std::endl;
}
std::cout<<"pcl.size = "<< pcl.size() <<std::endl;
}
本文介绍了一个C++程序,该程序实现了文件行数计数、空间信息解析及点云数据的读写功能。主要内容包括:计算文件中的行数、获取空间信息并存储为向量、保存点云数据到文件以及从文件中加载点云数据。
551

被折叠的 条评论
为什么被折叠?



