67 lines
2.0 KiB
C
67 lines
2.0 KiB
C
|
#ifndef SnapCurvePointsState_H
|
|||
|
#define SnapCurvePointsState_H
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include <bitset>
|
|||
|
#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
|