Files
bim_engine/docs/MODULES/管理器模块.md
2026-04-20 10:38:42 +08:00

166 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. 不新增大规模透传方法