GrabBag/AppUtils/CloudUtils/Inc/LaserDataLoader.h
2026-01-16 01:04:43 +08:00

75 lines
3.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines,
int& lineNum,
float& scanSpeed,
int& maxTimeStamp,
int& clockPerSecond);
// 保存激光扫描数据到文件 - 统一接口,支持两种类型的数据
int SaveLaserScanData(const std::string& fileName,
const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines,
int lineNum,
float scanSpeed,
int maxTimeStamp,
int clockPerSecond);
int DebugSaveLaser(std::string fileName, std::vector<std::vector<SVzNL3DPosition>> xyzData);
// 释放统一格式数据内存
void FreeLaserScanData(std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines);
// 释放转换后的SVzNL3DLaserLine数据内存
void FreeConvertedData(std::vector<SVzNL3DLaserLine>& xyzData);
// 释放转换后的SVzNLXYZRGBDLaserLine数据内存
void FreeConvertedData(std::vector<SVzNLXYZRGBDLaserLine>& rgbdData);
// 转换统一格式数据为SVzNL3DLaserLine格式
int ConvertToSVzNL3DLaserLine(const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& unifiedData,
std::vector<SVzNL3DLaserLine>& xyzData);
// 转换统一格式数据为SVzNLXYZRGBDLaserLine格式
int ConvertToSVzNLXYZRGBDLaserLine(const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& unifiedData,
std::vector<SVzNLXYZRGBDLaserLine>& rgbdData);
// 转换统一格式数据为std::vector<std::vector<SVzNL3DPosition>>格式
// validPointCount: 可选输出参数返回有效点个数xyz全非0的点
int ConvertToSVzNL3DPosition(const std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& unifiedData,
std::vector<std::vector<SVzNL3DPosition>>& scanLines,
size_t* validPointCount = nullptr);
// 获取最后的错误信息
std::string GetLastError() const { return m_lastError; }
private:
// 读取XYZ格式的激光数据
int _ParseLaserScanPoint(const std::string& data, SVzNL3DPosition& sData, SVzNL2DPosition& s2DData);
// 读取RGBD格式的激光数据 - 新增RGBD支持
int _ParseLaserScanPoint(const std::string& data, SVzNLPointXYZRGBA& sData, SVzNL2DLRPoint& s2DData);
// 获取激光数据类型
int _GetLaserType(const std::string& fileName, EVzResultDataType& eDataType);
std::string m_lastError;
static const int VZ_LASER_LINE_PT_MAX_NUM = 4096;
};
#endif // LASER_DATA_LOADER_H