opencascade AIS_InteractiveContext源码学习相关枚举 AIS_SelectionScheme AIS_StatusOfPick

AIS_SelectionScheme

枚举 AIS_SelectionScheme

设置交互上下文中的选择方案。

枚举值:

AIS_SelectionScheme_UNKNOWN

未定义的方案

AIS_SelectionScheme_Replace

清除当前选择并选择检测到的对象

AIS_SelectionScheme_Add

将检测到的对象添加到当前选择

AIS_SelectionScheme_Remove

从当前选择中移除检测到的对象

AIS_SelectionScheme_XOR

对检测到的对象执行异或操作,其他已选择的对象不受影响

AIS_SelectionScheme_Clear

清除当前选择

AIS_SelectionScheme_ReplaceExtra

替换一个区别是:如果替换的结果为空,并且当前选择包含检测到的元素,则选择该元素

这些是用于交互上下文中设置选择方案的枚举值及其描述。

在OpenCASCADE中,AIS_SelectionScheme 是一个枚举类型,用于定义交互式上下文中选择对象的不同方案。这些方案确定了当用户进行选择操作时,如何处理当前选择集合以及新选择的对象。

以下是一些 AIS_SelectionScheme 的常见用法和用例:

示例用法:

  1. 替换选择(AIS_SelectionScheme_Replace):

    cpp 复制代码
    myContext->ClearSelected(); // 清除当前选择
    myContext->Select(...);    // 选择新的对象

    在这个例子中,首先使用 ClearSelected() 方法清除当前选择集合,然后使用 Select() 方法选择新的对象。这种方式适合在每次选择操作之前清除当前选择并选择新对象。

  2. 添加到当前选择(AIS_SelectionScheme_Add):

    cpp 复制代码
    myContext->ShiftSelect(...); // 将新的对象添加到当前选择

    使用 ShiftSelect() 方法可以将新的对象添加到当前已选择的对象集合中。这样做可以在不清除当前选择的情况下添加新的对象。

  3. 从当前选择中移除(AIS_SelectionScheme_Remove):

    cpp 复制代码
    myContext->ShiftSelect(...); // 将新的对象添加到当前选择
    myContext->ShiftSelect(...); // 再次选择相同对象以移除它

    在这个示例中,使用两次 ShiftSelect() 方法。第一次将对象添加到当前选择中,第二次再次选择相同对象,这会导致从当前选择中移除该对象。

  4. 异或选择(AIS_SelectionScheme_XOR):

    cpp 复制代码
    myContext->CtrlSelect(...); // 对新对象执行 XOR 操作

    使用 CtrlSelect() 方法可以执行异或操作。这意味着如果新选择的对象已经在当前选择中,则从当前选择中移除它;如果不在当前选择中,则添加它进去。

  5. 清除当前选择(AIS_SelectionScheme_Clear):

    cpp 复制代码
    myContext->ClearSelected(); // 清除当前选择

    使用 ClearSelected() 方法可以清除当前选择集合中的所有对象,即使没有新的选择操作。

  6. 替换选择(带额外条件)(AIS_SelectionScheme_ReplaceExtra):

    cpp 复制代码
    myContext->ShiftSelect(...); // 将新的对象添加到当前选择

    这种情况类似于 AIS_SelectionScheme_Add,但有一个区别:如果新的选择操作结果为空,并且当前选择集合中包含了被检测到的元素,则该元素会被选中。

相关方法和类:

  • AIS_InteractiveContext: OpenCASCADE中用于管理交互式对象和选择操作的主要类。
  • 选择操作方法 :如 Select()ShiftSelect()CtrlSelect()ClearSelected() 等方法,用于执行不同的选择方案。
  • AIS_SelectionScheme 枚举:定义了不同的选择方案,每种方案都有不同的行为和效果,适合不同的用户交互需求。

在使用 AIS_SelectionScheme 时,根据用户的操作行为和应用程序的需求选择适当的选择方案。这些方案可以帮助控制和管理用户在3D场景中的选择行为,以提供更好的用户体验和交互性。

AIS_StatusOfPick

枚举 AIS_StatusOfPick

枚举值:

AIS_SOP_Error

错误状态

AIS_SOP_NothingSelected

未选择任何内容

AIS_SOP_Removed

已移除选择

AIS_SOP_OneSelected

已选择一个对象

AIS_SOP_SeveralSelected

已选择多个对象

这些是用于表示拾取操作状态的枚举值及其描述。

示例用法:

在OpenCASCADE中,AIS_StatusOfPick 是一个枚举类型,用于表示拾取操作的状态。它通常用于交互式上下文(Interactive Context)中,以确定用户在3D场景中选择对象时的情况。

以下是一些 AIS_StatusOfPick 的常见用法和示例:

  1. 获取拾取状态:

    cpp 复制代码
    AIS_StatusOfPick status = context->Pick(...); // 使用上下文进行拾取操作
    if (status == AIS_SOP_OneSelected) {
        // 当选择了一个对象时执行某些操作
    } else if (status == AIS_SOP_SeveralSelected) {
        // 当选择了多个对象时执行某些操作
    } else if (status == AIS_SOP_NothingSelected) {
        // 当未选择任何对象时执行某些操作
    } else if (status == AIS_SOP_Error) {
        // 处理拾取过程中的错误情况
    }

    在此示例中,contextAIS_InteractiveContext 对象,通过它进行拾取操作,并根据返回的 AIS_StatusOfPick 状态执行不同的操作。

  2. 处理拾取事件:

    cpp 复制代码
    void MyView::OnMouseDown(int x, int y) {
        AIS_StatusOfPick status = myContext->Select(x, y);
        switch (status) {
            case AIS_SOP_OneSelected:
                // 处理选择了一个对象的事件
                break;
            case AIS_SOP_SeveralSelected:
                // 处理选择了多个对象的事件
                break;
            case AIS_SOP_NothingSelected:
                // 处理未选择对象的事件
                break;
            case AIS_SOP_Error:
                // 处理拾取过程中的错误情况
                break;
            default:
                break;
        }
    }

    这个例子展示了如何在用户鼠标按下事件中使用 AIS_StatusOfPick 处理不同的拾取状态,以便根据用户的操作做出响应。

相关方法和类:

  • AIS_InteractiveContext: OpenCASCADE中负责管理交互式对象和拾取操作的主要类。
  • SelectPick 方法 : 用于执行拾取操作并返回 AIS_StatusOfPick 状态。
  • AIS_StatusOfPick 枚举: 定义了不同的拾取状态,如已选择一个对象、已选择多个对象、未选择任何对象和拾取过程中的错误状态。

在使用 AIS_StatusOfPick 时,根据不同的返回状态来决定应用程序的行为,例如更新界面、执行操作或显示消息等。

相关推荐
dengqingrui1232 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
我的心永远是冰冰哒2 小时前
ad.concat()学习
学习
ZZZ_O^O2 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
slomay4 小时前
关于对比学习(简单整理
经验分享·深度学习·学习·机器学习
hengzhepa4 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
小小洋洋6 小时前
BLE MESH学习1-基于沁恒CH582学习
学习
Ace'7 小时前
每日一题&&学习笔记
笔记·学习
IM_DALLA7 小时前
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25
学习·fpga开发·verilog学习
丶Darling.7 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
z樾9 小时前
Github界面学习
学习