opencascade AIS_TypeFilter AIS_XRTrackedDevice源码学习
opencascade AIS_TypeFilter
前言
通过它们的类型选择交互对象。该过滤器会对本地上下文中的每个交互对象提出问题,
以确定它是否具有非空的所有者,并且如果是,则检查它是否是所需类型。
如果对象在每种情况下都返回 true,则保留该对象。否则,将其拒绝。
默认情况下,交互对象的类型为 None,签名为 0。类型过滤器指定了一
个类型的选择范围,可以在任何级别上枚举类型或种类。这个选择可以是
交互对象的种类、维度、单位,或者轴、平面或属性的类型。
如果要为您的交互对象指定特定的类型和签名,必须重新定义两个虚拟方法:
Type 和 Signature。
此过滤器在中立点和开放的本地上下文中均可使用。
在收集器视图中,只能在打开本地上下文时对位置过滤器积极响应的交互
对象进行定位。
当关闭本地上下文时,所有临时交互对象都将被删除,与上下文相关的所有
选择模式都将取消,并且所有内容过滤器都将被清空。
方法
1
初始化类型过滤器,使用给定的种类aGivenKind。
AIS_TypeFilter(const AIS_KindOfInteractive aGivenKind);
2
如果临时对象不是交互对象,或者交互对象的类型与过滤器中存储的类型不同,
则返回False。
virtual Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anobj);
用法示例
在OpenCASCADE中,AIS_TypeFilter
是用于过滤特定类型交互对象的类。这个类通常用于与视图选择管理器(SelectMgr)一起工作,以便在3D场景中选择和操作特定类型的对象。以下是一个简单的示例,展示了如何使用AIS_TypeFilter
类来初始化和应用过滤器:
#include <AIS_TypeFilter.hxx>
#include <AIS_KindOfInteractive.hxx>
#include <SelectMgr_EntityOwner.hxx>// 示例函数,演示如何使用AIS_TypeFiltervoid exampleUsage()
{// 假设已有一个特定的交互对象种类定义AIS_KindOfInteractive givenKind = AIS_KOI_Dimension;// 初始化一个类型过滤器,使用给定的种类AIS_TypeFilter typeFilter(givenKind);// 假设有一个 SelectMgr_EntityOwner 对象 anEntityOwnerHandle(SelectMgr_EntityOwner) anEntityOwner = ...; // 获取实际的 EntityOwner 对象// 检查该 EntityOwner 是否符合过滤器条件Standard_Boolean isOk = typeFilter.IsOk(anEntityOwner);if (isOk){// 如果符合过滤器条件,执行相应的操作// 例如,选择该交互对象进行特定的操作// 在实际应用中,通常会将符合过滤器条件的对象添加到选择集中或进行其他操作// 例如:// mySelection->Add(anEntityOwner);// 或者// Handle(AIS_InteractiveObject) interactiveObject = anEntityOwner->Selectable();// 进行交互对象的其他操作}else{// 如果不符合过滤器条件,可以进行相应的处理// 例如,忽略或者进行其他处理}
}
在这个示例中:
- 首先,我们定义了一个
AIS_KindOfInteractive
类型的变量givenKind
,它表示我们希望过滤的交互对象的种类。 - 然后,我们通过
AIS_TypeFilter typeFilter(givenKind);
初始化了一个类型过滤器,这样它就会过滤出具有特定种类的交互对象。 - 接着,我们假设有一个
SelectMgr_EntityOwner
类型的对象anEntityOwner
,通过调用typeFilter.IsOk(anEntityOwner);
来检查该对象是否符合过滤条件。 - 最后,根据
IsOk
的返回结果,我们可以对符合过滤条件的交互对象执行相应的操作。
在实际应用中,你可以根据具体需求定制不同的 AIS_KindOfInteractive
类型和相应的操作,以实现对交互对象的选择和处理。
参考
opencascade AIS_XRTrackedDevice
前言
“被跟踪的XR设备的辅助纹理网格呈现”
方法
1
主构造函数。
AIS_XRTrackedDevice(const Handle(Graphic3d_ArrayOfTriangles)& theTris,
const Handle(Image_Texture)& theTexture);
2
空构造函数。
AIS_XRTrackedDevice();
3
返回设备角色。
Aspect_XRTrackedDeviceRole Role() const { return myRole; }
4
设置设备角色。
void SetRole(Aspect_XRTrackedDeviceRole theRole) { myRole = theRole; }
5
返回激光颜色。
const Quantity_Color& LaserColor() const { return myLaserColor; }
6
设置激光颜色。
Standard_EXPORT void SetLaserColor(const Quantity_Color& theColor);
7
返回激光长度。
Standard_ShortReal LaserLength() const { return myLaserLength; }
8
设置激光长度。
Standard_EXPORT void SetLaserLength(Standard_ShortReal theLength);
9
返回单位比例因子。
Standard_ShortReal UnitFactor() const { return myUnitFactor; }
10
设置单位比例因子。
void SetUnitFactor(Standard_ShortReal theFactor) { myUnitFactor = theFactor; }
用法示例
OpenCASCADE中的 AIS_TypeFilter
和 AIS_XRTrackedDevice
是用于管理和显示3D图形对象的类。AIS_TypeFilter
用于过滤特定类型的交互对象,而 AIS_XRTrackedDevice
则可能用于表示和管理被跟踪的XR设备的可视化。以下是一个简单的示例,展示如何结合使用这两个类来管理和显示XR设备的虚拟表示:
示例代码
#include <AIS_TypeFilter.hxx>
#include <AIS_XRTrackedDevice.hxx>
#include <Graphic3d_ArrayOfTriangles.hxx>
#include <Image_Texture.hxx>// 示例函数,演示如何使用AIS_TypeFilter和AIS_XRTrackedDevicevoid exampleUsage()
{// 假设已经创建了一个用于管理交互对象的类型过滤器,例如筛选特定种类的交互对象AIS_TypeFilter typeFilter(/* 指定所需的种类参数 */);// 假设有一个用于被跟踪XR设备的三角形网格数组和纹理Handle(Graphic3d_ArrayOfTriangles) tris = ...; // 创建三角形网格数组Handle(Image_Texture) texture = ...; // 创建纹理对象// 创建一个AIS_XRTrackedDevice对象来表示被跟踪的XR设备AIS_XRTrackedDevice trackedDevice(tris, texture);// 设置XR设备的角色trackedDevice.SetRole(/* 指定角色参数 */);// 设置XR设备的激光颜色和长度Quantity_Color laserColor(/* 设置激光颜色参数 */);trackedDevice.SetLaserColor(laserColor);trackedDevice.SetLaserLength(/* 设置激光长度参数 */);// 假设需要将XR设备对象添加到场景中,并且仅在满足类型过滤器条件时才添加if (typeFilter.IsOk(/* 指定要添加的交互对象 */)){// 将XR设备对象添加到场景中的适当位置// 例如:// myAISContext->Display(trackedDevice, Standard_True);}
}
解释说明
-
AIS_TypeFilter 使用:
AIS_TypeFilter
类用于定义和应用类型过滤器,确保只有符合特定类型条件的交互对象才能被操作或显示。
-
AIS_XRTrackedDevice 使用:
AIS_XRTrackedDevice
类用于创建和管理被跟踪的XR设备的可视化表示。它可以接受三角形网格和纹理对象作为参数,用来构建设备的外观。- 可以使用其设置方法,如
SetRole
、SetLaserColor
和SetLaserLength
,来定义和调整设备的角色、激光颜色和长度等属性。
-
场景管理:
- 示例中展示了如何结合使用
AIS_TypeFilter
和AIS_XRTrackedDevice
,确保只有符合特定类型条件的XR设备可被添加到场景中进行显示或操作。
- 示例中展示了如何结合使用
在实际应用中,你可以根据具体需求调整和扩展这些示例代码,以实现更复杂的XR设备管理和可视化功能。
参考
相关文章:

opencascade AIS_TypeFilter AIS_XRTrackedDevice源码学习
opencascade AIS_TypeFilter 前言 通过它们的类型选择交互对象。该过滤器会对本地上下文中的每个交互对象提出问题, 以确定它是否具有非空的所有者,并且如果是,则检查它是否是所需类型。 如果对象在每种情况下都返回 true,则保留…...
使用Spring AOP监控指定方法执行时间
文章目录 一、加入pom依赖二、切面类和注解三、执行方法 一、加入pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>二、切面类和注解 import java.lang.…...

最新CSS3纵向菜单的实现
纵向菜单 通过下面例子,你会知道把列表转换成菜单的关键技术 a中的#是URL的占位符可以点击,真正用途中写实际URL <nav class"list1"><ul><li><a href"#">Alternative</a></li><li><…...
GooLeNet模型搭建
一、model import torch from torch import nn from torchsummary import summaryclass Inception(nn.Module):def __init__(self, in_channels, c1, c2 , c3 , c4):super(Inception, self).__init__()self.ReLU nn.ReLU()#路线1:1x1卷积self.p1_1 nn.Conv2d(in_channels i…...

使用ThreadLocal来存取单线程内的数据
一.什么是ThreadLocal? ThreadLocal,即线程本地变量。如果你创建了一个 ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是在操作自己本地内存里面的变量&…...

