提交代码

This commit is contained in:
yuding
2026-03-16 16:13:36 +08:00
parent 507112fcf9
commit dd4600bb5b
35 changed files with 31811 additions and 9696 deletions

View File

@@ -14,7 +14,7 @@
```
src/core/
├── event-emitter.ts # 事件发射器
├── manager-registry.ts # Manager 注册表(单例
├── manager-registry.ts # Manager 注册表(实例化
├── base-manager.ts # Manager 抽象基类
└── base-dialog-manager.ts # 对话框 Manager 基类
```
@@ -22,7 +22,7 @@ src/core/
| 文件 | 行数 | 职责 | 导出 |
|------|------|------|------|
| `event-emitter.ts` | 70 | 发布/订阅事件系统 | `EventEmitter` |
| `manager-registry.ts` | 127 | 全局单例注册表 | `ManagerRegistry` |
| `manager-registry.ts` | 127 | 实例级 Manager 注册表 | `ManagerRegistry` |
| `base-manager.ts` | 57 | Manager 基类 | `BaseManager` |
| `base-dialog-manager.ts` | 145 | 对话框 Manager 基类 | `BaseDialogManager` |
@@ -33,7 +33,7 @@ src/core/
```
EventEmitter
↑ (组合)
ManagerRegistry (例)
ManagerRegistry (例)
↑ (访问)
BaseManager (抽象类)
↑ (继承)
@@ -46,7 +46,7 @@ BaseDialogManager (抽象类)
| 模式 | 应用 | 说明 |
|------|------|------|
| 例模式 | ManagerRegistry | 全局唯一实例 |
| 例模式 | ManagerRegistry | 每个引擎实例独立注册表 |
| 发布/订阅 | EventEmitter | 解耦事件通信 |
| 模板方法 | BaseDialogManager | 定义对话框生命周期 |
@@ -99,17 +99,14 @@ unsubscribe();
### 概述
全局单例注册表,集中管理所有 Manager 实例,提供跨 Manager 通信
实例级注册表,集中管理单个引擎实例下的 Manager 与事件总线,支持多实例隔离
### API
```typescript
class ManagerRegistry {
// 获取单
static getInstance(): ManagerRegistry;
// 重置单例(用于测试)
static reset(): void;
// 创建实
constructor();
// 容器元素
container: HTMLElement | null;
@@ -125,25 +122,30 @@ class ManagerRegistry {
componentDetail: ComponentDetailManager | null;
measure: MeasureDialogManager | null;
walkControl: WalkControlManager | null;
map: MapDialogManager | null;
sectionPlane: SectionPlaneDialogManager | null;
sectionAxis: SectionAxisDialogManager | null;
sectionBox: SectionBoxDialogManager | null;
walkPath: WalkPathDialogManager | null;
walkPlanView: WalkPlanViewDialogManager | null;
engineInfo: EngineInfoDialogManager | null;
aiChat: AiChatManager | null;
setting: SettingDialogManager | null;
// 事件方法
emit<K extends keyof EngineEvents>(event: K, payload: EngineEvents[K]): void;
on<K extends keyof EngineEvents>(event: K, listener: (payload: EngineEvents[K]) => void): () => void;
off<K extends keyof EngineEvents>(event: K, listener: (payload: EngineEvents[K]) => void): void;
clearEvents(): void;
reset(): void;
}
```
### 使用示例
```typescript
const registry = ManagerRegistry.getInstance();
const registry = new ManagerRegistry();
// 访问 Manager
// 由引擎入口在初始化时写入各个 Manager 实例
registry.toolbar?.show();
registry.measure?.switchMode('distance');

View File

@@ -5,8 +5,8 @@
| 模块 | 路径 | 职责 | 文档 |
|------|------|------|------|
| **core** | `src/core/` | 核心基础设施:事件系统、管理器基类、注册表 | [核心模块.md](核心模块.md) |
| **managers** | `src/managers/` | 15 个管理器,处理业务逻辑和组件协调 | [管理器模块.md](管理器模块.md) |
| **components** | `src/components/` | 20+ UI 组件 | [组件模块.md](组件模块.md) |
| **managers** | `src/managers/` | 15 个管理器,处理业务逻辑和组件协调(仅 3D | [管理器模块.md](管理器模块.md) |
| **components** | `src/components/` | 3 个引擎组件 + 20+ UI 组件 | [组件模块.md](组件模块.md) |
| **services** | `src/services/` | 全局服务:国际化、主题管理 | [服务模块.md](服务模块.md) |
## Core 模块
@@ -16,7 +16,7 @@
| 类 | 文件 | 职责 |
|-----|------|------|
| EventEmitter | `event-emitter.ts` | 事件发布/订阅系统 |
| ManagerRegistry | `manager-registry.ts` | 全局单例注册表 |
| ManagerRegistry | `manager-registry.ts` | 实例级注册表,隔离每个引擎实例的 Manager 与事件 |
| BaseManager | `base-manager.ts` | Manager 抽象基类 |
| BaseDialogManager | `base-dialog-manager.ts` | 对话框 Manager 基类 |
@@ -57,11 +57,18 @@
纯 UI 组件,不包含业务逻辑。
### 核心组件
### 引擎组件
| 组件 | 职责 |
|------|------|
| Engine | 3D 视口容器(包装 iflow-engine-base |
| Engine2d | 2D 图纸视口(包装 createEngine2d |
| Engine720 | 720° 全景视口(包装 createEngine720 |
### 核心 UI 组件
| 组件 | 职责 |
|------|------|
| Engine | 3D 视口容器 |
| BimDialog | 通用对话框 |
| BimTree | 树形控件 |
| BimMenu | 菜单组件 |
@@ -106,7 +113,7 @@
| 文件 | 内容 |
|------|------|
| `types/component.ts` | 组件接口 IBimComponent |
| `types/events.ts` | 事件类型 EngineEvents |
| `types/events.ts` | 事件类型 EngineEvents(含 3D/2D/720 事件) |
| `types/measure.ts` | 测量类型定义 |
| `locales/types.ts` | 国际化类型 |
| `themes/types.ts` | 主题配置类型 |
@@ -119,4 +126,4 @@
---
**文档生成时间**: 2026-01-23
**文档更新时间**: 2026-03-10

View File

@@ -5,15 +5,17 @@
| 项目 | 内容 |
|------|------|
| **模块名** | components |
| **职责** | 提供 BIM 3D 引擎 SDK 的所有 UI 组件 |
| **公开 API** | 20+ 组件 |
| **职责** | 提供 BIM SDK 的所有引擎组件3D / 2D / 720 UI 组件 |
| **公开 API** | 3 个引擎组件 + 20+ UI 组件 |
| **状态** | ✅ 稳定 |
## 代码地图
```
src/components/
├── engine/ # 3D 引擎组件
├── engine/ # 3D 引擎组件 (包装 iflow-engine-base)
├── engine-2d/ # 2D 图纸引擎组件 (包装 createEngine2d)
├── engine-720/ # 720° 全景引擎组件 (包装 createEngine720)
├── dialog/ # 通用弹窗组件
├── tree/ # 树形控件组件
├── menu/ # 菜单组件
@@ -30,7 +32,6 @@ src/components/
├── walk-plan-view-panel/ # 漫游平面图面板
├── right-key/ # 右键菜单组件
└── map-panel/ # 地图面板组件
```
## 组件接口
@@ -52,7 +53,7 @@ interface IBimComponent {
### 概述
包装第三方 3D 引擎 SDK提供模型加载、视角控制、测量功能。
包装第三方 3D 引擎 SDK提供模型加载、视角控制、测量功能。仅由 `BimEngine` 通过 `EngineManager` 使用。
### 配置
@@ -69,33 +70,135 @@ interface EngineOptions {
### API
```typescript
class Engine {
class Engine implements IBimComponent {
init(): void;
loadModel(url: string, options?: ModelLoadOptions): void;
CameraGoHome(): void;
getEngine(): any;
activateMeasure(mode: MeasureMode): void;
deactivateMeasure(): void;
onRawEvent(event: string, handler: Function): void;
offRawEvent(event: string, handler: Function): void;
setTheme(theme: ThemeConfig): void;
destroy(): void;
}
```
### 测量模式
---
| 模式 | 说明 |
|------|------|
| `distance` | 距离测量 |
| `minDistance` | 最小距离 |
| `angle` | 角度测量 |
| `elevation` | 标高测量 |
| `volume` | 体积测量 |
| `laserDistance` | 激光测距 |
| `slope` | 坡度测量 |
| `spaceVolume` | 空间体积 |
## Engine2d2D 图纸引擎组件)
### 概述
包装 `createEngine2d()`,提供 2D CAD/DWG 图纸加载与查看。由 `BimEngine2d` 直接使用,跳过 Manager 层。
### 配置
```typescript
interface Engine2dOptions {
container: HTMLElement;
backgroundColor?: number;
gridEnabled?: boolean;
axesEnabled?: boolean;
selectionColor?: number;
highlightColor?: number;
enablePerformanceMonitoring?: boolean;
}
```
### API
```typescript
class Engine2d implements IBimComponent {
init(): void;
loadDrawing(url: string, options?: DrawingLoadOptions): Promise<void>;
getLayers(): Drawing2dLayer[];
setLayerVisible(name: string, visible: boolean): void;
resetView(): void;
fitToView(): void;
setZoom(zoom: number): void;
getZoom(): number;
onRawEvent(event: string, handler: Function): void;
offRawEvent(event: string, handler: Function): void;
setTheme(theme: ThemeConfig): void;
destroy(): void;
}
```
### 相关类型
```typescript
interface DrawingLoadOptions {
chunkSize?: number;
enableChunkedLoading?: boolean;
enableValidation?: boolean;
}
interface Drawing2dLayer {
name: string;
visible: boolean;
}
```
---
## Engine720720° 全景引擎组件)
### 概述
包装 `createEngine720()`,提供 720° 全景图加载与查看。由 `BimEngine720` 直接使用,跳过 Manager 层。
### 配置
```typescript
interface Engine720Options {
container: HTMLElement;
fov?: number; // 默认 75
enableZoom?: boolean; // 默认 true
enableRotate?: boolean; // 默认 true
sphereRadius?: number; // 默认 500
rotateSpeed?: number;
zoomSpeed?: number;
enableDamping?: boolean;
dampingFactor?: number;
minFov?: number;
maxFov?: number;
}
```
### API
```typescript
class Engine720 implements IBimComponent {
init(): void;
loadPanorama(url: string, options?: PanoramaLoadOptions): Promise<void>;
preloadPanoramas(urls: string[]): Promise<void>;
setFov(fov: number): void;
getFov(): number;
lookAt(phi: number, theta: number, animated?: boolean): void;
resetView(): void;
onRawEvent(event: string, handler: Function): void;
offRawEvent(event: string, handler: Function): void;
setTheme(theme: ThemeConfig): void;
destroy(): void;
}
```
### 相关类型
```typescript
interface PanoramaLoadOptions {
timeout?: number;
}
interface PanoramaAnnotation {
id: string;
phi?: number;
theta?: number;
text?: string;
data?: any;
}
```
## BimDialog通用弹窗组件
### 概述
@@ -602,4 +705,4 @@ interface WalkControlState {
---
**文档生成时间**: 2026-01-23
**文档更新时间**: 2026-03-10