#ifndef WORKPIECEPOSITIONPRESENTER_H #define WORKPIECEPOSITIONPRESENTER_H #include #include #include #include #include #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& marks, qint64 timestamp, int errorCode); void OnMarkConnectionChanged(bool connected); int CalculateWorkpieceCenter(const std::vector& 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 m_lastMarks; }; #endif // WORKPIECEPOSITIONPRESENTER_H