opencascade AIS_InteractiveContext源码学习1 object display management 对象显示管理

AIS_InteractiveContext

在这里插入图片描述

前言

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

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

方法:object display management 对象显示管理

1:AIS_InteractiveContext()

AIS_InteractiveContext::AIS_InteractiveContext (const Handle< V3d_Viewer > & MainViewer)

构造由主视图器 MainViewer 定义的交互上下文对象。

###:2:~AIS_InteractiveContext()

virtual AIS_InteractiveContext::~AIS_InteractiveContext ()

虚析构函数。

3:DisplayStatus()

PrsMgr_DisplayStatus AIS_InteractiveContext::DisplayStatus (const Handle< AIS_InteractiveObject > & anIobj) const

返回实体 anIobj 的显示状态。显示状态可以是以下几种之一:

  • AIS_DS_Displayed:在主视图器中显示。
  • AIS_DS_Erased:在主视图器中隐藏。
  • AIS_DS_Temporary:临时显示。
  • AIS_DS_None:未显示在任何地方。

4:Status()

void AIS_InteractiveContext::Status (const Handle< AIS_InteractiveObject > & anObj, TCollection_ExtendedString & astatus) const

返回交互对象 anObj 在交互上下文中的视图状态。

这意味着该方法将获取指定交互对象在当前上下文中的状态,并将状态信息存储在 astatus 参数中。

5:IsDisplayed() [1/2]

Standard_Boolean AIS_InteractiveContext::IsDisplayed (const Handle< AIS_InteractiveObject > & anIobj) const

如果对象在交互上下文中显示,返回 true

6:IsDisplayed() [2/2]

Standard_Boolean AIS_InteractiveContext::IsDisplayed (const Handle< AIS_InteractiveObject > & anIobj, const Standard_Integer aMode) const

如果对象在交互上下文中以特定模式显示,返回 true

7:SetAutoActivateSelection()

void AIS_InteractiveContext::SetAutoActivateSelection (const Standard_Boolean theIsAuto) inline

启用或禁用在显示对象时自动激活默认选择模式。

8:GetAutoActivateSelection()

Standard_Boolean AIS_InteractiveContext::GetAutoActivateSelection () const inline

管理是否在显示新对象时自动激活默认选择模式;默认值为 TRUE。

9:Display() 方法翻译
9.1:Display() [1/3]

void AIS_InteractiveContext::Display (const Handle<AIS_InteractiveObject>& theIObj, const Standard_Boolean theToUpdateViewer)

使用默认显示模式在此上下文中显示对象。这将是对象的默认显示模式(如果有的话)。否则,将使用上下文模式。如果 GetAutoActivateSelection() 为 TRUE,则激活交互对象的默认选择模式。通常情况下,这是 0。

9.2:Display() [2/3]

void AIS_InteractiveContext::Display (const Handle<AIS_InteractiveObject>& theIObj, const Standard_Integer theDispMode, const Standard_Integer theSelectionMode, const Standard_Boolean theToUpdateViewer, const PrsMgr_DisplayStatus theDispStatus = PrsMgr_DisplayStatus_None)

设置指定对象的状态、显示模式和选择模式。如果 theSelectionMode 等于 -1,theIObj 将不会被激活:它将被显示,但不会是可选择的。

9.3:Display() [3/3]

void AIS_InteractiveContext::Display (const Handle<AIS_InteractiveObject>& theIObj, const Standard_Integer theDispMode, const Standard_Integer theSelectionMode, const Standard_Boolean theToUpdateViewer, const Standard_Boolean theToAllowDecomposition, const PrsMgr_DisplayStatus theDispStatus = PrsMgr_DisplayStatus_None)

inline
已弃用:
使用过时参数 theToAllowDecompositionDisplay() 方法已弃用。

10:Load() 方法翻译
10.1:Load() [1/2]

void AIS_InteractiveContext::Load (const Handle<AIS_InteractiveObject>& theObj, const Standard_Integer theSelectionMode = -1)

允许使用给定的选择模式和/或所需的分解选项加载交互对象,无论对象是否可视化。加载的对象将是可选择的,但仅在被选择器检测到时才以高亮显示。

10.2:Load() [2/2]

