opencascade AIS_InteractiveContext源码学习相关枚举 AIS_SelectionScheme AIS_StatusOfPick

AIS_SelectionScheme

在这里插入图片描述

枚举 AIS_SelectionScheme

设置交互上下文中的选择方案。

枚举值:

AIS_SelectionScheme_UNKNOWN
未定义的方案

AIS_SelectionScheme_Replace
清除当前选择并选择检测到的对象

AIS_SelectionScheme_Add
将检测到的对象添加到当前选择

AIS_SelectionScheme_Remove
从当前选择中移除检测到的对象

AIS_SelectionScheme_XOR
对检测到的对象执行异或操作,其他已选择的对象不受影响

AIS_SelectionScheme_Clear
清除当前选择

AIS_SelectionScheme_ReplaceExtra
替换一个区别是:如果替换的结果为空,并且当前选择包含检测到的元素,则选择该元素

这些是用于交互上下文中设置选择方案的枚举值及其描述。
在OpenCASCADE中,AIS_SelectionScheme 是一个枚举类型,用于定义交互式上下文中选择对象的不同方案。这些方案确定了当用户进行选择操作时,如何处理当前选择集合以及新选择的对象。

以下是一些 AIS_SelectionScheme 的常见用法和用例:

示例用法:

  1. 替换选择(AIS_SelectionScheme_Replace):

    myContext->ClearSelected(); // 清除当前选择
    myContext->Select(...);    // 选择新的对象
    

    在这个例子中,首先使用 ClearSelected() 方法清除当前选择集合,然后使用 Select() 方法选择新的对象。这种方式适合在每次选择操作之前清除当前选择并选择新对象。

  2. 添加到当前选择(AIS_SelectionScheme_Add):

    myContext->ShiftSelect(...); // 将新的对象添加到当前选择
    

    使用 ShiftSelect() 方法可以将新的对象添加到当前已选择的对象集合中。这样做可以在不清除当前选择的情况下添加新的对象。

  3. 从当前选择中移除(AIS_SelectionScheme_Remove):

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

    在这个示例中,使用两次 ShiftSelect() 方法。第一次将对象添加到当前选择中,第二次再次选择相同对象,这会导致从当前选择中移除该对象。

  4. 异或选择(AIS_SelectionScheme_XOR):

    myContext->CtrlSelect(...); // 对新对象执行 XOR 操作
    

    使用 CtrlSelect() 方法可以执行异或操作。这意味着如果新选择的对象已经在当前选择中,则从当前选择中移除它;如果不在当前选择中,则添加它进去。

  5. 清除当前选择(AIS_SelectionScheme_Clear):

    myContext->ClearSelected(); // 清除当前选择
    

    使用 ClearSelected() 方法可以清除当前选择集合中的所有对象,即使没有新的选择操作。

  6. 替换选择(带额外条件)(AIS_SelectionScheme_ReplaceExtra):

    myContext->ShiftSelect(...); // 将新的对象添加到当前选择
    

    这种情况类似于 AIS_SelectionScheme_Add,但有一个区别:如果新的选择操作结果为空,并且当前选择集合中包含了被检测到的元素,则该元素会被选中。

相关方法和类:

  • AIS_InteractiveContext: OpenCASCADE中用于管理交互式对象和选择操作的主要类。
  • 选择操作方法:如 Select()ShiftSelect()CtrlSelect()ClearSelected() 等方法,用于执行不同的选择方案。
  • AIS_SelectionScheme 枚举:定义了不同的选择方案,每种方案都有不同的行为和效果,适合不同的用户交互需求。

在使用 AIS_SelectionScheme 时,根据用户的操作行为和应用程序的需求选择适当的选择方案。这些方案可以帮助控制和管理用户在3D场景中的选择行为,以提供更好的用户体验和交互性。

AIS_StatusOfPick

在这里插入图片描述

枚举 AIS_StatusOfPick

枚举值:

AIS_SOP_Error
错误状态

AIS_SOP_NothingSelected
未选择任何内容

AIS_SOP_Removed
已移除选择

AIS_SOP_OneSelected
已选择一个对象

AIS_SOP_SeveralSelected
已选择多个对象

这些是用于表示拾取操作状态的枚举值及其描述。

