GrabBag/AppUtils/AppCommon/Inc/IVisionApplicationStatus.h

156 lines
4.5 KiB
C
Raw Normal View History

#ifndef IVISIONAPPLICATIONSTATUS_H
#define IVISIONAPPLICATIONSTATUS_H
#include <string>
#include <functional>
#include <vector>
#include <QImage>
#include <QMetaType>
/**
* @brief
*
*
*/
enum class WorkStatus {
InitIng, // 初始化中
Ready, // 准备就绪
Working, // 正在工作
Completed, // 监测完成
Error // 设备异常
};
/**
* @brief
* @param status
* @return
*/
inline std::string WorkStatusToString(WorkStatus status) {
switch (status) {
case WorkStatus::InitIng: return "初始化中";
case WorkStatus::Ready: return "准备就绪";
case WorkStatus::Working: return "正在工作";
case WorkStatus::Completed: return "检测完成";
case WorkStatus::Error: return "设备异常";
default: return "未知状态";
}
}
/**
* @brief
*
* @tparam T double
*
*
* @code
* using GrabBagPosition = PositionData<double>;
* using LapWeldPosition = PositionData<double>;
* @endcode
*/
template<typename T = double>
struct PositionData {
T x;
T y;
T z;
T roll;
T pitch;
T yaw;
// 默认构造函数
PositionData() : x(0), y(0), z(0), roll(0), pitch(0), yaw(0) {}
// 带参构造函数
PositionData(T _x, T _y, T _z, T _roll, T _pitch, T _yaw)
: x(_x), y(_y), z(_z), roll(_roll), pitch(_pitch), yaw(_yaw) {}
// 拷贝构造函数和赋值运算符
PositionData(const PositionData&) = default;
PositionData& operator=(const PositionData&) = default;
};
// 常用的坐标类型别名
using VisionPosition = PositionData<double>;
/**
* @brief
*
* @tparam PositionType GrabBagPosition, LapWeldPosition
*
*
* @code
* using GrabBagDetectionResult = DetectionResultData<GrabBagPosition>;
* using LapWeldDetectionResult = DetectionResultData<LapWeldPosition>;
* @endcode
*/
template<typename PositionType>
struct DetectionResultData {
QImage image;
std::vector<PositionType> positions;
int cameraIndex = 1; // 相机索引默认为1第一个相机
// 默认构造函数
DetectionResultData() = default;
// 拷贝构造函数和赋值运算符
DetectionResultData(const DetectionResultData&) = default;
DetectionResultData& operator=(const DetectionResultData&) = default;
};
// 常用的检测结果类型别名
using VisionDetectionResult = DetectionResultData<VisionPosition>;
/**
* @brief
*
* @tparam DetectionResultType DetectionResultData<GrabBagPosition>
*
*
*
*
*
* @code
* class IYGrabBagStatus : public IVisionApplicationStatus<DetectionResultData<GrabBagPosition>> {
* public:
* // 实现所有虚函数...
* };
* @endcode
*/
template<typename DetectionResultType>
class IVisionApplicationStatus
{
public:
virtual ~IVisionApplicationStatus() = default;
// 状态文字回调
virtual void OnStatusUpdate(const std::string& statusMessage) = 0;
// 算法监测结果回调
virtual void OnDetectionResult(const DetectionResultType& result) = 0;
// 相机状态回调
virtual void OnCamera1StatusChanged(bool isConnected) = 0;
virtual void OnCamera2StatusChanged(bool isConnected) = 0;
// 机械臂连接状态回调
virtual void OnRobotConnectionChanged(bool isConnected) = 0;
// 串口连接状态回调
virtual void OnSerialConnectionChanged(bool isConnected) = 0;
// 相机个数回调
virtual void OnCameraCountChanged(int cameraCount) = 0;
// 工作状态回调
virtual void OnWorkStatusChanged(WorkStatus status) = 0;
};
// 为常用类型注册Qt元类型使其能够在信号槽中传递
// 注意:各应用仍需在自己的代码中调用 qRegisterMetaType 注册自定义的Position类型
// 声明Qt元类型
Q_DECLARE_METATYPE(WorkStatus)
Q_DECLARE_METATYPE(VisionPosition)
Q_DECLARE_METATYPE(VisionDetectionResult)
#endif // IVISIONAPPLICATIONSTATUS_H