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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络期末复习(大题+小题)

计算机网络期末复习 一、计算机网络概述 Point 1 计算机网络就是以传输信息为基本目的&#xff0c;用通信线路和通信设备将多个计算机连接起来的计算机系统的集合。由自治的计算机互联起来的结合体。 Point 2 按网络的覆盖范围进行分类 &#xff08;1&#xff09;局域网*…

海富泰可直动式比例阀控制器EVRD-03C26SB-C1D24-B00

控制EVOTEK海富泰可直动式及先导式比例方向阀EVRD-03A04SA-C1D24-V00、EVRD-03C08SB-C1D24-B00、EVRD-03A16SA-C1D24-V00、EVRD-03C26SB-C1D24-B00、EVRD-05A30SA-C1D24-V00、EVRD-05C60SB-C1D24-B00、EVRD-P05A80SA-IIC1D24-B00、EVRD-P07C100SB-EEC1D24-V00、EVRD-P07A150SA-…

Appium+python自动化(二十八)- 滑呀滑,滑到奈何桥喝碗孟婆汤 - 高级滑动(超详解)

简介   奈何桥上叹奈何&#xff0c;三生石前憾三生&#xff0c;彼岸花下非彼岸&#xff0c;奈何三生彼岸人。 相传过了鬼门关便上一条路叫黄泉路&#xff0c;路上盛开着只见花&#xff0c;不见叶的彼岸花。花叶生生两不见&#xff0c;相念相惜永相失&#xff0c;路尽头有一条…

JAVA医院绩效考核系统源码:绩效考核的重要性、绩效管理分配实践具体实操,基于B/S架构开发的一套(公立医院绩效考核系统源码)

JAVA医院绩效考核系统源码&#xff1a;绩效考核的重要性、绩效管理分配实践具体实操&#xff0c;基于B/S架构开发的一套&#xff08;公立医院绩效考核系统源码&#xff09; 系统开发环境 开发语言&#xff1a;java 技术架构&#xff1a;B/S架构 开发工具&#xff1a;maven、…

LeetCode 算法:验证二叉搜索树 c++

原题链接&#x1f517;&#xff1a;验证二叉搜索树 难度&#xff1a;中等⭐️⭐️ 题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于…

锐起RDV5高性能云桌面

锐起是上海锐起信息技术有限公司旗下品牌。该公司创立于 2001 年&#xff0c;是桌面虚拟化产品和解决方案提供商&#xff0c;专注于桌面管理系统和私有云存储系统的系列软件产品研发&#xff0c;致力于简化 IT 管理、增强系统安全&#xff0c;提供简单、易用、稳定、安全的产品…

DockerDesktop中mysql容器无法使用Exec窗口解决

解决前 需要登陆&#xff1a; 登陆后需要升级才能启动调试模式 需要订阅才能使用 解决后&#xff1a; 正常使用 解决方法&#xff1a; 不要在DockerDesktop中启动mysql容器&#xff0c;使用命令行启动 启动命令 docker run --name mysql_docker -e MYSQL_ROOT_PASSWORD12345…

【单片机毕业设计选题24030】-基于STM32的智能鱼缸设计

系统功能: 采用STM32最小系统板控制&#xff0c;采集传感器数据显示在OLED上 并通过继电器进行相应的操作。 系统操作说明&#xff1a; 上电后OLED显示 “欢迎使用智能鱼缸系统请稍后”&#xff0c;两秒后进入第一页面显示。 第一页面第一行显示“系统状态监测”&#xff…

阀门盘根的介绍

盘根&#xff08;编制盘根&#xff09;&#xff08;packing&#xff09;也叫密封填料&#xff0c;通常由较柔软的线状物编织而成&#xff0c;通常截面积是正方形或长方形、圆形的条状物填充在密封腔体内,从而实现密封。填料密封最早是以棉麻等纤维塞在泄漏通道内来阻止液流泄漏…

不是KVM不支持精简置备的磁盘,而是VMM

正文共&#xff1a;999 字 11 图&#xff0c;预估阅读时间&#xff1a;1 分钟 书接上文&#xff08;不会吧&#xff01;KVM竟然不支持磁盘的精简置备&#xff01;&#xff1f;&#xff09;&#xff0c;我们已经掌握了通过“虚拟系统管理器VMM”创建虚拟机的基本方法&#xff0c…