示例用法:

在OpenCASCADE中,AIS_StatusOfPick 是一个枚举类型,用于表示拾取操作的状态。它通常用于交互式上下文(Interactive Context)中,以确定用户在3D场景中选择对象时的情况。

以下是一些 AIS_StatusOfPick 的常见用法和示例:

  1. 获取拾取状态:

    AIS_StatusOfPick status = context->Pick(...); // 使用上下文进行拾取操作
    if (status == AIS_SOP_OneSelected) {
        // 当选择了一个对象时执行某些操作
    } else if (status == AIS_SOP_SeveralSelected) {
        // 当选择了多个对象时执行某些操作
    } else if (status == AIS_SOP_NothingSelected) {
        // 当未选择任何对象时执行某些操作
    } else if (status == AIS_SOP_Error) {
        // 处理拾取过程中的错误情况
    }
    

    在此示例中,contextAIS_InteractiveContext 对象,通过它进行拾取操作,并根据返回的 AIS_StatusOfPick 状态执行不同的操作。

  2. 处理拾取事件:

    void MyView::OnMouseDown(int x, int y) {
        AIS_StatusOfPick status = myContext->Select(x, y);
        switch (status) {
            case AIS_SOP_OneSelected:
                // 处理选择了一个对象的事件
                break;
            case AIS_SOP_SeveralSelected:
                // 处理选择了多个对象的事件
                break;
            case AIS_SOP_NothingSelected:
                // 处理未选择对象的事件
                break;
            case AIS_SOP_Error:
                // 处理拾取过程中的错误情况
                break;
            default:
                break;
        }
    }
    

    这个例子展示了如何在用户鼠标按下事件中使用 AIS_StatusOfPick 处理不同的拾取状态,以便根据用户的操作做出响应。

相关方法和类:

  • AIS_InteractiveContext: OpenCASCADE中负责管理交互式对象和拾取操作的主要类。
  • SelectPick 方法: 用于执行拾取操作并返回 AIS_StatusOfPick 状态。
  • AIS_StatusOfPick 枚举: 定义了不同的拾取状态,如已选择一个对象、已选择多个对象、未选择任何对象和拾取过程中的错误状态。

在使用 AIS_StatusOfPick 时,根据不同的返回状态来决定应用程序的行为,例如更新界面、执行操作或显示消息等。

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

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

相关文章

Artalk-CORS,跨域拦截问题

今天重新部署Artalk之后,遇到了CORS——跨域拦截的问题,卡了好一会记录一下。 起因 重新部署之后,浏览器一直提示CORS,之前在其他项目也遇到过类似的问题,原因就在于跨域问题。

功能测试 之 单模块测试----添加会员

1.需求分析 点击【添加会员】按钮后,页面跳转至添加会员详细页面。 说明: 会员昵称:必填,长度在20个字符(除去空格)以内,(会员昵称)可以重复;登录密码&#x…

Java零基础之多线程篇:线程生命周期

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

.net 6 api 修改URL为小写

我们创建的api项目,url是[Route(“[controller]”)],类似这样子定义的。我们的controller命名是大写字母开头的,显示在url很明显不是很好看(url不区分大小写)。转换方式: var builder WebApplication.Crea…

【JS重点18】原型链(面试重点)

一:原型链底层原理 以下面一段代码为例,基于原型对象(Star构造函数的原型对象)的继承使得不同构造函数的原型对象关联在一起(此处是最大的构造函数Object原型对象),并且这种关联的关系是一种链…

目标检测——YOLOv10算法解读

论文:YOLOv10: Real-Time End-to-End Object Detection (2024.5.23) 作者:Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, Guiguang Ding 链接:https://arxiv.org/abs/2405.14458 代码:https://github.com/THU…

购物网站系统

摘 要 随着互联网的快速发展,不同的平台软件也不断涌出市场,在众多的平台中,购物网站深受人们的欢迎,也成为生活中不可缺少的一部分。经过对国内外购物情况的调查,社区购物在近几年来成为电商发展的新趋势&#xff0c…

Vue - 第3天

