opencascade AIS_InteractiveContext源码学习2

news2024/11/24 14:26:53

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.coloradmin.cn/o/1847173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络学习5-非线性激活

非线性激活,即 这是最常用的 inplaceTrue 原位操作 改变变量本身的值,就是是否输入时若原本有值,是否更换 该函数就是表示:输入小于零时输出0,大于零时保持不变 代码如下: import torch from torch imp…

芋道源码 yudao-cloud 、Boot 文档,开发指南 看全部,破解[芋道快速开发平台 Boot + Cloud]

1、文档全部保存本地部署查看,真香 文档已抓取最新版本,2024.06.21。【唯一遗憾,表结构到2024.04月,已被限制放到知识星球】会员中心,支付中心,CRM,ERP,商城,公众号运行…

利氪科技拿下C轮超级融资,国产智能底盘黑马奔向黄金时代

“智能驾驶遗珠,国产替代富矿。” 这是海通证券在最近一期研报中,描述线控底盘产业的用语。它很巧妙地点明了,这个藏在车身之下的部分,拥有何种特征——稳坐技术体系的核心点位,拥有前景广阔的市场。 事实上&#xf…

生成式AI与开发者:威胁还是机遇?

近期,围绕生成式人工智能(AI)是否能取代程序员的讨论达到了前所未有的高度。百度的创始人李彦宏甚至预言,未来可能不再需要程序员这一职业。这个话题让很多开发者,包括有几年开发经验的我,感到不安。我记得…

【ArcGIS微课1000例】0120:ArcGIS批量修改符号的样式(轮廓)

ArcGIS可以批量修改符号的样式,如样式、填充颜色、轮廓等等。 文章目录 一、加载实验数据二、土地利用符号化三、批量修改符号样式四、注意事项一、加载实验数据 订阅专栏后,从私信查收专栏配套的完整实验数据包,打开0120.rar中的土地利用数据,如下图所示: 查看属性表: …

Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

项目实战 1.创建项目(sms) File->New Project->Django 稍等片刻,项目的目录结构如下图 项目创建后确认是否已安装Django和mysqlclient解释器,如何确认?file->Settings 如果没有请在Terminal终端输入以下命令完成安装 pip instal…

德璞资本:科技股波动解析,三巫日与日元效应下的市场走向

摘要 近期,美国科技股的表现令人担忧,标普500指数在科技股的拖累下出现下跌。亚洲股市也受到影响,特别是日本和韩国股市。随着期权到期日的临近,市场面临更大的波动风险。本文将详细分析科技股失去动能的原因、三巫日的影响及未来…

elementui组件库实现电影选座面板demo

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Cinema Seat Selection</title><!-- 引入E…

华为重磅官宣:超9亿台、5000个头部应用已加入鸿蒙生态!人形机器人现身 专注AI芯片!英伟达挑战者Cerebras要上市了

内容提要 华为表示&#xff0c;盘古大模型5.0加持&#xff0c;小艺能力全新升级。小艺智能体与导航条融为一体&#xff0c;无处不在&#xff0c;随时召唤。只需将文字、图片、文档“投喂”小艺&#xff0c;即可便捷高效处理文字、识别图像、分析文档。 正文 据华为终端官方微…

策略模式:applicationContext.getBeansOfType()方法

applicationContext.getBeansOfType() 一般用来获取某个接口的所有实例Bean 方法定义如下&#xff1a; 入参一般是接口&#xff0c;即interface。响应是个Map结构&#xff0c;key bean在容器中的名称&#xff0c;value bean实列 开发步骤&#xff1a; 1.定义接口 2.定义…

“锟斤拷,烫烫烫,屯屯屯”的由来

在程序开发过程中&#xff0c;调试是不可或缺的一环。调试不仅可以帮助开发者发现错误&#xff0c;还能提供程序运行时的内部状态信息。然而&#xff0c;在调试过程中&#xff0c;开发者有时会遇到一些奇怪的字符。这些乱码通常是由内存状态的特殊标记&#xff0c;或者字符集不…

如何通过准确预测需求来减少PMC成为“夹心饼干”的风险?

在瞬息万变的商业环境中&#xff0c;产品物料控制&#xff08;PMC&#xff09;部门时常扮演着“夹心饼干”的角色&#xff0c;既要满足市场快速变化的需求&#xff0c;又要协调供应商、生产线等多方利益。如何减少这种风险&#xff0c;让PMC部门从“夹心困境”中脱颖而出&#…

【Git】 -- Part1 -- 基础操作

1. Git简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年开发&#xff0c;主要用于源代码管理。Git 允许多名开发者共同合作处理同一个项目&#xff0c;跟踪每个文件的修改&#xff0c;并且在必要时回滚到之前的版本。 Linus Torvalds是Linux…

使用 Kubernetes 部署 MinIO 和 Trino

Trino&#xff08;以前称为 Presto&#xff09;是一个 SQL 查询引擎&#xff0c;而不是 SQL 数据库。Trino 避开了 SQL 数据库的存储组件&#xff0c;只专注于一件事 - 超快的 SQL 查询。Trino 只是一个查询引擎&#xff0c;不存储数据。相反&#xff0c;Trino与各种数据库交互…

怎么添加网页到桌面快捷方式?

推荐用过最棒的学习网站&#xff01;https://offernow.cn 添加网页到桌面快捷方式&#xff1f; 很简单&#xff0c;仅需要两步&#xff0c;接下来以chrome浏览器为例。 第一步 在想要保存的网页右上角点击设置。 第二步 保存并分享-创建快捷方式&#xff0c;保存到桌面即可…

rancher快照备份至S3

巧用rancher的S3快照备份功能&#xff0c;快速实现集群复制、集群转移、完全崩溃后的极限修复 1.进入集群管理&#xff0c;在对应的集群菜单后&#xff0c;点击编辑配置 2.选择ETCD&#xff0c;启用&#xff0c;Backup Snapshots to S3选项 并填入你的minio 3 配置成功后 手…

【Linux基础IO】深入理解缓冲区

缓冲区在文件操作的过程中是比较重要的&#xff0c;理解缓冲区向文件刷新内容的原理可以更好的帮助我们更深层的理解操作系统内核对文件的操作。 FILE 因为IO相关函数与系统调用接口对应&#xff0c;并且库函数封装系统调用&#xff0c;所以本质上&#xff0c;访问文件都是通过…

怎么用二维码在线下载视频?视频用二维码下载的制作方法

怎么把视频转换成二维码之后还可以下载视频呢&#xff1f;现在使用二维码的方式来分享视频内容在很多行业和场景中都有应用&#xff0c;这种方式能够更加简单快捷的完成视频的传播分享&#xff0c;那么怎么让扫码者可以自由选择下载视频呢&#xff1f;下面来给大家分享扫码下载…

[Vulnhub] Troll FTP匿名登录+定时任务权限提升

信息收集 IP AddressPorts Opening192.168.8.104TCP:21,22,80 $ nmap -sC -sV 192.168.8.104 -p- --min-rate 1000 Nmap scan report for 192.168.8.104 (192.168.8.104) Host is up (0.0042s latency). Not shown: 65532 closed tcp ports (conn-refused) PORT STATE SER…

2024年老王磁力搜索引擎实测好用,赶快收藏一下

对于不少老司机&#xff0c;多多少少都不知道磁力搜索&#xff0c;不管是学习&#xff0c;还行电影、电视剧、音乐。一个好的工具可以让我们节省大量的时间&#xff0c;只要你想要就可以找的到。 今天整理了几个磁力搜索磁力链接资源&#xff0c;除老王磁力还有整理了9个好用的…