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):

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

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

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

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

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

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

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

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

  4. 异或选择(AIS_SelectionScheme_XOR):

    myContext->CtrlSelect(...); // 对新对象执行 XOR 操作
    

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

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

    myContext->ClearSelected(); // 清除当前选择
    

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

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

    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. 获取拾取状态:

    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. 处理拾取事件:

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

posted @ 2024-06-20 00:17  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源