#ifndef IVRCONFIG_H #define IVRCONFIG_H #include #include #include #include #include "VrCommonConfig.h" // 使用公共配置结构体定义 /** * @brief 项目类型枚举 */ enum class ProjectType { LapWeld = 0, // 激光焊接 DirectBag = 1, // 带方向的编织袋 }; /** * @brief 项目类型字符串转换函数 */ inline std::string ProjectTypeToString(ProjectType type) { switch (type) { case ProjectType::LapWeld: return "LapWeld"; case ProjectType::DirectBag: return "DirectBag"; default: return "Unknown"; } } /** * @brief 字符串转项目类型函数 */ inline ProjectType StringToProjectType(const std::string& str) { if (str == "LapWeld" || str == "0") { return ProjectType::LapWeld; } else if (str == "DirectBag" || str == "1") { return ProjectType::DirectBag; } else { return ProjectType::LapWeld; // 默认返回激光焊接 } } // DeviceInfo, SerialConfig 已在 VrCommonConfig.h 中定义 /** * @brief 离群点滤波参数 */ struct VrOutlierFilterParam { double continuityTh = 20.0; // 连续性阈值 int outlierTh = 5; // 离群点判断阈值 }; /** * @brief 斜坡参数 */ struct VrSlopeParam { double LSlopeZWin = 10.0; // 斜坡计算的窗口长度 double validSlopeH = 5.0; // 有效斜坡高度 double minLJumpH = 3.0; // 最小L跳跃高度 double minEndingGap = 2.0; // 最小结束间隔 }; /** * @brief 拐角参数 */ struct VrCornerParam { double cornerTh = 25; // 拐角阈值 double scale = 4; // 计算方向角的窗口比例因子 double minEndingGap = 6; // Y方向最小结束间隔 double minEndingGap_z = 1.5; // Z方向最小结束间隔 double jumpCornerTh_1 = 10; // 跳跃拐角阈值1 double jumpCornerTh_2 = 25; // 跳跃拐角阈值2 }; /** * @brief 树生长参数 */ struct VrTreeGrowParam { int maxLineSkipNum = 5; // 生长时允许跳过的最大线条数 double yDeviation_max = 1.0; // 生长时允许的最大Y偏差 double maxSkipDistance = 5.0; // 最大跳跃距离 double zDeviation_max = 2; // 生长时允许的最大Z偏差 double minLTypeTreeLen = 30.0; // L型树的最小长度 double minVTypeTreeLen = 30.0; // V型树的最小长度 }; /** * @brief 焊接扫描模式枚举 */ enum class WeldScanMode { ScanMode_V = 0, // 垂直线垂直方向扫描 ScanMode_H = 1, // 水平线平行水平扫描 ScanMode_Both = 2 // 既有垂直扫描,也有水平扫描 }; /** * @brief 焊接扫描模式字符串转换函数 */ inline std::string WeldScanModeToString(WeldScanMode mode) { switch (mode) { case WeldScanMode::ScanMode_V: return "ScanMode_V"; case WeldScanMode::ScanMode_H: return "ScanMode_H"; case WeldScanMode::ScanMode_Both: return "ScanMode_Both"; default: return "Unknown"; } } /** * @brief 字符串转焊接扫描模式函数 */ inline WeldScanMode StringToWeldScanMode(const std::string& str) { if (str == "ScanMode_V" || str == "0") { return WeldScanMode::ScanMode_V; } else if (str == "ScanMode_H" || str == "1") { return WeldScanMode::ScanMode_H; } else if (str == "ScanMode_Both" || str == "2") { return WeldScanMode::ScanMode_Both; } else { return WeldScanMode::ScanMode_V; // 默认返回垂直扫描 } } /** * @brief 激光焊接参数 */ struct VrLapWeldParam { double lapHeight = 2.0; // 搭接厚度 double weldMinLen = 2.0; // 最小焊缝长度,用于过滤可能的虚假焊缝 int weldRefPoints = 2; // 输出的直线焊缝的参考点,默认是2个(起点和终点) WeldScanMode scanMode = WeldScanMode::ScanMode_V; // 焊接扫描模式 }; // VrCameraPlaneCalibParam, VrPlaneCalibParam, VrDebugParam 已在 VrCommonConfig.h 中定义 /** * @brief 算法参数配置结构 */ struct VrAlgorithmParams { VrOutlierFilterParam filterParam; // 滤波参数 VrSlopeParam slopeParam; // 斜坡参数 VrCornerParam cornerParam; // 拐角参数 VrTreeGrowParam growParam; // 增长参数 VrPlaneCalibParam planeCalibParam; // 平面校准参数 VrLapWeldParam lapWeldParam; // 激光焊接参数 }; /** * @brief 配置加载结果 */ struct ConfigResult { std::vector cameraList; std::vector deviceList; VrAlgorithmParams algorithmParams; // 算法参数 VrDebugParam debugParam; // 调试参数 SerialConfig serialConfig; // 串口配置 ProjectType projectType; // 项目类型 }; // IVrConfigChangeNotify 已在 VrCommonConfig.h 中定义 /** * @brief VrConfig接口类 */ class IVrConfig { public: /** * @brief 虚析构函数 */ virtual ~IVrConfig() {} /** * @brief 创建实例 * @return 实例 */ static bool CreateInstance(IVrConfig** ppVrConfig); /** * @brief 加载配置文件 * @param filePath 配置文件路径 * @return 加载的配置结果 */ virtual ConfigResult LoadConfig(const std::string& filePath) = 0; /** * @brief 保存配置文件 * @param filePath 配置文件路径 * @param configResult 配置结果 * @return 是否保存成功 */ virtual bool SaveConfig(const std::string& filePath, ConfigResult& configResult) = 0; /** * @brief 设置配置改变通知回调 * @param notify 通知接口指针 */ virtual void SetConfigChangeNotify(IVrConfigChangeNotify* notify) = 0; }; #endif // IVRCONFIG_H