opencascade AIS_InteractiveContext源码学习2

server/2024/9/23 18:48:07/

AIS_InteractiveContext

在这里插入图片描述

前言

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

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

Selection management 选择管理

1:AddSelect

构造1:将对象添加到选择中
构造2:将对象添加到选择中

2:SelectRectangle

选择在包围矩形内的对象。选择后应显式重绘视图。
参数:

  • thePntMin [输入] 矩形的较小点(以像素表示)
  • thePntMax [输入] 矩形的较大点(以像素表示)
  • theView [输入] 定义矩形的活动视图
  • theSelScheme [输入] 选择方案
    返回值:选择状态
    另请参阅:StdSelect_ViewerSelector3d::AllowOverlapDetection()
3:SelectPolygon

选择多边形边界内找到的所有内容。选择后应显式重绘视图。
参数:

  • thePolyline [输入] 定义多边形边界的折线(以像素表示)
  • theView [输入] 定义折线的活动视图
  • theSelScheme [输入] 选择方案
    返回值:选择状态
4:SelectPoint

选择视图中由点拾取的最顶层对象。选择后应显式重绘视图。
参数:

  • thePnt [输入] 视图内的点的像素坐标
  • theView [输入] 定义点所在的活动视图
  • theSelScheme [输入] 选择方案
    返回值:拾取状态
5:SelectDetected

选择并突出显示之前通过 AIS_InteractiveContext::MoveTo() 方法检测到的对象;取消之前选中的对象的高亮显示。选择后应显式重绘视图。
参数:

  • theSelScheme [输入] 选择方案
    返回值:拾取状态
    另请参阅:HighlightStyle(),定义所选所有者的默认高亮样式(Prs3d_TypeOfHighlight_Selected 和 Prs3d_TypeOfHighlight_LocalSelected);PrsMgr_PresentableObject::HilightAttributes(),定义所选所有者的每个对象高亮样式(覆盖默认设置)。
6:BoundingBoxOfSelection

返回所选对象的边界框。

7:Select
重载方法1:

设置使用指定选择方案选择/取消选择的所有者列表。
参数:

  • theOwners 要改变选择状态的所有者列表
  • theSelScheme 选择方案
    返回值:拾取状态
重载方法2:

存储并突出显示之前检测到的对象;取消之前选择的对象的高亮显示。参见 MoveTo()。已弃用:(“此方法已弃用 - 应调用带有 AIS_SelectionScheme_Replace 参数的 SelectDetected() 方法代替”)

重载方法3:

选择在视图中由像素最小值和最大值(XPMin、YPMin、XPMax 和 YPMax)定义的边界矩形内找到的所有内容。检测到的对象将传递给主视图,然后进行更新。
已弃用:(“此方法已弃用 - 应调用带有 AIS_SelectionScheme_Replace 参数的 SelectRectangle() 方法代替”)

重载方法4:

折线选择;清除先前的选取列表。
已弃用:(“此方法已弃用 - 应调用带有 AIS_SelectionScheme_Replace 参数的 SelectPolygon() 方法代替”)

8:FitSelected
重载方法1、2:

将视图适应所选对象的边界。如果将 AIS_InteractiveObject 的无限状态设置为 true,则无限对象将被忽略。

9:ToHilightSelected

返回值指定当鼠标光标移到选定对象上方时是否应突出显示该对象。
另请参阅 MoveTo()。

10:SetToHilightSelected

指定当鼠标光标移到选定对象上方时,是否应突出显示该对象(在 MoveTo 方法中)。默认情况下,此值为 false,在这种情况下选定的对象不会被突出显示。
另请参阅 MoveTo()。

11:AutomaticHilight

如果自动高亮模式处于活动状态,则返回 true;默认情况下为 TRUE。
另请参阅 MoveTo()、Select()、HilightWithColor()、Unhilight()。

12:SetAutomaticHilight

设置检测到和选定实体的突出显示状态。此函数允许您断开自动模式。

MoveTo() 将填充检测到实体的列表,而 Select() 将设置检测到对象的选定状态,而不考虑此标志,但如果禁用了 AutomaticHiligh(),它们的突出显示状态将不受影响,因此应用程序可以根据需要以不同方式执行自定义突出显示。

此 API 应与 SelectMgr_SelectableObject::SetAutoHilight() 区分开来,后者用于实现特定交互对象类的自定义突出显示逻辑。
另请参阅 MoveTo()、Select()、HilightWithColor()、Unhilight()。

