95 lines
4.0 KiB
C++
95 lines
4.0 KiB
C++
#ifndef LASER_DATA_LOADER_H
|
|
#define LASER_DATA_LOADER_H
|
|
|
|
#include <vector>
|
|
#include <string>
|
|
#include "VZNL_Types.h"
|
|
#include "VrError.h"
|
|
|
|
// 激光数据加载器类
|
|
class LaserDataLoader
|
|
{
|
|
public:
|
|
LaserDataLoader();
|
|
~LaserDataLoader();
|
|
|
|
// 从文件加载激光扫描数据 - 修改为对象向量
|
|
int LoadLaserScanData(const std::string& fileName,
|
|
std::vector<SVzNL3DLaserLine>& laserLines,
|
|
int& lineNum,
|
|
float& scanSpeed,
|
|
int& maxTimeStamp,
|
|
int& clockPerSecond);
|
|
|
|
// 从文件加载RGBD激光扫描数据 - 新增RGBD支持
|
|
int LoadLaserScanData(const std::string& fileName,
|
|
std::vector<SVzNLXYZRGBDLaserLine>& laserLines,
|
|
int& lineNum,
|
|
float& scanSpeed,
|
|
int& maxTimeStamp,
|
|
int& clockPerSecond);
|
|
|
|
// 保存激光扫描数据到文件 - 修改为对象向量
|
|
int SaveLaserScanData(const std::string& fileName,
|
|
const std::vector<SVzNL3DLaserLine>& laserLines,
|
|
int lineNum,
|
|
float scanSpeed,
|
|
int maxTimeStamp,
|
|
int clockPerSecond);
|
|
|
|
// 保存RGBD激光扫描数据到文件 - 新增RGBD支持
|
|
int SaveLaserScanData(const std::string& fileName,
|
|
const std::vector<SVzNLXYZRGBDLaserLine>& laserLines,
|
|
int lineNum,
|
|
float scanSpeed,
|
|
int maxTimeStamp,
|
|
int clockPerSecond);
|
|
|
|
// 释放加载的数据内存 - 修改为对象向量
|
|
void FreeLaserScanData(std::vector<SVzNL3DLaserLine>& laserLines);
|
|
|
|
// 释放RGBD数据内存 - 新增RGBD支持
|
|
void FreeLaserScanData(std::vector<SVzNLXYZRGBDLaserLine>& laserLines);
|
|
|
|
// 获取最后的错误信息
|
|
std::string GetLastError() const { return m_lastError; }
|
|
|
|
private:
|
|
// 读取XYZ格式的激光数据
|
|
SVzNL3DLaserLine* ReadLaserScanPointFromFile_XYZ(const char* fileName,
|
|
int* scanLineNum,
|
|
float* scanV,
|
|
int* dataCalib,
|
|
int* scanMaxStamp,
|
|
int* canClockUnit);
|
|
|
|
// 读取RGBD格式的激光数据 - 新增RGBD支持
|
|
SVzNLXYZRGBDLaserLine* ReadLaserScanPointFromFile_XYZRGB(const char* fileName,
|
|
int* scanLineNum,
|
|
float* scanV,
|
|
int* dataCalib,
|
|
int* scanMaxStamp,
|
|
int* canClockUnit);
|
|
|
|
// 保存激光数据到文件(移除零点)
|
|
void SaveScanDataFile_RemoveZeros(const char* fileName,
|
|
SVzNL3DLaserLine* scanData,
|
|
int lineNum,
|
|
float lineV,
|
|
int maxTimeStamp,
|
|
int clockPerSecond);
|
|
|
|
// 解析文件头信息
|
|
int ParseFileHeader(const std::string& line, int& lineNum);
|
|
|
|
// 解析扫描线信息
|
|
int ParseScanLine(const std::string& line, int& lineIndex, unsigned int& timeStamp, int& pointNum);
|
|
|
|
// 解析3D点信息
|
|
int Parse3DPoint(const std::string& line, float& x, float& y, float& z);
|
|
|
|
std::string m_lastError;
|
|
static const int VZ_LASER_LINE_PT_MAX_NUM = 4096;
|
|
};
|
|
|
|
#endif // LASER_DATA_LOADER_H
|