63 lines
2.2 KiB
C
Raw Normal View History

2025-12-10 00:01:32 +08:00
#ifndef WORKPIECEPOSITIONPRESENTER_H
#define WORKPIECEPOSITIONPRESENTER_H
#include <QObject>
#include <QTimer>
#include <mutex>
#include <vector>
#include <memory>
#include "IYWorkpiecePositionStatus.h"
#include "IBinocularMarkReceiver.h"
#include "IEpicEyeDevice.h"
#include "IVrConfig.h"
class WorkpiecePositionPresenter : public QObject
{
Q_OBJECT
public:
explicit WorkpiecePositionPresenter(QObject *parent = nullptr);
~WorkpiecePositionPresenter();
int Init();
void SetStatusCallback(IYWorkpiecePositionStatus* pStatus);
int StartDetection();
int StopDetection();
IVrConfig* GetConfigManager() { return m_pConfig; }
private slots:
void onMarkReconnectTimeout();
void onEpicEyeReconnectTimeout();
private:
int InitConfig();
int InitBinocularMarkReceiver();
int InitEpicEyeDevice();
void OnMarkResult(const std::vector<VrMark3D>& marks, qint64 timestamp, int errorCode);
void OnMarkConnectionChanged(bool connected);
int CalculateWorkpieceCenter(const std::vector<VrMark3D>& marks, const PointCloudData& pointCloud, WorkpieceCenterPosition& centerPosition);
void UpdateWorkStatus(WorkStatus status);
void UpdateStatusMessage(const std::string& message);
int ConnectToBinocularMark();
int ConnectToEpicEye();
private:
IYWorkpiecePositionStatus* m_pStatusCallback;
IVrConfig* m_pConfig;
ConfigResult m_configResult;
IBinocularMarkReceiver* m_pMarkReceiver;
IEpicEyeDevice* m_pEpicEyeDevice;
std::string m_binocularMarkIp;
quint16 m_binocularMarkPort;
std::string m_epicEyeIp;
bool m_bMarkConnected;
bool m_bEpicEyeConnected;
QTimer* m_pMarkReconnectTimer;
QTimer* m_pEpicEyeReconnectTimer;
bool m_bDetecting;
std::mutex m_mutex;
std::vector<VrMark3D> m_lastMarks;
};
#endif // WORKPIECEPOSITIONPRESENTER_H