文章目录 一、Vue生命周期二、Vue生命周期钩子三、工程化开发和脚手架1. 开发Vue的两种方式2. 脚手架Vue CLI基本介绍:好处:使用步骤: 四、项目目录介绍和运行流程1. 项目目录介绍2. 运行流程 五、组件化开发六、根组件 App.vue1. 根组件介绍…

shell数组

shell数组 文章目录 shell数组数组数组遍历冒泡排序 数组 定义:在集合中指定多个元素:元素的类型:整数。字符串,可以是浮点 作用:一次性的定义多个元素,可以为变量赋值提供便利。 数组的定义方法 数组名…

富唯智能打造的AGV搬运机器人转运机器人

AGV搬运机器人&转运机器人 AGV搬运机器人,内部搭载ICD系列核心控制器,拥有不同的移载平台,负载最高可达 1000kq;重复精度高达5mm;支持 Wi-Fi漫游,实现更稳健的网络数据交互;无轨化激光 SLAM 导航,配合 3D 避障相机…

Flutter-无限循环滚动标签

1. 序章 在现代移动应用开发中,滑动视图是常见的交互模式之一。特别是当你需要展示大量内容时,使用自动滚动的滑动视图可以显著提升用户体验。在这篇文章中,我们将讨论如何使用 Flutter 实现一个自动滚动的列表视图。 2. 效果 3. 实现思路 …

[Linux] 历史根源

UNIX系统: 1969年,由贝尔实验室的K.Thompson和D.M.Ritchie为PDP-7机器编写的一个分时操作系统, 最初使用汇编语言编写, 后来1972年C语言出世以后,二人由使用C写了UNIX3, 此后UNIX大为流行开来 UNIX流派树&a…

凌凯科技冲刺上市:2023年业绩反弹,靠关联交易助推业务发展?

近日,上海凌凯科技股份有限公司(下称“凌凯科技”)向港交所递交上市申请,华泰国际担任其独家保荐人。 透过招股书不难看出,在化学合成一体化这个虹吸效应显著的细分赛道中,凌凯科技拥有头部玩家的先发优势…

数据分析第十三讲:数据可视化入门(二)

数据可视化入门(二) 本章我们尝试用 matplotlib 来绘制一些高阶统计图表。正如前面所说的,大家可以通过 matplotlib 官方网站上提供的文档和示例来学习如何使用 matplotlib 并绘制出更加高级的统计图表;尤其是在定制一些比较复杂…

人工智能中的监督学习和无监督学习

欢迎来到 Papicatch的博客 目录 🍉引言 🍉监督学习 🍈基本思想 🍈具体过程 🍍数据收集 🍍数据预处理 🍍模型选择 🍍模型训练 🍍模型评估 🍍模型部署…

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

目录 写在开头 一、CNN的原理 1. 概述 2. 卷积层 内参数(卷积核本身) 外参数(填充和步幅) 输入与输出的尺寸关系 3. 多通道问题 多通道输入 多通道输出 4. 池化层 平均汇聚 最大值汇聚 二、手写数字识别 1. 任务…

[C++][数据结构][图][下][最短路径]详细讲解

目录 1.最短路径1.单源最短路径 -- Dijkstra算法2.单源最短路径 -- Bellman-Ford算法3.多源最短路径 -- Floyd-Warshall算法原理 1.最短路径 最短路径问题:从在带权有向图G中的某一顶点出发,找出一条通往另一顶点的最短路径,最短也就是沿路径…

spark学习总结

系列文章目录 第1天总结:spark基础学习 1- Spark基本介绍(了解)2- Spark入门案例(掌握)3- 常见面试题(掌握) 文章目录 系列文章目录前言一、Spark基本介绍1、Spark是什么1.1 定义1.2 Spark与M…

valgrind工具的交叉编译及使用

一 概述 valgrind是一款非常好用的工具,用于检测内存泄漏等,这里讲述如何将其交叉编译到arm开发板及如何使用 【C/C 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南 - 知乎 (zhihu.com) valgrind: fai…

60.指针数组和数组指针

一.指针数组 指针数组是一个数组&#xff0c;在指针数组中存放的是指针变量。 定义一个指针数组p int *p[5]; 内存模型如下&#xff1a; 指针数组的初始化 #include <stdio.h>int main(void) {int a1;int b2;int c3;int i;int *p[3] {&a,&b,&c};for(i0…