63 lines
2.2 KiB
C++
63 lines
2.2 KiB
C++
#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
|