2025-07-23 01:35:14 +08:00
|
|
|
#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();
|
|
|
|
|
|
2025-08-05 22:52:10 +08:00
|
|
|
// 从文件加载激光扫描数据 - 统一接口,根据文件格式自动判断数据类型
|
2025-07-23 01:35:14 +08:00
|
|
|
int LoadLaserScanData(const std::string& fileName,
|
2025-08-05 22:52:10 +08:00
|
|
|
std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines,
|
2025-07-23 01:35:14 +08:00
|
|
|
int& lineNum,
|
|
|
|
|
float& scanSpeed,
|
|
|
|
|
int& maxTimeStamp,
|
|
|
|
|
int& clockPerSecond);
|
|
|
|
|
|
2025-08-05 22:52:10 +08:00
|
|
|
// 保存激光扫描数据到文件 - 统一接口,支持两种类型的数据
|
2025-07-23 01:35:14 +08:00
|
|
|
int SaveLaserScanData(const std::string& fileName,
|
2025-08-05 22:52:10 +08:00
|
|
|
const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines,
|
2025-07-23 01:35:14 +08:00
|
|
|
int lineNum,
|
|
|
|
|
float scanSpeed,
|
|
|
|
|
int maxTimeStamp,
|
|
|
|
|
int clockPerSecond);
|
|
|
|
|
|
2025-08-05 22:52:10 +08:00
|
|
|
// 释放统一格式数据内存
|
|
|
|
|
void FreeLaserScanData(std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines);
|
2025-07-23 01:35:14 +08:00
|
|
|
|
2025-08-05 22:52:10 +08:00
|
|
|
// 转换统一格式数据为SVzNL3DLaserLine格式
|
|
|
|
|
int ConvertToSVzNL3DLaserLine(const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& unifiedData,
|
|
|
|
|
std::vector<SVzNL3DLaserLine>& xyzData);
|
2025-07-23 01:35:14 +08:00
|
|
|
|
2025-08-05 22:52:10 +08:00
|
|
|
// 转换统一格式数据为SVzNLXYZRGBDLaserLine格式
|
|
|
|
|
int ConvertToSVzNLXYZRGBDLaserLine(const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& unifiedData,
|
|
|
|
|
std::vector<SVzNLXYZRGBDLaserLine>& rgbdData);
|
|
|
|
|
|
|
|
|
|
// 释放转换后的SVzNL3DLaserLine数据内存
|
|
|
|
|
void FreeConvertedData(std::vector<SVzNL3DLaserLine>& xyzData);
|
|
|
|
|
|
|
|
|
|
// 释放转换后的SVzNLXYZRGBDLaserLine数据内存
|
|
|
|
|
void FreeConvertedData(std::vector<SVzNLXYZRGBDLaserLine>& rgbdData);
|
2025-07-23 01:35:14 +08:00
|
|
|
|
|
|
|
|
// 获取最后的错误信息
|
|
|
|
|
std::string GetLastError() const { return m_lastError; }
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
// 读取XYZ格式的激光数据
|
2025-08-05 22:52:10 +08:00
|
|
|
int _ParseLaserScanPoint(const std::string& data, SVzNL3DPosition& sData, SVzNL2DPosition& s2DData);
|
2025-07-23 01:35:14 +08:00
|
|
|
|
|
|
|
|
// 读取RGBD格式的激光数据 - 新增RGBD支持
|
2025-08-05 22:52:10 +08:00
|
|
|
int _ParseLaserScanPoint(const std::string& data, SVzNLPointXYZRGBA& sData, SVzNL2DLRPoint& s2DData);
|
2025-07-23 01:35:14 +08:00
|
|
|
|
2025-08-05 22:52:10 +08:00
|
|
|
// 获取激光数据类型
|
|
|
|
|
int _GetLaserType(const std::string& fileName, EVzResultDataType& eDataType);
|
2025-07-23 01:35:14 +08:00
|
|
|
|
|
|
|
|
std::string m_lastError;
|
|
|
|
|
static const int VZ_LASER_LINE_PT_MAX_NUM = 4096;
|
|
|
|
|
};
|
|
|
|
|
|
2025-06-17 00:37:05 +08:00
|
|
|
#endif // LASER_DATA_LOADER_H
|