opencascade AIS_InteractiveContext源码学习3 highlighting management 对象高亮管理

本文主要是介绍opencascade AIS_InteractiveContext源码学习3 highlighting management 对象高亮管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AIS_InteractiveContext

在这里插入图片描述

前言

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

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

highlighting management

24:Update
HighlightStyle() [1/4]
inline const Handle< Prs3d_Drawer >& AIS_InteractiveContext::HighlightStyle() const

返回当前动态突出显示样式设置,对应于 Prs3d_TypeOfHighlight_Dynamic。这只是一个指向 HighlightStyle(Prs3d_TypeOfHighlight_Dynamic) 的快捷方式。

HighlightStyle() [2/4]
Standard_Boolean AIS_InteractiveContext::HighlightStyle(const Handle< AIS_InteractiveObject >& theObj, Handle< Prs3d_Drawer >& theStyle) const

如果对象标记为通过全局状态进行突出显示,则返回对象的突出显示样式。
参数

  • theObj [in] 要检查的对象
HighlightStyle() [3/4]
Standard_Boolean AIS_InteractiveContext::HighlightStyle(const Handle< SelectMgr_EntityOwner >& theOwner, Handle< Prs3d_Drawer >& theStyle) const

如果选择了所有者,则返回所有者的突出显示样式。
参数

  • theOwner [in] 要检查的所有者
HighlightStyle() [4/4]
inline const Handle< Prs3d_Drawer >& AIS_InteractiveContext::HighlightStyle(const Prs3d_TypeOfHighlight theStyleType) const

返回默认的突出显示样式设置(可以被 PrsMgr_PresentableObject 覆盖)。

提示:尽管突出显示样式由 Prs3d_Drawer 定义,但在大多数情况下,实际上只会使用从其基类 Graphic3d_PresentationAttributes 派生的一小组属性。

所有类型的默认突出显示样式为 Aspect_TOHM_COLOR。其他默认值:

  • Prs3d_TypeOfHighlight_Dynamic
    • 颜色:Quantity_NOC_CYAN1;
    • 图层:Graphic3d_ZLayerId_Top,对象突出显示绘制在立即层内的主场景顶部,因此 V3d_View::RedrawImmediate() 将足以看到更新;
  • Prs3d_TypeOfHighlight_LocalDynamic
    • 颜色:Quantity_NOC_CYAN1;
    • 图层:Graphic3d_ZLayerId_Topmost,对象部分突出显示绘制在立即层内的主场景顶部,并清除深度(即使重叠的几何体也将被显示);
  • Prs3d_TypeOfHighlight_Selected
    • 颜色:Quantity_NOC_GRAY80;
    • 图层:Graphic3d_ZLayerId_UNKNOWN,对象突出显示绘制在与对象本身相同的层内(例如,默认情况下为 Graphic3d_ZLayerId_Default)并增加了优先级。

参数

  • [in] theStyleType 要修改的突出显示样式
    返回
    与指定突出显示类型相关联的绘图器

另请参阅

  • 使用 Prs3d_TypeOfHighlight_Dynamic 和 Prs3d_TypeOfHighlight_LocalDynamic 类型的 MoveTo()
  • 使用 Prs3d_TypeOfHighlight_Selected 和 Prs3d_TypeOfHighlight_LocalSelected 类型的 SelectDetected()
  • PrsMgr_PresentableObject::DynamicHilightAttributes() 在对象级别上覆盖 Prs3d_TypeOfHighlight_Dynamic 和 Prs3d_TypeOfHighlight_LocalDynamic 的默认值
  • PrsMgr_PresentableObject::HilightAttributes() 在对象级别上覆盖 Prs3d_TypeOfHighlight_Selected 和 Prs3d_TypeOfHighlight_LocalSelected 的默认值
25:SetHighlightStyle() [1/2]

设置与 Prs3d_TypeOfHighlight_Selected 对应的动态突出显示样式。这只是一个指向 SetHighlightStyle(Prs3d_TypeOfHighlight_Dynamic, theStyle) 的快捷方式。

SetHighlightStyle() [2/2]

设置突出显示样式设置。提示:最好修改由方法 HighlightStyle() 返回的现有样式,而不是创建新的 Prs3d_Drawer,以避免由于错误配置而导致意外结果。

如果创建了新的突出显示样式,请务必检查其演示 Z 层,否则突出显示可能无法按预期工作。

26:SelectionStyle