13:SetSelected
重载方法1

将交互式对象 aniObj 放入选定对象的列表中。执行选择过滤器检查。

重载方法2

取消先前选定的所有者的高亮显示,并将它们标记为未选定状态。将给定的所有者标记为已选定并突出显示它。执行选择过滤器检查。

14:AddOrRemoveSelected
重载方法1

允许根据其选择状态来突出显示或取消突出显示给定的所有者。

重载方法2

允许根据其选择状态对给定的所有者进行突出显示或取消突出显示操作。

15:IsSelected
重载方法1

返回 true 表示给定的对象已被选中。

重载方法2

返回 true 表示给定的所有者已被选中。

16:FirstSelectedObject

返回当前选定列表中的第一个选定对象。

17:NbSelected

使用 InitSelected() + MoreSelected() + NextSelected() 迭代器计算当前选定实体的数量。
另请参见 SelectedOwner()、InitSelected()、MoreSelected()、NextSelected()。

18:InitSelected

初始化对选定对象的扫描。
另请参见 SelectedOwner()、MoreSelected()、NextSelected()。

19:MoreSelected

如果在扫描选定对象列表时找到另一个对象,则返回 true。
另请参见 SelectedOwner()、InitSelected()、NextSelected()。

20:NextSelected

继续扫描到选定对象列表中的下一个对象。
另请参见 SelectedOwner()、InitSelected()、MoreSelected()。

21:SelectedOwner

返回选定实体的所有者。
另请参见 InitSelected()、MoreSelected()、NextSelected()。

22:SelectedInteractive

返回 Handle(AIS_InteractiveObject)::DownCast(SelectedOwner()->Selectable())

另请参见 SelectedOwner()。
重点 转换方法

23:HasSelectedShape

如果交互上下文中选择了形状,则返回 TRUE。

另请参见 SelectedShape()。

24:SelectedShape

返回选定的形状。基本上,它只是由 StdSelect_BRepOwner 存储的形状,并应用了图形变换:

const Handle(StdSelect_BRepOwner) aBRepOwner = Handle(StdSelect_BRepOwner)::DownCast(SelectedOwner());
TopoDS_Shape aSelShape = aBRepOwner->Shape();
TopoDS_Shape aLocatedShape = aSelShape.Located(aBRepOwner->Location() * aSelShape.Location());

另请参见 SelectedOwner()、HasSelectedShape()。
重点 转换方法

25:HasApplicative

如果上下文中存在通过鼠标检测到的实体,则返回 true。

另请参见 DetectedOwner()、HasNextDetected()、HilightPreviousDetected()、HilightNextDetected()。

26:Applicative

返回 SelectedInteractive()->GetOwner()

另请参见 SelectedOwner()。

用法用例

当使用OpenCASCADE的AIS_InteractiveContext进行选择管理时,可以基于不同的交互需求和场景来执行多种操作。以下是用例示例:

1. 利用选择状态进行对象操作
  • 获取当前选择的对象:

    Handle(AIS_InteractiveObject) selectedObject = myContext->SelectedInteractive();
    if (!selectedObject.IsNull()) {// 对选定对象执行操作,如获取属性、修改颜色等selectedObject->SetColor(Quantity_NOC_RED);
    }
    

    通过 SelectedInteractive() 方法获取当前选定的交互式对象,并可以在此基础上执行相应的操作,如修改颜色、获取属性等。

  • 根据选择执行特定操作:

    if (myContext->HasSelectedShape()) {TopoDS_Shape selectedShape = myContext->SelectedShape();// 执行基于选定形状的操作,如分析、处理等
    }
    

    使用 HasSelectedShape()SelectedShape() 方法检查和获取当前选定的形状,并在此基础上执行特定的操作。

2. 多选和集合操作
  • 获取所有选定的对象:

    for (myContext->InitSelected(); myContext->MoreSelected(); myContext->NextSelected()) {Handle(AIS_InteractiveObject) selectedObject = myContext->SelectedInteractive();// 处理每个选定的对象,如打印信息、处理属性等
    }
    

    使用 InitSelected()MoreSelected()NextSelected() 方法遍历所有选定的对象,并执行适当的操作。

  • 添加和移除选择对象:

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

    使用 ShiftSelect(...) 方法可以根据需要添加或移除对象到当前选择集合中。