【SSM】医疗健康平台-管理端-运营数据报表导出

知识目标 熟悉JasperReports的用法&#xff0c;能够使用JasperReports实现PDF文件导出 掌握Excel方式导出运营数据报表的方法&#xff0c;能够使用Apache POI以Excel方式导出运营数据报表 掌握PDF方式导出运营数据报表的方法&#xff0c;能够使用JasperReports以PDF方式导出运…

如何快速解决验证码图像问题 | 最佳图像(OCR)验证码解决工具

你是否曾经遇到过陷入一个看似无尽的 CAPTCHA 挑战中&#xff0c;努力识别扭曲的字符或数字&#xff1f;这些令人抓狂的 CAPTCHA 是为了确保你是人类而不是机器人&#xff0c;但它们也给真正的用户带来了头痛。那么&#xff0c;有没有快速解决这些 CAPTCHA 图像的方法&#xff…

SiLM59xx系列SiLM5991SHCG-DG 带有主动保护和高 CMTI 的单通道隔离门极驱动芯片

SiLM59xx系列SiLM5991SHCG-DG是一款单通道隔离驱动器&#xff0c;提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V&#xff0c;输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁…

多车自动驾驶编队与协同控制引领智能物流革命

多车自动驾驶编队与协同控制引领智能物流革命 随着科技的不断进步&#xff0c;智能物流正以前所未有的速度和效率改变着我们的生活和工作方式。在这个领域的最前沿&#xff0c;北京渡众机器人科技有限公司的多车自动驾驶编队与协同控制技术正在为物流行业带来革命性的变革。 北…

武汉星起航:引领潮流!中国跨境出口电商展现强劲增长势头

在全球贸易结构深刻变革的当下&#xff0c;中国跨境出口电商行业正以前所未有的活力和创新能力&#xff0c;引领着中国制造业的转型升级。面对国际贸易规则的日益严格和市场需求的持续升级&#xff0c;中国制造业正通过新型营销渠道和技术条件&#xff0c;以更加开放和主动的姿…

音频概念_STFT_窗口函数

短时傅里叶变换 (Short-Time Fourier Transform, STFT) 是一种时频谱转换算法&#xff0c;它通过在时间上移动窗口函数并计算窗口内信号的频谱来获得信号在时间和频率上的信息。填充信号可以确保每个窗口都有足够的数据进行频谱计算&#xff0c;特别是在窗口函数的边缘。 窗口…

【微服务网关——Go令牌桶限流】

1. time/rate限速器使用 令牌桶限流算法rate.NewLimiter(limit,burst)产生一个新的限速器 limit表示每秒产生token数、burst表示最多存token数 Allow判断当前是否可以取到tokenWait阻塞等待直到取到tokenReverse返回等待时间&#xff08;预估的等待时间&#xff09;&#xff0…

240626_昇思学习打卡-Day8-稀疏矩阵

240626_昇思学习打卡-Day8-稀疏矩阵 稀疏矩阵 在一些应用场景中&#xff0c;比如训练二值化图像分割时&#xff0c;图像的特征是稀疏的&#xff0c;使用一堆0和极个别的1表示这些特征即费事又难看&#xff0c;此时就可以使用稀疏矩阵。通过参考大佬博文&#xff0c;结合个人理…

读AI新生:破解人机共存密码笔记13有益机器

1. 标准模型 1.1. 我们能控制一个从外太空来的超级智能实体的概率几乎为零 1.2. 随着根据标准模型设计的机器变得更加智能&#xff0c;以及它们的行动范围遍及全球&#xff0c;关闭机器这种方法越来越不可行 1.2.1. 机器将会追求它们自己的目标&#xff0c;无论目标错得多么…

禁止浏览器对input的自动填充和填充提示(适用于谷歌、火狐、Edge(原IE浏览器)等常见浏览器)

目录 1.要解决的问题2.一技能&#xff1a;原生属性&#xff0c;小试牛刀3.二技能&#xff1a;傀儡input&#xff0c;瞒天过海4.三技能&#xff1a;JavaScript出击&#xff0c;直接开大 写在前面&#xff1a; 如有转载&#xff0c;务必注明出处&#xff0c;否则后果自负。 1.要解…