opencascade AIS_InteractiveContext源码学习6 management of active Selection Modes 原创

AIS_InteractiveContext

在这里插入图片描述

前言

交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行修改。如果交互对象尚未加载到交互上下文中,您才能直接调用交互对象的方法。

每个可选择的对象必须指定负责整体选择对象的选择模式(全局选择模式)。交互上下文本身支持使用选择过滤器进行分解对象的选择。默认情况下,全局选择模式等于0,但如果需要,可以重新定义。

management of active Selection Modes “管理活动选择模式”

1:SetSelectionModeActive

激活或取消指定对象的选择模式。如果选择模式已经处于激活或取消状态,则不会产生任何影响。
参数:
theObj:要激活或取消选择模式的对象
theMode:要激活或取消的选择模式;取消 -1 选择模式将有效地取消所有选择模式;使用 AIS_SelectionModesConcurrency_Single 激活 -1 选择模式将取消所有选择模式,否则不会产生影响
theToActivate:激活或取消的标志
theConcurrency:指定如何处理已经激活的选择模式;默认值(AIS_SelectionModesConcurrency_Multiple)表示保持活动选择模式不变;如果预期只有一个选择模式处于活动状态,可以使用 AIS_SelectionModesConcurrency_Single;如果接受 AIS_InteractiveObject::GlobalSelectionMode() 或任何本地选择模式的任意组合,则可以使用 AIS_SelectionModesConcurrency_GlobalOrLocal;仅当 theToActivate 设置为 TRUE 时考虑此值
theIsForce:设置为 TRUE 时,激活选择模式时将忽略显示状态

2:Activate

重载1:激活给定交互实体 anIobj 的具有给定索引的选择模式 aMode。
重载2:激活所有显示对象的给定选择模式。

3:Deactivate

重载1:取消所有显示对象上已激活的选择模式。
重载2:取消对象上已激活的所有选择模式。
重载3:取消交互对象 anIobj 上已激活的指定选择模式 aMode。
重载4:取消所有显示对象的给定选择模式。

4:ActivatedModes

返回已激活的选择模式列表。

5:EntityOwners

返回一个集合,其中包含在指定选择模式(如果 Mode == -1,则在所有活动模式中)下为交互对象创建的所有实体所有者。

简单示例

OpenCASCADE(Open Source Computer Aided Design Environment)中管理活动选择模式的示例可以涉及如何激活或取消选择模式,以及如何管理对象的选择状态。下面是一个简单的示例,展示如何在OpenCASCADE中操作选择模式:

#include <AIS_InteractiveContext.hxx>
#include <AIS_Selection.hxx>

// Assume AIS_InteractiveContext ctx; is already initialized

// Activate a selection mode
void activateSelectionMode()
{
    ctx.InitSelected();
    ctx.Activate(AIS_SelectionModes::AIS_SelectionModes_Concurrent);
}

// Deactivate all selection modes
void deactivateAllSelectionModes()
{
    ctx.ClearSelected();
}

// Example usage
int main()
{
    // Activate a selection mode
    activateSelectionMode();

    // Deactivate all selection modes
    deactivateAllSelectionModes();

    return 0;
}

在这个示例中:

  • AIS_InteractiveContext 是OpenCASCADE中的交互上下文类,用于管理显示对象和选择状态。
  • activateSelectionMode() 函数演示如何激活选择模式。
  • deactivateAllSelectionModes() 函数演示如何取消所有选择模式。
  • AIS_SelectionModes::AIS_SelectionModes_Concurrent 是一个选择模式的示例,实际应用中可以根据需要选择不同的模式。

这些函数和示例展示了如何在OpenCASCADE中管理和操作选择模式,以及如何处理对象的选择状态。

Selection Filters management “选择过滤器管理”

1:FilterType

上下文选择过滤器类型。

2:Filters

返回在本地上下文中活动的过滤器列表。

3:GlobalFilter

全局上下文选择过滤器。

4:AddFilter

允许您添加过滤器

5:RemoveFilter

从上下文中移除一个过滤器。

6:PickingStrategy

返回拾取策略;默认为 SelectMgr_PickingStrategy_FirstAcceptable。
参见 MoveTo()、Filters()。

7:SetPickingStrategy

设置拾取策略 - 该策略决定拾取线检测到的实体是否被接受,考虑到选择过滤器。默认情况下(SelectMgr_PickingStrategy_FirstAcceptable),选择过滤器会减少实体列表,以便上下文接受剩余列表中的最顶部实体。

这意味着,位于不可选择(由过滤器决定)部分后面的实体可以被用户拾取。如果用户不希望出现这种行为,并且希望不可选择(由过滤器决定)部分保持成为拾取的障碍物,则可以设置 SelectMgr_PickingStrategy_OnlyTopmost。