3. 自定义高亮显示和选择模式
  • 自定义高亮显示:

    myContext->HilightWithColor(anObject, Quantity_NOC_YELLOW);
    

    使用 HilightWithColor() 方法为指定的对象设置自定义的高亮显示颜色。

  • 设置选择模式:

    myContext->SetSelectionMode(AIS_SelectionMode::AIS_SelectionMode_EntityOwner);
    

    使用 SetSelectionMode() 方法设置选择模式,以控制如何处理选择操作,如选择对象或选择对象所有者等。

4. 事件处理和用户交互
  • 处理选择事件:

    void MyEventHandler::OnSelectEvent(const AIS_InteractiveObject& object, const Standard_Boolean isSelected) {// 处理选择事件,根据选择状态执行相应操作if (isSelected) {// 对象被选中时执行的操作} else {// 对象取消选中时执行的操作}
    }
    

    使用事件处理器(如自定义的 MyEventHandler 类)来处理选择事件,根据选择状态执行相应的操作。

相关类和方法:
  • AIS_InteractiveContext: 主要类,用于管理交互式对象、选择和操作。
  • AIS_SelectionMode: 枚举,定义不同的选择模式,如选择对象或选择对象所有者。
  • 事件处理器类:用于处理选择事件和与选择相关的操作。

这些用例展示了如何利用OpenCASCADE中的 AIS_InteractiveContext 类进行灵活的选择管理和交互操作,以实现各种复杂的3D场景应用需求。通过这些方法和技术,可以有效地增强应用程序的用户体验和交互性。

immediate mode rendering 即时模式渲染

续看篇章5


http://www.ppmy.cn/server/51087.html

相关文章

直播美颜SDK技术指南:实现实时美颜效果的算法方案

本篇文章,小编将探讨直播美颜SDK的技术实现和算法方案。 一、美颜技术概述 美颜技术通过一系列图像处理算法,实时美颜效果可以在视频直播过程中实时呈现,提升用户的直播体验。为了实现这些效果,需要结合图像处理和计算机视觉技术…

【16.0】JavaScript对象

【16.0】JavaScript对象 【一】js对象概念 【特性】js中的对象时无序的属性集合【理解】我们可以把js里的对象想象成py中的字典,具有键值对,其实就是属性和属性值u,对象就是一个容器,里面属性的堆放肯定时无序的【玩法】对象的特…

mongoDB基本命令操作

文章目录 1. 安装(1). 启动mongodb(2). 数据库连接 2. 基本命令(1) 数据库操作(2) 集合操作(3) 文档操作1) 简单查询2) 条件查询3) 投影查询4) 文档更新5) 列值增长修改6) 删除文档7) 分页查询8) 排序查询9) 正则查询(模糊查询)10) 比较查询11) 包含查询 3. 索引(1) 执行计划 1…

区块链中nonce是什么,什么作用

目录 区块链中nonce是什么,什么作用 区块链中nonce是什么,什么作用 Nonce在以太坊中是一个用于确保交易顺序性和唯一性的重要参数。以下是对Nonce的详细解释: 定义 Nonce是一个scalar值,它等于从该地址发送的交易数量,或在具有关联代码的账户的情况下,由该账户创建的合…

自监督分类网络:创新的端到端学习方法

现代人工智能的快速发展中,分类任务的高效解决方案一直备受关注。今天,我们向大家介绍一种名为Self-Classifier的全新自监督端到端分类学习方法。由Elad Amrani、Leonid Karlinsky和Alex Bronstein团队开发,Self-Classifier通过优化同一样本的…

【SpringBoot】SpringBoot:构建实时聊天应用

文章目录 引言项目初始化添加依赖 配置WebSocket创建WebSocket配置类创建WebSocket处理器 创建前端页面创建聊天页面 测试与部署示例:编写单元测试 部署扩展功能用户身份验证消息持久化群组聊天 结论 引言 随着实时通信技术的快速发展,聊天应用在现代We…

Mars3d实现汽车尾气粒子效果从汽车屁股开始发射效果

本身的汽车尾气粒子效果:在汽车模型的中间发射的↓↓↓↓↓↓↓↓↓↓↓ Mars3d实例中是使用transY偏移值实现汽车尾气粒子效果从汽车屁股开始发射效果: // 动态运行车辆的尾气粒子效果 function addDemoGraphic4(graphicLayer) {const fixedRoute new…

Redis学习|Redis主从复制、Redis哨兵模式、缓存穿透、缓存击穿、缓存雪崩概念和相应解决方法

Redis主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以…