GrabBag/App/BeltTearing/BeltTearingConfig/Inc/IVrBeltTearingConfig.h

177 lines
4.6 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 IVRBELTTEARINGCONFIG_H
#define IVRBELTTEARINGCONFIG_H
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
#include <QtCore/QMetaType>
/**
* @brief 项目类型枚举
*/
enum class BeltTearingProjectType
{
BeltTearing = 0, // 皮带撕裂检测
BeltMonitoring = 1, // 皮带监控
};
enum class ByteDataType {
Text = 0x01,
Image = 0x02,
ReadConfig = 0x03,
WriteConfig = 0x04,
};
/**
* @brief 服务器信息结构
*/
struct ServerInfo
{
std::string name; // 服务器名称
std::string ip; // 服务器IP地址
int port; // 服务器端口
};
/**
* @brief 皮带撕裂检测参数 - 简化版本
*/
struct BeltTearingParam
{
double scanXScale = 1.0; // 3D扫描仪X方向标尺
double scanYScale = 1.0; // 3D扫描仪Y方向标尺
double differnceBinTh = 1.0; // 一层次分割阈值调整
double tearingMinLen = 5.0; // 最小撕裂长度
double tearingMinGap = 2.0; // 撕裂间距阈值
// 特征提取参数
double sameGapTh = 2.0; // 相同gap阈值
int gapChkWin = 5; // gap检查窗口
};
/**
* @brief 监控参数
*/
struct MonitoringParam
{
int checkInterval = 1000; // 检查间隔(毫秒)
double alertThreshold = 3.0; // 报警阈值
};
/**
* @brief 队列处理参数
*/
struct QueueProcessParam
{
int maxQueueSize = 300; // 最大队列大小
int generationInterval = 100; // 图像生成间隔每N条线生成一次
};
/**
* @brief 相机配置参数
*/
struct CameraParam
{
std::string name = ""; // 相机名称
std::string cameraIP = ""; // 相机IP地址
};
/**
* @brief 调试参数
*/
struct DebugParam
{
bool enableDebug = false; // 是否开启调试模式
bool saveDebugImage = false; // 是否保存调试图像
bool printDetailLog = false; // 是否打印详细日志
std::string debugOutputPath = ""; // 调试输出路径
};
/**
* @brief 算法参数配置结构
*/
struct BeltTearingAlgorithmParams
{
BeltTearingParam beltTearingParam; // 皮带撕裂检测参数
MonitoringParam monitoringParam; // 监控参数
};
/**
* @brief 配置加载结果
*/
struct BeltTearingConfigResult
{
std::vector<ServerInfo> servers; // 服务器列表
BeltTearingAlgorithmParams algorithmParams; // 算法参数
DebugParam debugParam; // 调试参数
BeltTearingProjectType projectType; // 项目类型
std::vector<CameraParam> cameras; // 相机列表
QueueProcessParam queueProcessParam; // 队列处理参数
int serverPort = 5900; // 服务端端口(旧协议)
int tcpPort = 5800; // TCP协议端口新协议-TearingTcpProtocol
};
/**
* @brief 配置改变通知接口
*/
class IVrBeltTearingConfigChangeNotify
{
public:
virtual ~IVrBeltTearingConfigChangeNotify() {}
/**
* @brief 配置数据改变通知
* @param configResult 新的配置数据
*/
virtual void OnConfigChanged(const BeltTearingConfigResult& configResult) = 0;
};
/**
* @brief BeltTearingConfig接口类
*/
class IVrBeltTearingConfig
{
public:
/**
* @brief 虚析构函数
*/
virtual ~IVrBeltTearingConfig() = default;
/**
* @brief 创建实例
* @return 实例
*/
static bool CreateInstance(IVrBeltTearingConfig** ppVrConfig);
/**
* @brief 加载配置文件
* @param filePath 配置文件路径
* @return 加载的配置结果
*/
virtual BeltTearingConfigResult LoadConfig(const std::string& filePath) = 0;
/**
* @brief 保存配置文件
* @param filePath 配置文件路径
* @param configResult 配置结果
* @return 是否保存成功
*/
virtual bool SaveConfig(const std::string& filePath, BeltTearingConfigResult& configResult) = 0;
/**
* @brief 设置配置改变通知回调
* @param notify 通知接口指针
*/
virtual void SetConfigChangeNotify(IVrBeltTearingConfigChangeNotify* notify) = 0;
};
// 声明元类型以便在QVariant中使用
Q_DECLARE_METATYPE(ServerInfo)
Q_DECLARE_METATYPE(BeltTearingParam)
Q_DECLARE_METATYPE(CameraParam)
Q_DECLARE_METATYPE(BeltTearingConfigResult)
#endif // IVRBELTTEARINGCONFIG_H