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应用程序的交互性和视觉效果。

posted @ 2024-06-21 06:56  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源