void AIS_InteractiveContext::Load (const Handle<AIS_InteractiveObject>& theObj, Standard_Integer theSelectionMode, Standard_Boolean)

inline
已弃用:
使用过时参数 theToAllowDecompositionLoad() 方法已弃用。

11:Erase()
  • 功能: 隐藏对象。
  • 参数:
    • theIObj:要隐藏的对象。
    • theToUpdateViewer:是否更新视图以反映更改。
  • 描述: 对象的表示仅标记为不可见,因此将被排除在重绘之外。要显示隐藏的对象,请使用 Display() 方法。
12:EraseAll()
  • 功能: 隐藏所有对象。
  • 参数:
    • theToUpdateViewer:是否更新视图以反映更改。
  • 描述: 对象的表示仅标记为不可见,因此将被排除在重绘之外。要显示所有隐藏的对象,请使用 DisplayAll() 方法。
13:DisplayAll()
  • 功能: 显示所有隐藏的对象。
  • 参数:
    • theToUpdateViewer:是否更新视图以反映更改。
  • 描述: 该方法用于显示所有之前隐藏的对象,使它们再次可见。
14:EraseSelected()
  • 功能: 隐藏选定的对象。
  • 参数:
    • theToUpdateViewer:是否更新视图以反映更改。
  • 描述: 该方法用于隐藏选定的对象,使其不再可见。对象的显示状态将被标记为隐藏,因此在重绘时将被排除。要显示隐藏的对象,请使用 Display() 方法。
15:DisplaySelected()
  • 功能: 显示当前选定的对象。
  • 参数: theToUpdateViewer:是否更新视图以反映更改。
  • 描述: 该方法用于显示当前选定的对象,使其可见。如果对象已被隐藏,则会显示出来。
16:ClearPrs

清空由 theMode 索引的模式的图形呈现。注意!会移除 theIObj。如果 theIObj 之前被激活,它仍然是激活状态。

17:Remove

从每个视图中移除对象。

18:RemoveAll

从上下文中移除所有对象

19:Redisplay

重载1: 重新计算给定类型和给定签名的已显示对象的 Prs/选择。如果签名 = -1,则不考虑签名标准。

20:Redisplay

重载2: 重新计算对象的可见部分的呈现。如果 theAllModes 为 true,即使是不可见的,所有呈现也都存在于对象中。

21:RecomputePrsOnly

重新计算已显示的呈现,并标记其他呈现。但不更新这些呈现。

22: RecomputeSelectionOnly

重新计算活动选择,并标记其他选择。但不更新这些呈现。

23:Update

通过检查和重新计算标记为“需要重新计算”的呈现和选择结构来更新显示的交互对象。此方法不会强制任何重新计算。该方法即使在特定选择器中加载而未激活,也会重新计算选择。

用法用例

当使用OpenCASCADE中的 AIS_InteractiveContext 进行对象显示管理时,以下是更多的用法和用例示例:

1. 显示控制
  • 显示特定类型的对象:

    myContext->DisplayOnly(ShapeType_COMPOUND);
    

    使用 DisplayOnly() 方法显示指定类型的对象。这里的 ShapeType_COMPOUND 是OpenCASCADE中定义的一种对象类型。

  • 显示或隐藏所有辅助图形:

    myContext->Display(AIS_KOI_DatumAxes, Standard_True);
    

    使用 Display() 方法显示或隐藏特定类型的辅助图形,如坐标轴。

2. 颜色和材质设置
  • 设置对象的颜色:

    Quantity_Color color(Quantity_NOC_BLUE);
    myContext->SetColor(anObject, color, Standard_True);
    

    使用 SetColor() 方法设置对象 anObject 的颜色,并指定是否更新显示。

  • 设置对象的材质:

    Graphic3d_MaterialAspect material(Graphic3d_NOM_PLASTIC);
    myContext->SetMaterial(anObject, material, Standard_True);
    

    使用 SetMaterial() 方法设置对象 anObject 的材质属性,并指定是否更新显示。

3. 显示模式和属性
  • 设置对象的显示模式:

    myContext->SetDisplayMode(anObject, 1, Standard_True);
    

    使用 SetDisplayMode() 方法设置对象 anObject 的显示模式。这里的 1 表示一种特定的显示模式。

  • 设置对象的线宽:

    myContext->SetWidth(anObject, 2.0);
    

    使用 SetWidth() 方法设置对象 anObject 的线宽。

