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
已弃用:
使用过时参数 theToAllowDecomposition
的 Display()
方法已弃用。
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
已弃用:
使用过时参数 theToAllowDecomposition
的 Load()
方法已弃用。
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_Color
和Quantity_NameOfColor
: 用于设置颜色的类和枚举。Graphic3d_MaterialAspect
: 用于设置对象材质的类。Prs3d_Drawer
: 用于设置图形属性的类。
通过这些用例,可以看到如何利用 AIS_InteractiveContext
的丰富功能来控制和管理OpenCASCADE中3D场景中对象的显示效果,从而实现各种复杂的可视化需求和用户交互操作。
Selection management
续看篇章2