需要注意的是,由于选择管理器仅处理注册在其中的对象,因此 SelectMgr_PickingStrategy_OnlyTopmost 不会阻止拾取那些由于未在选择管理器中注册(例如已停用)而仍然可见的实体。因此,SelectMgr_PickingStrategy_OnlyTopmost 只有在启用选择过滤器时才会改变行为。

简单示例

在OpenCASCADE中管理选择过滤器可以帮助控制哪些对象可以被选中或显示。以下是一个简单示例,演示如何设置和使用选择过滤器:

#include <AIS_InteractiveContext.hxx>
#include <AIS_Selection.hxx>
#include <AIS_SelectionFilter.hxx>

// Assume AIS_InteractiveContext ctx; is already initialized

// Set up a selection filter
void setupSelectionFilter()
{
    Handle(AIS_SelectionFilter) selectionFilter = new AIS_SelectionFilter;
    selectionFilter->SetPickTypes(Graphic3d_TOC_ANY); // Allow picking any type of object
    ctx.SetSelectionFilter(selectionFilter);
}

// Clear the selection filter
void clearSelectionFilter()
{
    ctx.ClearSelectionFilter();
}

// Example usage
int main()
{
    // Set up a selection filter
    setupSelectionFilter();

    // Perform selections using the filter

    // Clear the selection filter
    clearSelectionFilter();

    return 0;
}

在这个示例中:

  • AIS_InteractiveContext 是OpenCASCADE中的交互上下文类,用于管理显示对象和选择状态。
  • AIS_SelectionFilter 是用于设置选择过滤器的类,它可以帮助限制可以选择的对象类型。
  • setupSelectionFilter() 函数演示了如何设置选择过滤器,使其允许选择任何类型的对象。
  • clearSelectionFilter() 函数演示了如何清除选择过滤器,以恢复到默认的选择行为。

在实际应用中,可以根据具体需求配置选择过滤器,以确保用户只能选择特定类型的对象或根据其他条件限制选择行为。

common properties"常见属性"

1:DefaultDrawer

返回默认属性管理器。其中包含所有颜色和线条属性,这些属性可以被那些没有自己属性的交互对象使用。

2:SetDefaultDrawer

设置默认属性管理器;应该在上下文创建时设置。警告 - 这个设置器不会更新已显示对象的默认绘图器的链接!

3:CurrentViewer

返回当前的查看器。

4:SelectionManager

返回默认属性管理器。该管理器包含所有颜色和线条属性,可供那些没有自己属性的交互对象使用。

5:MainPrsMgr

返回默认属性管理器。其中包含所有颜色和线条属性,可供那些没有自己属性的交互对象使用。

6:MainSelector

返回默认属性管理器。该管理器包含所有颜色和线条属性,可供那些没有自己属性的交互对象使用。

7:UpdateCurrentViewer

更新当前的查看器。

8:DisplayedObjects

方法1:返回特定类型(WhichKind)和签名(WhichSignature)的显示对象列表。默认情况下,WhichSignature 等于 -1,这意味着仅检查类型。
方法2:返回特定类型(WhichKind)和签名(WhichSignature)的显示对象列表。默认情况下, = -1 表示仅检查 。

9:ErasedObjects

方法1:返回列表 theListOfIO,其中包含特定类型(WhichKind)和签名(WhichSignature)的已擦除对象(隐藏对象)。默认情况下,WhichSignature 等于 1,这意味着仅检查类型。
方法2:返回已擦除对象(隐藏对象)的列表,根据默认设置, = -1 表示仅对 进行控制。

10:ObjectsByDisplayStatus

方法1:返回具有指定显示状态的对象列表,根据默认设置, = -1 表示仅对 进行控制。
方法2:返回列表 theListOfIO,其中包含特定类型(WhichKind)和签名(WhichSignature)的具有指定显示状态的对象。默认情况下,WhichSignature 等于 1,这意味着仅检查类型。

11:ObjectsInside

将列表 <aListOfIO> 填充为特定类型和签名的对象,不考虑显示状态。默认情况下,如果 <WhichSignature> = -1,则仅根据 <WhichKind> 进行控制。如果 <WhichKind> = AIS_KindOfInteractive_None 并且 <WhichSignature> = -1,则所有对象都会放入列表中。

12:ObjectIterator

创建一个迭代器,用于遍历上下文中注册的所有对象。

13:RebuildSelectionStructs

强制重新构建 BVH 选择的第一级。

14:Disconnect

断开 theObjToDisconnect 与装配体的连接,并移除相关的选择结构。

15:ObjectsForView

查询由于亲和掩码在指定视图中可见或隐藏的对象。

16:GravityPoint

返回旋转重心点。
来源:网址
继续debug visualization

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