GrabBag/AppUtils/UICommon/Inc/HandEyeCalibWidget.h

132 lines
3.3 KiB
C
Raw Normal View History

#ifndef HANDEYECALIBWIDGET_H
#define HANDEYECALIBWIDGET_H
#include <QWidget>
#include <QVector>
#include <QString>
#include <QComboBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
/**
* @brief
*/
struct HandEyeCalibCameraInfo
{
int cameraIndex; // 相机索引1-based
QString displayName; // 显示名称
};
/**
* @brief
*/
struct HandEyeCalibData
{
int cameraIndex = 0;
double matrix[16] = {
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
};
bool isCalibrated = false;
};
/**
* @brief
*
* QWidget UI .ui tab/layout
* App IVrConfig
* INI QSettings [CalibMatrixInfo_0] section
*
* UI ComboBox Label 4x4 GridLayout /
*/
class HandEyeCalibWidget : public QWidget
{
Q_OBJECT
public:
explicit HandEyeCalibWidget(QWidget *parent = nullptr);
~HandEyeCalibWidget();
/**
* @brief
*/
void setCameraList(const QVector<HandEyeCalibCameraInfo>& cameras);
/**
* @brief
*/
void setCalibData(int cameraIndex, const double matrix[16], bool isCalibrated);
/**
* @brief
* @return
*/
bool getCalibData(int cameraIndex, double outMatrix[16], bool& outIsCalibrated) const;
/**
* @brief
* @return -1
*/
int currentCameraIndex() const;
/**
* @brief
*/
void setDefaultFilePath(const QString& path);
/**
* @brief
*/
void setMatrixEditable(bool editable);
signals:
/**
* @brief
* @param cameraIndex
* @param matrix 16 double
*/
void calibMatrixLoaded(int cameraIndex, const double* matrix);
/**
* @brief
* @param cameraIndex
* @param matrix 16 double
*/
void saveCalibRequested(int cameraIndex, const double* matrix);
private slots:
void onCameraSelectionChanged(int index);
void onLoadCalibMatrixClicked();
void onSaveCalibMatrixClicked();
private:
void setupUI();
void displayMatrix(const double* matrix);
void clearMatrix();
void displayIdentityMatrix();
void updateCalibStatus(bool isCalibrated);
// 从矩阵编辑框读取当前矩阵值
bool readMatrixFromUI(double outMatrix[16]) const;
// 查找缓存中指定相机的数据
HandEyeCalibData* findCalibData(int cameraIndex);
const HandEyeCalibData* findCalibData(int cameraIndex) const;
private:
QComboBox* m_comboCamera;
QLabel* m_labelStatus;
QLineEdit* m_matrixEdits[4][4]; // 4x4 矩阵编辑框
QPushButton* m_btnLoad;
QPushButton* m_btnSave;
QVector<HandEyeCalibData> m_calibDataCache; // 按相机索引缓存
QString m_defaultFilePath;
bool m_matrixEditable;
};
#endif // HANDEYECALIBWIDGET_H