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.rhkb.cn/news/357005.html

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

相关文章

在同一个 Blazor 应用中结合 SQL-DB 和 MongoDB

介绍 传统上&#xff0c;在单应用程序中&#xff0c;我们对整个应用程序使用单个数据库服务器。但是&#xff0c;我将 SQL 数据库和 MongoDB 结合在同一个应用程序中。此应用程序将是 RDBMS 和 No SQL 数据库的组合。我们将从头开始创建一个 Blazor 应用程序&#xff0c;并使用…

Node.js 渲染三维模型并导出为图片

Node.js 渲染三维模型并导出为图片 1. 前言 本文将介绍如何在 Node.js 中使用 Three.js 进行 3D 模型渲染。通过结合 gl 和 canvas 这两个主要依赖库&#xff0c;我们能够在服务器端实现高效的 3D 渲染。这个方法解决了在服务器端生成和处理 3D 图形的需求&#xff0c;使得可…

Kotlin 语言基础学习

什么是Kotlin ? Kotiln翻译为中文是:靠他灵。它是由JetBrains 这家公司开发的,JetBrains 是一家编译器软件起家的,例如常用的WebStorm、IntelliJ IDEA等软件。 Kotlin官网 JetBrains 官网 Kotlin 语言目前的现状: 目前Android 已将Kotlin 作为官方开发语言。 Spring 框…

SVN学习(002 svn冲突解决)

尚硅谷SVN高级教程(svn操作详解) 总时长 4:53:00 共72P 此文章包含第20p-第p29的内容 冲突 产生冲突的操作 &#xff08;第一种 相互不影响的操作&#xff09; 用户1修改第二行 用户2修改第四行 用户1提交 用户2提交&#xff0c;提交的时候会提示版本已过时 这时将用…

ShareX,屏幕截图、屏幕录制和文件共享,还提供了丰富的高级功能和自定义选项

ShareX是一个免费开源的Windows应用程序&#xff0c;用于屏幕截图、屏幕录制和文件共享。它不仅支持基本的屏幕截图功能&#xff0c;还提供了丰富的高级功能和自定义选项&#xff0c;使其成为提高工作效率和截图体验的利器。以下是ShareX v16.1.0便携版的主要功能和特色&#x…

如何跳出认知偏差,个人认知能力升级

一、教程描述 什么是认知力&#xff1f;认知力&#xff08;cognitive ability&#xff09;&#xff0c;实际上就是指一个人的认知能力&#xff0c;是指人的大脑加工、储存和提取信息的能力&#xff0c;或者主观对非主观的事物的反映能力&#xff0c;如果变成大白话&#xff0c…

RIP与OSPF发布默认路由(华为)

#交换设备 RIP与OSPF发布默认路由 合理使用默认路由可以很大程度上减少本地路由表的大小&#xff0c;并可以较好的隐藏一个网络中的路由信息&#xff0c;保护自身网络的隐秘性 另外如果在同一个路由器两端使用了不同的路由协议&#xff0c;那么如果不做路由引入或者发布默认…

JVM 性能分析案列——使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题

在 windows 环境下实现。 参考文档 一、配置 JVM 参数 配置两个 JVM 参数&#xff1a; -XX:HeapDumpOnOutOfMemoryError&#xff0c;配置这个参数&#xff0c;会在发生内存溢出时 dump 生成内存快照文件&#xff08;xxx.hprof&#xff09;-XX:HeapDumpPathF:\logs&#xff…

公共 IP 地址和私有 IP 地址的区别总结

什么是IP地址&#xff1f; IP 地址&#xff0c;即互联网协议地址&#xff08;Internet Protocol Address&#xff09;&#xff0c;是网络设备在网络中进行通信的标识。IP 地址可以看作是设备在网络中的“地址”&#xff0c;有助于数据包在网络中找到正确的接收端。IP 地址主要…

华为---RIP路由协议的汇总