elasticsearch教程
1. 单点部署(rpm): #提前关闭firewalld,否则无法组建集群 #1. 下载ES rpm包 ]# https://www.elastic.co/cn/downloads #2. 安装es ]# rpm -ivh elasticsearch-7.17.5-x86_64.rpm #3. 调整内核参数(太低的话es会启动报错) echo "vm.max_map_count655360 fs.file-max 655…...

Arrays、Lambda表达式、Collection集合
1. Arrays 1.1 操作数组的工具类 方法名说明public static String toString(数组)把数组拼接成一个字符串public static int binarySearch(数组,查找的元素)二分查找法查找元素public static int[] copyOf(原数组,新数组长度)拷贝数组public static int[] copyOfRange(原数组…...

2024年前端趋势:全栈或许是不容错过的选择!
近年来,前端开发的技术不断推陈出新,2024年也不例外。在这个变化迅速的领域,全栈开发逐渐成为一股不容忽视的趋势。无论你是经验丰富的开发者,还是刚刚入门的新手,掌握全栈技术都能让你在竞争中脱颖而出。而在这个过程…...

MySQL 实战 45 讲(01-05)
本文为笔者学习林晓斌老师《MySQL 实战 45 讲》课程的学习笔记,并进行了一定的知识扩充。 sql 查询语句的执行流程 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器和执行器。 连接器负责接收客…...
仓颉编程语言入门 -- Array数组详解
仓颉编程语言入门 – Array数组详解 一. 如何创建Array数组 我们可以使用 Array 类型来构造单一元素类型,有序序列的数据。 1.仓颉使用 Array 来表示 Array 类型。T 表示 Array 的元素类型,T 可以是任意类型 , 类似于泛型的概念 var arr:Array<St…...
C#初级——简单单例模式使用
单例模式 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例,通过单例模式防止私有成员被多次引用,防止数据被随意纂改。本文使用的是线程不安全的懒汉式单例。 创建单例模式 首…...
2024.07.29 校招 实习 内推 面经
地/球🌍 : neituijunsir 交* 流*裙 ,内推/实习/校招汇总表格 1、校招 | 美/团// 快驴、小象、优/选/事/业/部2024年校/园/招聘(内推) 校招 | 美团快驴、小象、优选事业部2024年校园招聘(内推ÿ…...
速盾:爬虫攻击和cc攻击的区别是什么?
爬虫攻击和CC(Distributed Denial of Service)攻击是网络安全领域两种不同类型的攻击方式。尽管它们都涉及对目标网站或服务器的非法访问,但它们的目的、方法和影响各不相同。在接下来的文章中,我们将详细介绍这两种攻击方式的区别…...
Tomcat与Nginx的区别详解
目录 引言Tomcat概述 Tomcat的历史Tomcat的架构Tomcat的功能Nginx概述 Nginx的历史Nginx的架构Nginx的功能Tomcat与Nginx的区别 架构上的区别...

【大模型从入门到精通5】openAI API高级内容审核-1
这里写目录标题 高级内容审核利用 OpenAI 内容审核 API 的高级内容审核技术整合与实施使用自定义规则增强审核综合示例防止提示注入的策略使用分隔符隔离命令理解分隔符使用分隔符实现命令隔离 高级内容审核 利用 OpenAI 内容审核 API 的高级内容审核技术 OpenAI 内容审核 AP…...

JVM系列 | 对象的消亡3——垃圾收集器的对比与实现细节
垃圾收集器 文章目录 各收集器简单对比收集器启动参数各收集器详细说明JDK 1.3 之前JDK 1.3 | SerialJDK 1.4 | ParNewJDK 1.4 | Parallel ScavengeJDK 5 | CMS 收集器JDK 7 | G1 各收集器简单对比 收集器名称出现时间淘汰时间目标采用技术线程数STW分代备注无名JDK 1.3之前JD…...

C# Unity 面向对象补全计划 七大原则 之 开闭原则(OCP) 难度:☆ 总结:已经写好的就别动它了,多用继承
本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.开闭原则(OC…...

微信防封指南请收好
一、新号与老号的添加限制 建议新注册的微信号主动添加好友的数量不宜过多,推荐每日添加不超过5个好友;对于老号,建议每日添加不超过20个好友。保持适度的添加速度,避免被系统判定为异常操作。 二、避免使用营销性词汇 在发送消…...

选择排序算法改进思路和算法实现
选择排序 在未排序的数组中,用第一个数去和后面的数比较,找出最小的数,和第一个数交换。第一个数已为已排序的数。 相当于0~7 从0~7中找到最小的数放在0 从1~7中找到最小的数放在1 从2~7中找到最小的数放在2 ...以此类推 从6~7中找到最…...

【文件解析漏洞复现】
一.IIS解析漏洞复现 1.IIS6.X 方式一:目录解析 搭建IIS环境 在网站下建立文件夹的名字为.asp/.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 访问成功被解析 方式一:目录解析 在IIS 6处理文件解…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...