返回当前选择样式设置,对应于 Prs3d_TypeOfHighlight_Selected。这只是一个指向 HighlightStyle(Prs3d_TypeOfHighlight_Selected) 的快捷方式。

27:SetSelectionStyle

设置选择突出显示的样式。这只是一个指向 SetHighlightStyle(Prs3d_TypeOfHighlight_Selected, theStyle) 的快捷方式。

28:HilightWithColor

更改视图中对象的所有线条的颜色。

29:Unhilight

从对象中移除突出显示。

30:DisplayPriority

返回对象的显示优先级。

31:SetDisplayPriority

重载1:设置对象可见部分呈现的显示优先级。
重载2:(“从 OCCT7.7 开始已弃用,应该传递 Graphic3d_DisplayPriority 而不是整数到 SetDisplayPriority() 函数”)

32:GetZLayer

获取设置为显示的交互对象的 Z 层 ID。

33:SetZLayer

为交互对象设置 Z 层 ID。Z 层可以用于在场景中的其他对象前临时显示某个对象的呈现。Z 层的 ID 由 V3d_Viewer 生成。

34:SetViewAffinity

设置在指定视图中的对象可见性。如果对象在此上下文中未显示,则没有效果。

Display Mode management

35:DisplayMode

返回默认使用的显示模式设置。

36:SetDisplayMode

重载1:设置可见交互对象的显示模式。theMode 提供实体 theIObj 的显示模式索引。
重载2:设置可见交互对象(没有重写显示模式的对象)的显示模式。

37:UnsetDisplayMode

取消设置可见交互对象的显示模式。

用法用例

在OpenCASCADE中,AIS_InteractiveContext 提供了丰富的高亮管理功能,允许用户控制和管理3D场景中对象的高亮显示。以下是关于 AIS_InteractiveContext 中高亮管理的常见用法和用例:

1. 高亮显示对象
  • 使用默认颜色高亮显示对象:

    myContext->HilightWithColor(anObject, Quantity_NOC_YELLOW);
    

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

  • 使用自定义颜色高亮显示对象:

    Quantity_Color customColor(Quantity_NOC_GREEN);
    myContext->HilightWithColor(anObject, customColor);
    

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

2. 取消高亮显示
  • 取消对象的高亮显示:

    myContext->Unhilight(anObject, Standard_True);
    

    使用 Unhilight() 方法取消对象 anObject 的高亮显示。第二个参数指定是否更新显示状态。

3. 自动高亮显示控制
  • 启用自动高亮显示:

    myContext->AutomaticHilight(Standard_True);
    

    使用 AutomaticHilight(Standard_True) 方法启用自动高亮显示功能。默认情况下,该功能是启用的。

  • 禁用自动高亮显示:

    myContext->AutomaticHilight(Standard_False);
    

    使用 AutomaticHilight(Standard_False) 方法禁用自动高亮显示功能,允许用户手动控制高亮显示效果。

4. 自定义高亮显示效果
  • 自定义高亮显示属性:

    Handle(Prs3d_Drawer) drawer = myContext->HighlightStyle();
    drawer->SetLineAspect(...);  // 设置线型属性
    drawer->SetTransparency(...);  // 设置透明度
    myContext->SetHighlightStyle(drawer);
    

    使用 HighlightStyle() 方法获取当前的高亮显示样式,然后使用 SetLineAspect()SetTransparency() 等方法进行自定义设置,最后使用 SetHighlightStyle() 方法应用自定义的高亮显示样式。

5. 高亮显示与选择集成
  • 高亮显示当前选定对象:

    myContext->HighlightCurrentObject(Standard_True);
    

    使用 HighlightCurrentObject(Standard_True) 方法高亮显示当前选定对象。可以通过将参数设置为 Standard_False 来取消该效果。

6. 自定义高亮显示事件处理
  • 高亮显示事件处理器:

    void MyHighlightEventHandler::OnHighlight(const AIS_InteractiveObject& object, const Standard_Boolean isHighlighted) {// 处理高亮显示事件
    }
    myContext->AddHighlightEventHandler(myHighlightHandler);
    

    使用事件处理器(如 MyHighlightEventHandler 类)处理高亮显示事件,根据需要执行自定义操作。

相关类和方法:

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

通过这些用例,可以看到如何利用 AIS_InteractiveContext 的高亮管理功能来实现灵活、精确的对象高亮显示,以增强OpenCASCADE应用程序的交互性和视觉效果。

这篇关于opencascade AIS_InteractiveContext源码学习3 highlighting management 对象高亮管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080769

相关文章

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版