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 时,根据不同的返回状态来决定应用程序的行为,例如更新界面、执行操作或显示消息等。

相关推荐
遇见尚硅谷4 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
艾莉丝努力练剑5 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
jz_ddk5 小时前
[HarmonyOS] 鸿蒙LiteOS-A内核深度解析 —— 面向 IoT 与智能终端的“小而强大”内核
物联网·学习·华为·harmonyos
试着5 小时前
零基础学习性能测试第五章:Tomcat的性能分析与调优-Tomcat原理,核心配置项,性能瓶颈分析,调优
学习·零基础·tomcat·性能测试
老虎06276 小时前
JavaWeb(苍穹外卖)--学习笔记13(微信小程序开发,缓存菜品,Spring Cache)
笔记·学习·微信小程序
@蓝莓果粒茶7 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
无名工程师8 小时前
AI 学习过程中各阶段的学习重点、时间规划以及不同方向的选择与建议等内容
人工智能·学习
试着8 小时前
零基础学习性能测试第五章:JVM性能分析与调优-垃圾回收器的分类与回收
jvm·学习·零基础·性能测试·垃圾回收器
livemetee8 小时前
Flink2.0学习笔记:Stream API 常用转换算子
大数据·学习·flink
WXX_s8 小时前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