文章目录
- 一、`AIS_InteractiveObject` 类
- 1、核心功能
- 2、工作原理
- 2.1、核心设计逻辑
- 2.2、核心工作流程(与AIS上下文联动)
- (1)初始化并注册对象
- (2)显示模式校验(AcceptDisplayMode)
- (3)可视化渲染(Compute)
- (4)交互选择(ComputeSelection)
- (5)动态更新
- 2.3、关键依赖与联动对象
- 3、核心接口
前言:
AIS_InteractiveObject是 OCCT 中用于可视化交互的核心类之一,属于 AIS(Application Interactive Services)模块。它代表一个可以在 3D 视图中显示并与用户交互的几何或拓扑对象(如点、线、面、体等),是所有可交互显示对象的基类。
一、AIS_InteractiveObject类
1、核心功能
- 可视化显示:将底层的
TopoDS_Shape或自定义几何数据以图形方式渲染到 3D 视图中。 - 交互支持:支持选择(Selection)、高亮(Highlighting)、动态更新(Dynamic Update)等交互操作。
- 显示模式管理:支持多种显示模式(Display Mode),例如线框(Wireframe)、着色(Shaded)、带边界着色(Shaded with edges)等。
- 属性定制:可设置颜色、透明度、线宽、材质等视觉属性。
- 选择机制集成:与 OCCT 的选择服务(Selection Services)集成,支持通过鼠标点击选中对象。
2、工作原理
AIS_InteractiveObject主要负责将底层几何/拓扑数据(如TopoDS_Shape)与 3D 图形显示、用户交互(如选择、高亮)桥接起来。
2.1、核心设计逻辑
AIS_InteractiveObject的本质是数据封装+接口标准化:
- 封装层:将几何数据(如拓扑形状、点、文本)与交互属性(颜色、显示模式、选择优先级)绑定;
- 接口层:定义标准化的渲染、选择、模式校验接口,由子类(如
AIS_Shape、AIS_Text)实现具体逻辑; - 联动层:通过
AIS_InteractiveContext(场景上下文)管理生命周期,完成渲染、选择、操纵的调度。
2.2、核心工作流程(与AIS上下文联动)
AIS_InteractiveObject无法独立工作,必须依附AIS_InteractiveContext(场景上下文),完整流程如下:
1. 初始化 → 2. 显示校验 → 3. 渲染 → 4. 交互选择 → 5. 动态更新(1)初始化并注册对象
- 开发者创建AIS_IO子类实例(如
AIS_Shape),绑定几何数据(如TopoDS_Shape); - 通过
AIS_InteractiveContext::Display(aisObj)将对象注册到场景上下文,上下文接管对象的生命周期。
(2)显示模式校验(AcceptDisplayMode)
- 上下文调用
AcceptDisplayMode(theMode),判定对象是否支持指定显示模式(如着色AIS_Shaded、线框AIS_WireFrame); - 若返回
false,则拒绝显示该模式;若返回true,进入渲染阶段。
(3)可视化渲染(Compute)
- 上下文调用
Compute()接口,触发子类生成GPU可渲染的图元数据(如Graphic3d_ArrayOfTriangles、Graphic3d_ArrayOfSegments); - 渲染数据存入
Prs3d_Presentation容器,由PrsMgr_PresentationManager3d(渲染管理器)提交到Graphic3d_Structure,最终在V3d_View中绘制; - 触发时机:首次显示、显示模式切换、几何数据修改后
Redisplay()。
(4)交互选择(ComputeSelection)
- 鼠标点击/框选时,上下文调用
ComputeSelection()接口,子类生成选择敏感区域(如Select3D_SensitiveFace、Select3D_SensitiveEdge); - 上下文通过
SelectMgr_SelectionManager检测鼠标坐标是否命中敏感区域,若命中则标记对象为“选中”,并触发高亮/操纵逻辑; - 核心:选择逻辑与渲染逻辑分离,可自定义选择优先级、敏感区域(如仅允许选面,不允许选边)。
(5)动态更新
- 几何数据修改后,调用
AIS_InteractiveContext::Redisplay(aisObj),上下文重新调用Compute()生成新渲染数据,实现重绘; - 选择模式切换时,重新调用
ComputeSelection()生成对应敏感区域,适配不同选择规则。
2.3、关键依赖与联动对象
AIS_InteractiveObject的工作依赖以下核心组件,形成完整闭环:
| 组件 | 作用 |
|---|---|
AIS_InteractiveContext | 场景上下文,调度AIS_IO的显示/选择/更新 |
Prs3d_Presentation | 渲染容器,存储Compute生成的图元数据 |
SelectMgr_Selection | 选择容器,存储ComputeSelection生成的敏感区域 |
V3d_View | 3D视图,最终渲染载体 |
3、核心接口
AIS_InteractiveObject本质是OCCT为3D交互对象制定的标准化协议,子类只需实现Compute(画什么)、ComputeSelection(选哪里)、AcceptDisplayMode(支持哪些模式),即可快速适配AIS框架的渲染与交互能力。