166 lines
4.0 KiB
Markdown
166 lines
4.0 KiB
Markdown
# Managers 模块文档
|
||
|
||
## 模块概述
|
||
|
||
`src/managers/` 负责业务编排与生命周期管理,不直接承载底层 3D 细节。
|
||
|
||
2026-03 更新后,管理器层的核心变化:
|
||
|
||
- `EngineManager` 从“全量透传”改为“对外公共 API + 初始化编排”
|
||
- `BaseManager` 新增 `engineComponent` getter,内部管理器直接调用 `Engine` 组件
|
||
- Manager 层统一收敛为“编排者”,而不是“透传中间层”
|
||
|
||
---
|
||
|
||
## 代码地图
|
||
|
||
```text
|
||
src/managers/
|
||
├── engine-manager.ts
|
||
├── toolbar-manager.ts
|
||
├── radial-toolbar-manager.ts
|
||
├── dialog-manager.ts
|
||
├── button-group-manager.ts
|
||
├── right-key-manager.ts
|
||
├── component-detail-manager.ts
|
||
├── construct-tree-manager-btn.ts
|
||
├── walk-control-manager.ts
|
||
├── measure-dialog-manager.ts
|
||
├── section-plane-dialog-manager.ts
|
||
├── section-axis-dialog-manager.ts
|
||
├── section-box-dialog-manager.ts
|
||
├── map-dialog-manager.ts
|
||
├── walk-path-dialog-manager.ts
|
||
├── walk-plan-view-dialog-manager.ts
|
||
├── setting-dialog-manager.ts
|
||
├── engine-info-dialog-manager.ts
|
||
└── ai-chat-manager.ts
|
||
```
|
||
|
||
---
|
||
|
||
## 继承关系
|
||
|
||
```text
|
||
BaseManager
|
||
├── EngineManager
|
||
├── ToolbarManager
|
||
├── **RadialToolbarManager**
|
||
├── DialogManager
|
||
├── ButtonGroupManager
|
||
├── RightKeyManager
|
||
├── ComponentDetailManager
|
||
├── ConstructTreeManagerBtn
|
||
├── WalkControlManager
|
||
├── SettingDialogManager
|
||
├── EngineInfoDialogManager
|
||
└── AiChatManager
|
||
|
||
BaseDialogManager (extends BaseManager)
|
||
├── MeasureDialogManager
|
||
├── SectionPlaneDialogManager
|
||
├── SectionAxisDialogManager
|
||
├── SectionBoxDialogManager
|
||
├── MapDialogManager
|
||
├── WalkPathDialogManager
|
||
└── WalkPlanViewDialogManager
|
||
```
|
||
|
||
---
|
||
|
||
## BaseManager 统一能力
|
||
|
||
文件:`src/core/base-manager.ts`
|
||
|
||
```ts
|
||
protected get engineComponent(): Engine | null;
|
||
```
|
||
|
||
用途:
|
||
|
||
- 内部 manager 直接调用 `Engine` 组件能力
|
||
- 替代历史写法 `this.registry.engine3d?.xxx()`
|
||
|
||
示例:
|
||
|
||
```ts
|
||
this.engineComponent?.activeSection('box');
|
||
this.engineComponent?.setWalkSpeed(speed);
|
||
```
|
||
|
||
---
|
||
|
||
## EngineManager(最新职责)
|
||
|
||
文件:`src/managers/engine-manager.ts`
|
||
|
||
### 职责
|
||
|
||
1. 创建/销毁 `Engine` 组件
|
||
2. 创建/销毁 `RightKeyManager`
|
||
3. 组装右键菜单逻辑
|
||
4. 暴露外部公共 API
|
||
|
||
### 公共 API
|
||
|
||
```ts
|
||
class EngineManager extends BaseManager {
|
||
rightKey: RightKeyManager | null;
|
||
|
||
getEngineComponent(): Engine | null;
|
||
initialize(options?: Omit<EngineOptions, 'container'>): boolean;
|
||
isInitialized(): boolean;
|
||
loadModel(urls: string[], options?: ModelLoadOptions): void;
|
||
pauseRendering(): void;
|
||
resumeRendering(): void;
|
||
destroy(): void;
|
||
}
|
||
```
|
||
|
||
说明:
|
||
|
||
- 不再提供 `activateMeasure()/activeSection()/setWalkSpeed()` 等透传 API
|
||
- 这些能力由内部 manager 直接调用 `engineComponent`
|
||
|
||
---
|
||
|
||
## 各管理器职责分层
|
||
|
||
| 类别 | 代表 Manager | 主要职责 |
|
||
|---|---|---|
|
||
| 核心入口 | `EngineManager` | 引擎生命周期与外部 API |
|
||
| UI 容器 | `RadialToolbarManager`, `ToolbarManager`, `DialogManager`, `ButtonGroupManager` | UI 容器与通用交互 |
|
||
| 业务编排 | `MeasureDialogManager`, `Section*DialogManager`, `WalkControlManager`, `SettingDialogManager` | 对话框/面板回调与引擎能力编排 |
|
||
| 数据/交互 | `ConstructTreeManagerBtn`, `ComponentDetailManager`, `RightKeyManager` | 构件树、属性、右键菜单 |
|
||
|
||
---
|
||
|
||
## 推荐调用方式
|
||
|
||
### Manager 内部
|
||
|
||
```ts
|
||
// 推荐
|
||
this.engineComponent?.setSectionBoxRange(range);
|
||
|
||
// 不推荐
|
||
this.registry.engine3d?.setSectionBoxRange(range);
|
||
```
|
||
|
||
### 非 Manager 组件
|
||
|
||
```ts
|
||
registry.engine3d?.getEngineComponent()?.toggleMiniMap();
|
||
```
|
||
|
||
---
|
||
|
||
## 迁移约束(团队规范)
|
||
|
||
新增功能时遵循:
|
||
|
||
1. 先在 `Engine` 组件实现能力
|
||
2. 内部 manager 通过 `engineComponent` 访问
|
||
3. 仅当确有外部 SDK 需求时,才新增 `EngineManager` 公共方法
|
||
4. 不新增大规模透传方法
|