#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); // 获取最后的错误信息 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); // 保存激光数据到文件(移除零点) 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