#ifndef LASER_DATA_LOADER_H #define LASER_DATA_LOADER_H #include #include #include "VZNL_Types.h" #include "VrError.h" // 激光数据加载器类 class LaserDataLoader { public: LaserDataLoader(); ~LaserDataLoader(); // 从文件加载激光扫描数据 - 统一接口,根据文件格式自动判断数据类型 int LoadLaserScanData(const std::string& fileName, std::vector>& laserLines, int& lineNum, float& scanSpeed, int& maxTimeStamp, int& clockPerSecond); // 保存激光扫描数据到文件 - 统一接口,支持两种类型的数据 int SaveLaserScanData(const std::string& fileName, const std::vector>& laserLines, int lineNum, float scanSpeed, int maxTimeStamp, int clockPerSecond); // 释放统一格式数据内存 void FreeLaserScanData(std::vector>& laserLines); // 释放转换后的SVzNL3DLaserLine数据内存 void FreeConvertedData(std::vector& xyzData); // 释放转换后的SVzNLXYZRGBDLaserLine数据内存 void FreeConvertedData(std::vector& rgbdData); // 转换统一格式数据为SVzNL3DLaserLine格式 int ConvertToSVzNL3DLaserLine(const std::vector>& unifiedData, std::vector& xyzData); // 转换统一格式数据为SVzNLXYZRGBDLaserLine格式 int ConvertToSVzNLXYZRGBDLaserLine(const std::vector>& unifiedData, std::vector& rgbdData); // 转换统一格式数据为std::vector>格式 int ConvertToSVzNL3DPosition(const std::vector>& unifiedData, std::vector>& scanLines); // 获取最后的错误信息 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