4. 交互和高亮显示
  • 高亮显示对象:

    myContext->HilightWithColor(anObject, Quantity_NOC_YELLOW);
    

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

  • 取消高亮显示:

    myContext->Unhilight(anObject, Standard_True);
    

    使用 Unhilight() 方法取消对象 anObject 的高亮显示。

5. 控制和状态管理
  • 隐藏所有对象:

    myContext->EraseAll(Standard_False);
    

    使用 EraseAll() 方法隐藏所有对象,并指定是否完全擦除。

  • 显示所有对象:

    myContext->DisplayAll(Standard_False);
    

    使用 DisplayAll() 方法显示所有对象,并指定是否更新显示状态。

6. 自定义图形属性
  • 添加图形属性:

    Handle(Prs3d_Drawer) drawer = myContext->DefaultDrawer();
    drawer->SetLineAspect(...);
    myContext->SetDisplayStyle(anObject, drawer);
    

    使用 SetDisplayStyle() 方法为对象 anObject 设置自定义的图形属性,如线型、线宽等。

7 光照和阴影效果

启用/禁用光照效果:

myContext->SetDisplayMode(anObject, 0, Standard_True);
使用 SetDisplayMode() 方法来切换对象 anObject 的光照效果。第一个参数是光照模式。

启用/禁用阴影效果:

myContext->SetDisplayMode(anObject, 2, Standard_True);
使用 SetDisplayMode() 方法来切换对象 anObject 的阴影效果。第一个参数是阴影模式。

相关类和方法:

  • AIS_InteractiveContext: 主要类,用于管理交互式对象、选择和显示。
  • Quantity_ColorQuantity_NameOfColor: 用于设置颜色的类和枚举。
  • Graphic3d_MaterialAspect: 用于设置对象材质的类。
  • Prs3d_Drawer: 用于设置图形属性的类。

通过这些用例,可以看到如何利用 AIS_InteractiveContext 的丰富功能来控制和管理OpenCASCADE中3D场景中对象的显示效果,从而实现各种复杂的可视化需求和用户交互操作。

Selection management

续看篇章2

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

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

相关文章

centOS Stream9配置NAT8网络

首先将VMware关机&#xff0c;添加网络适配器 启动虚拟机&#xff0c;查看ens192是否打开连接 安装的图形化需要查看右上角电源处网卡是否连接 最小化安装一般不会出现未连接的状态 使用ip a 查看 配置网卡文件 cd /etc/NetworkManager/system-connections/cd到当前目录下…

7-Zip

最牛掰的解压缩的开源软件&#xff01;赏&#xff01;&#xff01;&#xff01;&#xff01; 概述 7-Zip 是一款免费开源的文件归档和压缩软件&#xff0c;由于其高压缩比和支持多种格式等优势&#xff0c;越来越受到用户的青睐。7-Zip 最初由一位俄罗斯程序员开发&#xff0c…

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

uniapp app一键登录

一键登录不需要单独写页面&#xff0c;uniapp 有原生的页面 第一步&#xff0c;登录Dcloud后台》我的应用》点击应用名称 填写完点击 uniCloud模块新建一个服务空间》选择免费 , 创建完点击一键登录&#xff0c;添加应用&#xff0c;这个需要审核&#xff0c;“大概一天左右”…

ORM框架SQLAlchemy

ORM框架SQLAlchemy 目录 ORM框架SQLAlchemy介绍安装架构连接数据库1. PostgreSQL2. MySQL3. Oracle4. Microsoft SQL Server5. SQLite 创建连接池原生Python操作数据库SQLAlchemy的ORM操作创建表外键字段的创建一对多多对多 ORM操作增删改查查询添加删除修改 介绍 sqlalchemy是…

帝国CMS二次开发H5手游如何让同一个url 不同的模板

帝国CMS在二次开发《72游戏网》的时候&#xff0c;H5手游如何让同一个url 不同的模板 比如&#xff1a;www.72yy.com/you/11935.html 是H5游戏宣传页 由于很多H5游戏和网页游戏都是需要使用iframe来嵌套使用的 利于自己网站SEO收录优化 那么就再复制一套程序 用二级目录或者二…

