GrabBag/AppUtils/UICommon/Inc/NetworkConfigWidget.h

131 lines
3.4 KiB
C++

#ifndef NETWORKCONFIGWIDGET_H
#define NETWORKCONFIGWIDGET_H
#include <QComboBox>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QWidget>
namespace Ui {
class NetworkConfigWidget;
}
struct NetworkConfigData
{
int eulerOrder = 11;
int outputEulerOrder = 10; // 输出欧拉角解码约定(仅影响旋转矩阵 → 欧拉角的展示/下发,不影响坐标转换)
int poseOutputOrder = 0; // 机器人姿态输入/输出顺序
int dirVectorInvert = 0; // 兼容旧接口,界面不再提供配置
int byteOrder = 0;
int longAxisDir = 0; // 兼容旧接口,界面不再提供配置
QString plcServerIp = "192.168.0.88";
int plcServerPort = 502;
int addrPhotoRequest = 1001;
int addrDataComplete = 1003;
int addrCoordDataStart = 2002;
int tcpServerPort = 5020;
};
enum NetworkEulerOrder
{
EULER_ORDER_XYZ = 10,
EULER_ORDER_ZYX = 11,
EULER_ORDER_ZXY = 12,
EULER_ORDER_YXZ = 13,
EULER_ORDER_YZX = 14,
EULER_ORDER_XZY = 15
};
enum NetworkPoseOutputOrder
{
NET_POSE_OUTPUT_RX_RY_RZ = 0,
NET_POSE_OUTPUT_RX_RZ_RY = 1,
NET_POSE_OUTPUT_RY_RX_RZ = 2,
NET_POSE_OUTPUT_RY_RZ_RX = 3,
NET_POSE_OUTPUT_RZ_RX_RY = 4,
NET_POSE_OUTPUT_RZ_RY_RX = 5
};
enum NetworkDirVectorInvert
{
NET_DIR_INVERT_NONE = 0,
NET_DIR_INVERT_XY = 1,
NET_DIR_INVERT_XZ = 2,
NET_DIR_INVERT_YZ = 3
};
enum NetworkByteOrder
{
NET_BYTE_ORDER_BIG = 0,
NET_BYTE_ORDER_LITTLE = 1
};
class NetworkConfigWidget : public QWidget
{
Q_OBJECT
public:
explicit NetworkConfigWidget(bool showPlcConfig = true,
bool showTcpConfig = false,
QWidget* parent = nullptr);
~NetworkConfigWidget();
void setConfig(const NetworkConfigData& config);
NetworkConfigData getConfig() const;
int eulerOrder() const;
int outputEulerOrder() const;
int poseOutputOrder() const;
int dirVectorInvert() const;
int byteOrder() const;
int longAxisDir() const;
/**
* @brief 隐藏由工具参数页负责的参数(欧拉角顺序 / 输出欧拉角 / 姿态输入输出顺序)
*
* 方向向量调整与长边对应轴已不再提供界面配置,接口保留默认值以兼容旧调用。
*/
void setExtrinsicControlsVisible(bool visible);
/**
* @brief 单独显示/隐藏姿态输入输出顺序。
*/
void setPoseOutputOrderVisible(bool visible);
private:
void setupUI(bool showPlcConfig, bool showTcpConfig);
void initEulerOrderComboBox();
void initOutputEulerOrderComboBox();
void initPoseOutputOrderComboBox();
void initByteOrderComboBox();
private:
Ui::NetworkConfigWidget* ui = nullptr;
QComboBox* m_comboEulerOrder = nullptr;
QComboBox* m_comboOutputEulerOrder = nullptr;
QComboBox* m_comboPoseOutputOrder = nullptr;
QComboBox* m_comboByteOrder = nullptr;
QLabel* m_labelEulerOrder = nullptr;
QLabel* m_labelOutputEulerOrder = nullptr;
QLabel* m_labelPoseOutputOrder = nullptr;
NetworkConfigData m_configCache;
QGroupBox* m_groupPlc = nullptr;
QLineEdit* m_editPlcIp = nullptr;
QLineEdit* m_editPlcPort = nullptr;
QLineEdit* m_editAddrPhotoRequest = nullptr;
QLineEdit* m_editAddrDataComplete = nullptr;
QLineEdit* m_editAddrCoordDataStart = nullptr;
QGroupBox* m_groupTcp = nullptr;
QLineEdit* m_editTcpPort = nullptr;
};
#endif // NETWORKCONFIGWIDGET_H