GrabBag/GrabBagApp/Utils/Inc/LaserDataLoader.h

68 lines
2.5 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);
// 保存激光扫描数据到文件 - 修改为对象向量
int SaveLaserScanData(const std::string& fileName,
const std::vector<SVzNL3DLaserLine>& laserLines,
int lineNum,
float scanSpeed,
int maxTimeStamp,
int clockPerSecond);
// 释放加载的数据内存 - 修改为对象向量
void FreeLaserScanData(std::vector<SVzNL3DLaserLine>& 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