可以举报一个做网络网站发大财吗,教育直播网站建设,想开一家网店,专业做pc+手机网站AIS_InteractiveContext 前言
交互上下文#xff08;Interactive Context#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是#xff0c;对于已经被交互上下文识别的交互对象#xff0c;必须使用上下文方法进行…AIS_InteractiveContext 前言
交互上下文Interactive Context允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是对于已经被交互上下文识别的交互对象必须使用上下文方法进行修改。如果交互对象尚未加载到交互上下文中您才能直接调用交互对象的方法。
每个可选择的对象必须指定负责整体选择对象的选择模式全局选择模式。交互上下文本身支持使用选择过滤器进行分解对象的选择。默认情况下全局选择模式等于0但如果需要可以重新定义。
Selection management 选择管理
1AddSelect
构造1将对象添加到选择中 构造2将对象添加到选择中
2SelectRectangle
选择在包围矩形内的对象。选择后应显式重绘视图。 参数
thePntMin [输入] 矩形的较小点以像素表示thePntMax [输入] 矩形的较大点以像素表示theView [输入] 定义矩形的活动视图theSelScheme [输入] 选择方案 返回值选择状态 另请参阅StdSelect_ViewerSelector3d::AllowOverlapDetection()
3SelectPolygon
选择多边形边界内找到的所有内容。选择后应显式重绘视图。 参数
thePolyline [输入] 定义多边形边界的折线以像素表示theView [输入] 定义折线的活动视图theSelScheme [输入] 选择方案 返回值选择状态
4SelectPoint
选择视图中由点拾取的最顶层对象。选择后应显式重绘视图。 参数
thePnt [输入] 视图内的点的像素坐标theView [输入] 定义点所在的活动视图theSelScheme [输入] 选择方案 返回值拾取状态
5SelectDetected
选择并突出显示之前通过 AIS_InteractiveContext::MoveTo() 方法检测到的对象取消之前选中的对象的高亮显示。选择后应显式重绘视图。 参数
theSelScheme [输入] 选择方案 返回值拾取状态 另请参阅HighlightStyle()定义所选所有者的默认高亮样式Prs3d_TypeOfHighlight_Selected 和 Prs3d_TypeOfHighlight_LocalSelectedPrsMgr_PresentableObject::HilightAttributes()定义所选所有者的每个对象高亮样式覆盖默认设置。
6BoundingBoxOfSelection
返回所选对象的边界框。
7Select
重载方法1
设置使用指定选择方案选择/取消选择的所有者列表。 参数
theOwners 要改变选择状态的所有者列表theSelScheme 选择方案 返回值拾取状态
重载方法2:
存储并突出显示之前检测到的对象取消之前选择的对象的高亮显示。参见 MoveTo()。已弃用(“此方法已弃用 - 应调用带有 AIS_SelectionScheme_Replace 参数的 SelectDetected() 方法代替”)
重载方法3
选择在视图中由像素最小值和最大值XPMin、YPMin、XPMax 和 YPMax定义的边界矩形内找到的所有内容。检测到的对象将传递给主视图然后进行更新。 已弃用(“此方法已弃用 - 应调用带有 AIS_SelectionScheme_Replace 参数的 SelectRectangle() 方法代替”)
重载方法4
折线选择清除先前的选取列表。 已弃用(“此方法已弃用 - 应调用带有 AIS_SelectionScheme_Replace 参数的 SelectPolygon() 方法代替”)
8FitSelected
重载方法1、2
将视图适应所选对象的边界。如果将 AIS_InteractiveObject 的无限状态设置为 true则无限对象将被忽略。
9ToHilightSelected
返回值指定当鼠标光标移到选定对象上方时是否应突出显示该对象。 另请参阅 MoveTo()。
10SetToHilightSelected
指定当鼠标光标移到选定对象上方时是否应突出显示该对象在 MoveTo 方法中。默认情况下此值为 false在这种情况下选定的对象不会被突出显示。 另请参阅 MoveTo()。
11AutomaticHilight
如果自动高亮模式处于活动状态则返回 true默认情况下为 TRUE。 另请参阅 MoveTo()、Select()、HilightWithColor()、Unhilight()。
12SetAutomaticHilight
设置检测到和选定实体的突出显示状态。此函数允许您断开自动模式。
MoveTo() 将填充检测到实体的列表而 Select() 将设置检测到对象的选定状态而不考虑此标志但如果禁用了 AutomaticHiligh()它们的突出显示状态将不受影响因此应用程序可以根据需要以不同方式执行自定义突出显示。
此 API 应与 SelectMgr_SelectableObject::SetAutoHilight() 区分开来后者用于实现特定交互对象类的自定义突出显示逻辑。 另请参阅 MoveTo()、Select()、HilightWithColor()、Unhilight()。
13SetSelected
重载方法1
将交互式对象 aniObj 放入选定对象的列表中。执行选择过滤器检查。
重载方法2
取消先前选定的所有者的高亮显示并将它们标记为未选定状态。将给定的所有者标记为已选定并突出显示它。执行选择过滤器检查。
14AddOrRemoveSelected
重载方法1
允许根据其选择状态来突出显示或取消突出显示给定的所有者。
重载方法2
允许根据其选择状态对给定的所有者进行突出显示或取消突出显示操作。
15IsSelected
重载方法1
返回 true 表示给定的对象已被选中。
重载方法2
返回 true 表示给定的所有者已被选中。
16FirstSelectedObject
返回当前选定列表中的第一个选定对象。
17NbSelected
使用 InitSelected() MoreSelected() NextSelected() 迭代器计算当前选定实体的数量。 另请参见 SelectedOwner()、InitSelected()、MoreSelected()、NextSelected()。
18InitSelected
初始化对选定对象的扫描。 另请参见 SelectedOwner()、MoreSelected()、NextSelected()。
19MoreSelected
如果在扫描选定对象列表时找到另一个对象则返回 true。 另请参见 SelectedOwner()、InitSelected()、NextSelected()。
20NextSelected
继续扫描到选定对象列表中的下一个对象。 另请参见 SelectedOwner()、InitSelected()、MoreSelected()。
21SelectedOwner
返回选定实体的所有者。 另请参见 InitSelected()、MoreSelected()、NextSelected()。
22SelectedInteractive
返回 Handle(AIS_InteractiveObject)::DownCast(SelectedOwner()-Selectable())。
另请参见 SelectedOwner()。 重点 转换方法
23HasSelectedShape
如果交互上下文中选择了形状则返回 TRUE。
另请参见 SelectedShape()。
24SelectedShape
返回选定的形状。基本上它只是由 StdSelect_BRepOwner 存储的形状并应用了图形变换
const Handle(StdSelect_BRepOwner) aBRepOwner Handle(StdSelect_BRepOwner)::DownCast(SelectedOwner());
TopoDS_Shape aSelShape aBRepOwner-Shape();
TopoDS_Shape aLocatedShape aSelShape.Located(aBRepOwner-Location() * aSelShape.Location());另请参见 SelectedOwner()、HasSelectedShape()。 重点 转换方法
25HasApplicative
如果上下文中存在通过鼠标检测到的实体则返回 true。
另请参见 DetectedOwner()、HasNextDetected()、HilightPreviousDetected()、HilightNextDetected()。
26Applicative
返回 SelectedInteractive()-GetOwner()。
另请参见 SelectedOwner()。
用法用例
当使用OpenCASCADE的AIS_InteractiveContext进行选择管理时可以基于不同的交互需求和场景来执行多种操作。以下是用例示例
1. 利用选择状态进行对象操作 获取当前选择的对象 Handle(AIS_InteractiveObject) selectedObject myContext-SelectedInteractive();
if (!selectedObject.IsNull()) {// 对选定对象执行操作如获取属性、修改颜色等selectedObject-SetColor(Quantity_NOC_RED);
}通过 SelectedInteractive() 方法获取当前选定的交互式对象并可以在此基础上执行相应的操作如修改颜色、获取属性等。 根据选择执行特定操作 if (myContext-HasSelectedShape()) {TopoDS_Shape selectedShape myContext-SelectedShape();// 执行基于选定形状的操作如分析、处理等
}使用 HasSelectedShape() 和 SelectedShape() 方法检查和获取当前选定的形状并在此基础上执行特定的操作。
2. 多选和集合操作 获取所有选定的对象 for (myContext-InitSelected(); myContext-MoreSelected(); myContext-NextSelected()) {Handle(AIS_InteractiveObject) selectedObject myContext-SelectedInteractive();// 处理每个选定的对象如打印信息、处理属性等
}使用 InitSelected()、MoreSelected() 和 NextSelected() 方法遍历所有选定的对象并执行适当的操作。 添加和移除选择对象 myContext-ShiftSelect(...); // 添加新对象到当前选择
myContext-ShiftSelect(...); // 再次选择以移除对象使用 ShiftSelect(...) 方法可以根据需要添加或移除对象到当前选择集合中。
3. 自定义高亮显示和选择模式 自定义高亮显示 myContext-HilightWithColor(anObject, Quantity_NOC_YELLOW);使用 HilightWithColor() 方法为指定的对象设置自定义的高亮显示颜色。 设置选择模式 myContext-SetSelectionMode(AIS_SelectionMode::AIS_SelectionMode_EntityOwner);使用 SetSelectionMode() 方法设置选择模式以控制如何处理选择操作如选择对象或选择对象所有者等。
4. 事件处理和用户交互 处理选择事件 void MyEventHandler::OnSelectEvent(const AIS_InteractiveObject object, const Standard_Boolean isSelected) {// 处理选择事件根据选择状态执行相应操作if (isSelected) {// 对象被选中时执行的操作} else {// 对象取消选中时执行的操作}
}使用事件处理器如自定义的 MyEventHandler 类来处理选择事件根据选择状态执行相应的操作。
相关类和方法
AIS_InteractiveContext: 主要类用于管理交互式对象、选择和操作。AIS_SelectionMode: 枚举定义不同的选择模式如选择对象或选择对象所有者。事件处理器类用于处理选择事件和与选择相关的操作。
这些用例展示了如何利用OpenCASCADE中的 AIS_InteractiveContext 类进行灵活的选择管理和交互操作以实现各种复杂的3D场景应用需求。通过这些方法和技术可以有效地增强应用程序的用户体验和交互性。
immediate mode rendering 即时模式渲染
续看篇章5