提交代码
This commit is contained in:
96
docs/架构设计.md
96
docs/架构设计.md
@@ -2,32 +2,45 @@
|
||||
|
||||
## 概述
|
||||
|
||||
iflow-engine 采用分层架构:`BimEngine` 作为入口,`ManagerRegistry` 作为实例级注册表,Manager 层负责编排,Component 层负责 UI/引擎封装,Services/Core 层提供基础能力。
|
||||
iflow-engine 提供三个独立引擎类,均可单独导入:
|
||||
|
||||
| 类 | 定位 | 内部结构 |
|
||||
|---|---|---|
|
||||
| `BimEngine` | 3D 完整引擎 | ManagerRegistry + 15 Managers + 20+ UI 组件 |
|
||||
| `BimEngine2d` | 2D 图纸引擎 | ManagerRegistry(仅事件) + Engine2d 组件 |
|
||||
| `BimEngine720` | 720° 全景引擎 | ManagerRegistry(仅事件) + Engine720 组件 |
|
||||
|
||||
三个类互不依赖,各自创建独立的 `ManagerRegistry` 实例。`BimEngine2d` 和 `BimEngine720` 跳过 Manager 层,直接使用底层组件。
|
||||
|
||||
2026-03 的核心调整:
|
||||
|
||||
- 新增 `BimEngine2d`、`BimEngine720` 独立类,按需导入
|
||||
- `BimEngine` 变为纯 3D 引擎,不再包含 2D/720 代码
|
||||
- `EngineManager` 从“大量透传”收敛为“少量公共 API + 生命周期编排”
|
||||
- 内部 Manager 不再通过 `registry.engine3d?.xxx()` 间接透传,而是通过 `BaseManager.engineComponent` 直接访问 `Engine` 组件
|
||||
- 非 Manager 组件(如 toolbar 按钮、walk-path-panel)通过 `registry.engine3d?.getEngineComponent()?.xxx()` 访问 `Engine`
|
||||
- 内部 Manager 统一通过 `BaseManager.engineComponent` 直接访问 `Engine` 组件
|
||||
- `Engine.getEngine()` 已移除,改为 `onRawEvent()/offRawEvent()` 订阅底层事件
|
||||
|
||||
---
|
||||
|
||||
## 分层结构
|
||||
|
||||
```text
|
||||
BimEngine (入口 / Facade)
|
||||
└─ ManagerRegistry (实例级,不是全局单例)
|
||||
├─ Managers (业务编排)
|
||||
│ ├─ EngineManager (公共 API + 初始化 + 右键菜单组装)
|
||||
│ ├─ *DialogManager / *ControlManager
|
||||
│ └─ ...
|
||||
├─ Components (UI + Engine 封装)
|
||||
│ ├─ Engine (封装 iflow-engine-base)
|
||||
│ ├─ Dialog/Toolbar/Panel...
|
||||
│ └─ ...
|
||||
├─ Services (Theme / Locale)
|
||||
└─ Core (EventEmitter / BaseManager / BaseDialogManager)
|
||||
┌───────────────────────────────────────────────────────────────────┐
|
||||
│ 用户 API 入口 │
|
||||
│ BimEngine (3D) BimEngine2d (2D) BimEngine720 (720°) │
|
||||
└────┬──────────────────┬────────────────────┬────────────────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
ManagerRegistry ManagerRegistry ManagerRegistry
|
||||
+ 15 Managers (仅事件总线) (仅事件总线)
|
||||
+ 20+ UI 组件 + Engine2d 组件 + Engine720 组件
|
||||
│ │ │
|
||||
└──────┬───────────┴────────┬───────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
Services (Theme/Locale) Core (EventEmitter/BaseManager)
|
||||
│
|
||||
▼
|
||||
iflow-engine-base (createEngine / createEngine2d / createEngine720)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -151,3 +164,54 @@ SectionBoxDialogManager (BaseDialogManager)
|
||||
## 后续建议
|
||||
|
||||
当前已完成“Manager 瘦身”阶段。若后续继续演进,可考虑将 `Engine` 组件按领域继续拆分(measure/section/walk/model/scene),进一步降低单类复杂度。
|
||||
|
||||
---
|
||||
|
||||
## 2D / 720 独立引擎设计
|
||||
|
||||
### 设计决策
|
||||
|
||||
不采用“一个 BimEngine 懒加载三种引擎”的方案,而是创建三个独立类。理由:
|
||||
|
||||
1. **按需导入**:只用 2D 的用户不需要打包 3D 的 UI 组件
|
||||
2. **职责清晰**:3D 需要完整的 Manager 层,2D/720 只需轻量封装
|
||||
3. **生命周期独立**:各自 destroy() 不影响其他实例
|
||||
4. **共享服务**:`themeManager` 和 `localeManager` 依然是全局单例,主题切换对所有实例生效
|
||||
|
||||
### BimEngine2d 结构
|
||||
|
||||
```text
|
||||
BimEngine2d
|
||||
├─ ManagerRegistry (仅事件总线)
|
||||
└─ Engine2d 组件
|
||||
└─ createEngine2d() (iflow-engine-base)
|
||||
```
|
||||
|
||||
- 构造时自动初始化,无需 `initialize()` 调用
|
||||
- 直接暴露 `loadDrawing()`、`getLayers()`、`setLayerVisible()` 等 API
|
||||
- 不创建任何 UI 组件(toolbar、dialog 等)
|
||||
|
||||
### BimEngine720 结构
|
||||
|
||||
```text
|
||||
BimEngine720
|
||||
├─ ManagerRegistry (仅事件总线)
|
||||
└─ Engine720 组件
|
||||
└─ createEngine720() (iflow-engine-base)
|
||||
```
|
||||
|
||||
- 构造时自动初始化,配置 fov、zoom、rotate 等参数
|
||||
- 直接暴露 `loadPanorama()`、`setFov()`、`lookAt()` 等 API
|
||||
- 不创建任何 UI 组件
|
||||
|
||||
### 多引擎切换模式
|
||||
|
||||
```text
|
||||
同一容器同时只能有一个引擎实例。切换时:
|
||||
1. current.destroy() // 销毁当前
|
||||
2. new BimEngineXxx() // 创建新实例
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档更新时间**: 2026-03-10
|
||||
|
||||
Reference in New Issue
Block a user