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_Color
和Quantity_NameOfColor
: 用于设置颜色的类和枚举。Prs3d_Drawer
: 用于设置图形属性的类。
通过这些用例,可以看到如何利用 AIS_InteractiveContext
的高亮管理功能来实现灵活、精确的对象高亮显示,以增强OpenCASCADE应用程序的交互性和视觉效果。