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