GrabBag/Tools/CalibView/Inc/CalibDataWidget.h
2026-02-18 15:11:41 +08:00

201 lines
4.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef CALIBDATAWIDGET_H
#define CALIBDATAWIDGET_H
#include <QWidget>
#include <QTableWidget>
#include <QPushButton>
#include <QComboBox>
#include <QGroupBox>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QLabel>
#include <vector>
#include "HandEyeCalibTypes.h"
/**
* @brief 标定数据输入控件
* 支持 Eye-To-Hand、Eye-In-Hand 和 TCP 三种模式的数据输入
*/
class CalibDataWidget : public QWidget
{
Q_OBJECT
public:
explicit CalibDataWidget(QWidget* parent = nullptr);
~CalibDataWidget() override;
/**
* @brief 获取 Eye-To-Hand 标定数据
*/
void getEyeToHandData(std::vector<HECPoint3D>& eyePoints,
std::vector<HECPoint3D>& robotPoints) const;
/**
* @brief 获取 Eye-In-Hand 标定数据
*/
void getEyeInHandData(std::vector<HECEyeInHandData>& calibData) const;
/**
* @brief 获取当前标定模式
*/
HECCalibrationType getCalibType() const;
/**
* @brief 清除所有数据
*/
void clearAll();
/**
* @brief 供外部设置机械臂数据到输入框(根据当前模式自动填充)
*/
void setRobotInput(double x, double y, double z, double rx, double ry, double rz);
/**
* @brief 供外部设置相机数据到输入框Eye-To-Hand 模式)
*/
void setCameraInput(double x, double y, double z, double rx, double ry, double rz);
/**
* @brief 获取 TCP 标定输入数据
*/
HECTCPCalibData getTCPCalibData() const;
signals:
/**
* @brief 标定模式改变信号
*/
void calibTypeChanged(HECCalibrationType type);
/**
* @brief 请求 Eye-To-Hand 标定
*/
void requestEyeToHandCalib();
/**
* @brief 请求 Eye-In-Hand 标定
*/
void requestEyeInHandCalib();
/**
* @brief 请求 TCP 标定
*/
void requestTCPCalib();
private slots:
/**
* @brief 标定模式切换
*/
void onCalibTypeChanged(int index);
/**
* @brief TCP 模式切换3-DOF / 6-DOF
*/
void onTCPModeChanged(int index);
/**
* @brief TCP 添加行
*/
void onTCPAddRow();
/**
* @brief TCP 删除行
*/
void onTCPRemoveRow();
private:
/**
* @brief 初始化界面
*/
void setupUI();
/**
* @brief 创建 Eye-To-Hand 数据表格
*/
QWidget* createEyeToHandGroup();
/**
* @brief 创建 Eye-In-Hand 数据表格
*/
QWidget* createEyeInHandGroup();
/**
* @brief 创建 TCP 标定数据组
*/
QWidget* createTCPCalibGroup();
/**
* @brief 更新表格显示
*/
void updateTableVisibility();
// 标定模式选择
QComboBox* m_cbCalibType;
// Eye-To-Hand 数据表格
QTableWidget* m_tableEyeToHand;
QWidget* m_groupEyeToHand;
// Eye-In-Hand 数据表格
QTableWidget* m_tableEyeInHand;
QWidget* m_groupEyeInHand;
// Eye-To-Hand 内联按钮
QPushButton* m_btnEyeToHandAddRow;
QPushButton* m_btnEyeToHandDeleteRow;
QPushButton* m_btnEyeToHandCalib;
// Eye-In-Hand 内联按钮
QPushButton* m_btnEyeInHandAddRow;
QPushButton* m_btnEyeInHandDeleteRow;
QPushButton* m_btnEyeInHandCalib;
// TCP 标定相关
QWidget* m_groupTCPCalib;
QTableWidget* m_tableTCP;
QComboBox* m_tcpModeCombo;
QComboBox* m_tcpEulerOrderCombo;
QSpinBox* m_tcpRefPoseIndex;
QDoubleSpinBox* m_tcpWorldRx;
QDoubleSpinBox* m_tcpWorldRy;
QDoubleSpinBox* m_tcpWorldRz;
QGroupBox* m_tcpOrientationGroup;
QPushButton* m_tcpAddRowBtn;
QPushButton* m_tcpRemoveRowBtn;
QPushButton* m_btnTCPCalib;
// Eye-To-Hand 输入框
QDoubleSpinBox* m_inputEyeX;
QDoubleSpinBox* m_inputEyeY;
QDoubleSpinBox* m_inputEyeZ;
QDoubleSpinBox* m_inputRobotX;
QDoubleSpinBox* m_inputRobotY;
QDoubleSpinBox* m_inputRobotZ;
QPushButton* m_btnEyeToHandAddInput;
// Eye-In-Hand 输入框
QDoubleSpinBox* m_inputEndX;
QDoubleSpinBox* m_inputEndY;
QDoubleSpinBox* m_inputEndZ;
QDoubleSpinBox* m_inputEndRoll;
QDoubleSpinBox* m_inputEndPitch;
QDoubleSpinBox* m_inputEndYaw;
QDoubleSpinBox* m_inputCamX;
QDoubleSpinBox* m_inputCamY;
QDoubleSpinBox* m_inputCamZ;
QPushButton* m_btnEyeInHandAddInput;
// TCP 输入框
QDoubleSpinBox* m_inputTcpX;
QDoubleSpinBox* m_inputTcpY;
QDoubleSpinBox* m_inputTcpZ;
QDoubleSpinBox* m_inputTcpRx;
QDoubleSpinBox* m_inputTcpRy;
QDoubleSpinBox* m_inputTcpRz;
QPushButton* m_btnTcpAddInput;
};
#endif // CALIBDATAWIDGET_H