#ifndef SnapCurvePointsState_H #define SnapCurvePointsState_H #include #include #include "DataManagerGlobal.h" #ifdef __cplusplus extern "C" { #endif enum DATAMANAGER_DLL_API_EXPORTS SNAP_POINTS_Type { SNAP_POINTS_Type_DEFALT =0, SNAP_POINTS_Type_START = 1, //捕获起点 SNAP_POINTS_Type_END, //捕获终点 SNAP_POINTS_Type_LINE_POINT, //捕获线上点 SNAP_POINTS_Type_ANY_POINT, //捕获任意点 SNAP_POINTS_Type_CROSS_POINT, //捕获交叉点 SNAP_POINTS_Type_SIZE }; class DATAMANAGER_DLL_API_EXPORTS SnapCurvePointsState { private: unsigned int buttonState; // 用一个 5 位二进制数表示按钮状态 public: SnapCurvePointsState() : buttonState(0) {} // 初始化时所有按钮状态为 00000(从1开始,所有不选中) ~SnapCurvePointsState() { buttonState = 0; } // 选择一个按钮,保证互斥性,索引从 1 开始 void selectButton(int buttonIndex) { if (buttonIndex < 1 || buttonIndex > 5) { std::cout << "按钮索引超出范围!" << std::endl; return; } // 清除所有按钮的选中状态 buttonState = 0; // 设置对应按钮的状态为选中 buttonState |= (1 << (buttonIndex - 1)); // 传入的索引减 1 转换为 0-4 范围的索引 } // 检查某个按钮的状态(是否选中),索引从 1 开始 bool isSelected(int buttonIndex) const { if (buttonIndex < 1 || buttonIndex > 5) { std::cout << "按钮索引超出范围!" << std::endl; return false; } return (buttonState >> (buttonIndex - 1)) & 1; // 判断该按钮是否被选中 } // 输出当前按钮状态的二进制形式 void printButtonState() const { std::bitset<5> bs(buttonState); // 使用 bitset 显示二进制状态 std::cout << "按钮状态: " << bs << std::endl; } }; #ifdef __cplusplus } #endif #endif