配对大冒险:语义分析怎么玩“找朋友“游戏?[特殊字符]
2026/6/7 3:42:25
AIS_InteractiveObject是 OCCT 中用于可视化交互的核心类之一,属于 AIS(Application Interactive Services)模块。它代表一个可以在 3D 视图中显示并与用户交互的几何或拓扑对象(如点、线、面、体等),是所有可交互显示对象的基类。
AIS_InteractiveObject类TopoDS_Shape或自定义几何数据以图形方式渲染到 3D 视图中。
AIS_InteractiveObject主要负责将底层几何/拓扑数据(如TopoDS_Shape)与 3D 图形显示、用户交互(如选择、高亮)桥接起来。
AIS_InteractiveObject的本质是数据封装+接口标准化:
AIS_Shape、AIS_Text)实现具体逻辑;AIS_InteractiveContext(场景上下文)管理生命周期,完成渲染、选择、操纵的调度。
AIS_InteractiveObject无法独立工作,必须依附AIS_InteractiveContext(场景上下文),完整流程如下:
1. 初始化 → 2. 显示校验 → 3. 渲染 → 4. 交互选择 → 5. 动态更新AIS_Shape),绑定几何数据(如TopoDS_Shape);AIS_InteractiveContext::Display(aisObj)将对象注册到场景上下文,上下文接管对象的生命周期。AcceptDisplayMode(theMode),判定对象是否支持指定显示模式(如着色AIS_Shaded、线框AIS_WireFrame);false,则拒绝显示该模式;若返回true,进入渲染阶段。Compute()接口,触发子类生成GPU可渲染的图元数据(如Graphic3d_ArrayOfTriangles、Graphic3d_ArrayOfSegments);Prs3d_Presentation容器,由PrsMgr_PresentationManager3d(渲染管理器)提交到Graphic3d_Structure,最终在V3d_View中绘制;Redisplay()。ComputeSelection()接口,子类生成选择敏感区域(如Select3D_SensitiveFace、Select3D_SensitiveEdge);SelectMgr_SelectionManager检测鼠标坐标是否命中敏感区域,若命中则标记对象为“选中”,并触发高亮/操纵逻辑;AIS_InteractiveContext::Redisplay(aisObj),上下文重新调用Compute()生成新渲染数据,实现重绘;ComputeSelection()生成对应敏感区域,适配不同选择规则。
AIS_InteractiveObject的工作依赖以下核心组件,形成完整闭环:
| 组件 | 作用 |
|---|---|
AIS_InteractiveContext | 场景上下文,调度AIS_IO的显示/选择/更新 |
Prs3d_Presentation | 渲染容器,存储Compute生成的图元数据 |
SelectMgr_Selection | 选择容器,存储ComputeSelection生成的敏感区域 |
V3d_View | 3D视图,最终渲染载体 |
AIS_InteractiveObject本质是OCCT为3D交互对象制定的标准化协议,子类只需实现Compute(画什么)、ComputeSelection(选哪里)、AcceptDisplayMode(支持哪些模式),即可快速适配AIS框架的渲染与交互能力。