8.3 RIP路由协议的汇总 8.3.1 原理概述 当网络中路由器的路由条目非常多时&#xff0c;可以通过路由汇总(又称路由汇聚或路由聚合)来减少路由条目数&#xff0c;加快路由收敛时间和增强网络稳定性。路由汇总的原理是&#xff0c;同一个自然网段内的不同子网的路由在向外(其他…

UI设计速成课:理解模态窗口与非模态窗口的区别

我们日常所说的弹性框架是非常笼统的概念。我们习惯性地称之为对话框架、浮动层和提示条。弹性框架可以分为两种:模态弹性框架和非模态弹性框架。产品需要弹性框架来传递信息&#xff0c;用户需要弹性框架来接受反馈&#xff0c;但是没有经过推敲的弹出窗口设计很容易让用户感到…

链表中环的入口节点

链表中环的入口节点 描述 链表中环的入口节点 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n≤10000&#xff0c; 1<结点值<10000 要求&#xff1a;空间复杂度 O(1)…

Android使用MPAndroidChart 绘制折线图

效果图&#xff1a; 1.导入依赖 1.1在项目根目录下的build.gradle文件中添加代码&#xff08;注意不是app下的build.gradle&#xff09;&#xff1a; maven { url https://jitpack.io } 1.2在app下的build.gradle中的依赖下添加&#xff1a; implementation com.github.PhilJa…

外部存储器

外部存储器是主存的后援设备&#xff0c;也叫做辅助存储器&#xff0c;简称外存或辅存。 它的特点是容量大、速度慢、价格低&#xff0c;可以脱机保存信息&#xff0c;属于非易失性存储器。 外存主要有&#xff1a;光盘、磁带、磁盘&#xff1b;磁盘和磁带都属于磁表面存储器…

6G时代,即将来临!

日前&#xff0c;由未来移动通信论坛、紫金山实验室主办的2024全球6G技术大会在南京召开。本次大会以“创新预见6G未来”为主题&#xff0c;在大会开幕式上发布了协力推进全球6G统一标准行动的倡议和紫金山科技城加速培育以6G技术引领未来产业行动计划。 在我国已开展第五代移动…

Python发送Email的性能怎么样?如何配置?

Python发送Email怎么配置SMTP&#xff1f;批发邮件的方法技巧&#xff1f; Python是一种广泛使用的编程语言&#xff0c;因其简洁和强大的功能深受开发者喜爱。在许多应用场景中&#xff0c;Python发送Email是一个常见需求。那么&#xff0c;Python发送Email的性能怎么样呢&am…

HarmonyOS【ArkUI组件--TextInput】

1.文本输入框基本用法 2. 使用文本输入框组件&#xff08;如何实现输入数字改变图片大小&#xff09; 在此博客的基础上继续编写&#xff1a;HarmonyOS【ArkUI组件--Text】-CSDN博客 ①代码如下&#xff1a; import font from ohos.font Entry Component struct Index {State …

深入理解Python中的并发与异步的结合使用

​ 在上一篇文章中&#xff0c;我们讨论了异步编程中的性能优化技巧&#xff0c;并简单介绍了trio和curio库。今天&#xff0c;我们将深入探讨如何将并发编程与异步编程结合使用&#xff0c;并详细讲解如何利用trio和curio库优化异步编程中的性能。 文章目录 并发与异步编程的区…

Redis-数据类型-Bit的基本操作-getbit-setbit-Bitmap

文章目录 0、Bitmaps&#xff08;位图&#xff09;1、查看redis是否启动2、通过客户端连接redis3、切换到db7数据库4、设置&#xff08;或覆盖&#xff09;一个键&#xff08;key&#xff09;的值&#xff08;value&#xff09;5、获取存储在给定键&#xff08;key&#xff09;…

GPT 模型简史:从 GPT-1 到 GPT-4

文章目录 GPT-1GPT-2GPT-3从 GPT-3 到 InstructGPTGPT-3.5、Codex 和 ChatGPTGPT-4 GPT-1 2018 年年中&#xff0c;就在 Transformer 架构诞生⼀年后&#xff0c;OpenAI 发表了⼀篇题 为“Improving Language Understanding by Generative Pre-Training”的论文&#xff0c;作者…