一种基于非线性滤波过程的旋转机械故障诊断方法(MATLAB)

在众多的旋转机械故障诊断方法中&#xff0c;包络分析&#xff0c;又称为共振解调技术&#xff0c;是目前应用最为成功的方法之一。首先&#xff0c;对激励引起的共振频带进行带通滤波&#xff0c;然后对滤波信号进行包络谱分析&#xff0c;通过识别包络谱中的故障相关的特征频…

【Linux基础IO】重定向以及原理分析

我们先来看下面一个情况&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define filename "text.txt"int main(){close(1);//关…

[Linux] 系统管理

全局配置文件 用户个性化配置 配置文件的种类 alias命令和unalias命令 进程管理 进程表

使用Docker在Mac上部署OnlyOffice,预览编辑word、excel、ppt非常好

前端编辑word、ppt文档&#xff0c;开源免费方案并没有找到合适的&#xff0c;像wps、石墨文档都是自研的方案。实现过程中wps采用的svg方案&#xff0c;而石墨文档采用的是canvas&#xff0c;它们均是自己来实现编辑器&#xff0c;不依赖浏览器提供的编辑器&#xff08;conten…

嵌入式Linux:Linux系统中文件类型

目录 1、普通文件 2、目录文件 3、字符设备文件 4、块设备文件 5、符号链接文件 6、套接字文件 7、管道文件 8、stat命令和ls命令 8.1、stat命令 8.2、ls命令 9、stat、fstat、lstat函数 9.1、stat函数 9.2、fstat函数 9.3、lstat函数 在Windows系统中&#xff0…

【Python】已完美解决:(Python键盘中断报错问题) KeyboardInterrupt

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例&#xff08;结合实战场景&#xff09;五、注意事项 已解决&#xff1a;Python中处理KeyboardInterrupt&#xff08;键盘中断&#xff09;报错问题 一、问题背景 在Python编程中&#xff0c;当我们运…

Java | Leetcode Java题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] numbers, int target) {int low 0, high numbers.length - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return new int[]{low 1, high 1};} else i…

人工智能指数报告

2024人工智能指数报告&#xff08;一&#xff09;&#xff1a;研发 前言 全面分析人工智能的发展现状。 从2017年开始&#xff0c;斯坦福大学人工智能研究所&#xff08;HAI&#xff09;每年都会发布一份人工智能的研究报告&#xff0c;人工智能指数报告&#xff08;AII&…

数据结构:快速排序,归并排序,计数排序的实现分析

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小新的主页&#xff1a;编程版小新-CSDN博客 1.快排 1.1算法思想 选择一个基准元素&#xff0c;…

服务器SSH 免密码登录

1. 背景 为了服务器的安全着想&#xff0c;设置的服务器密钥非常长。但是这导致每次连接服务器都需要输入一长串的密码&#xff0c;把人折腾的很痛苦&#xff0c;所以我就在想&#xff0c;能不能在终端SSH的时候无需输入密码。 windows 可以使用 xshell 软件&#xff0c;会自…

安装react之nvm版本低引起的问题

1.背景 准备搭建一个react&#xff0c;然后看官网文档 创建项目&#xff0c;使用命令行 npx create-next-applatest 创建项目的流程都是正常的。当我准备运行项目的时候&#xff0c;报错了 原先的报错没有了&#xff0c;从网上找了一个类似的 重要的内容是&#xff1a;当前…

锂电池寿命预测 | Matlab基于ARIMA的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于ARIMA的锂电池寿命预测 NASA数据集&#xff0c;B0005号电池&#xff0c;选择前110个数据训练&#xff0c;后58个数据测试预测。程序包含去趋势线、差分、平稳化及AIC准则判定p和q。命令窗…

【调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法】

调试笔记-系列文章目录 调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤搜…

webstorm yarn环境配置

1. 安装nodejs https://nodejs.cn/download/ 2. 安装npm npm i yarn -g3.下载并安装webstorm https://www.jetbrains.com/webstorm/ 4. 打开settings确认node和yarn的配置正确5. 打开项目更新包 yarn install