提交代码
This commit is contained in:
@@ -32,9 +32,10 @@
|
||||
| 管理器 | 职责 |
|
||||
|--------|------|
|
||||
| EngineManager | 3D 引擎管理 |
|
||||
| ToolbarManager | 工具栏管理 |
|
||||
| ToolbarManager | 底部工具栏管理(传统线性布局,当前未使用) |
|
||||
| **RadialToolbarManager** | **径向工具栏管理(当前主交互入口)** |
|
||||
| DialogManager | 对话框管理 |
|
||||
| ButtonGroupManager | 按钮组管理 |
|
||||
| ButtonGroupManager | 按钮组管理(通用,当前未使用) |
|
||||
| RightKeyManager | 右键菜单管理 |
|
||||
|
||||
### 功能管理器
|
||||
@@ -75,6 +76,7 @@
|
||||
| BimTree | 树形控件 |
|
||||
| BimMenu | 菜单组件 |
|
||||
| BimButtonGroup | 按钮组 |
|
||||
| **RadialToolbar** | **径向工具栏(圆形扇形菜单,当前主交互入口)** |
|
||||
|
||||
### 面板组件
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
src/managers/
|
||||
├── engine-manager.ts
|
||||
├── toolbar-manager.ts
|
||||
├── radial-toolbar-manager.ts
|
||||
├── dialog-manager.ts
|
||||
├── button-group-manager.ts
|
||||
├── right-key-manager.ts
|
||||
@@ -44,6 +45,7 @@ src/managers/
|
||||
BaseManager
|
||||
├── EngineManager
|
||||
├── ToolbarManager
|
||||
├── **RadialToolbarManager**
|
||||
├── DialogManager
|
||||
├── ButtonGroupManager
|
||||
├── RightKeyManager
|
||||
@@ -127,7 +129,7 @@ class EngineManager extends BaseManager {
|
||||
| 类别 | 代表 Manager | 主要职责 |
|
||||
|---|---|---|
|
||||
| 核心入口 | `EngineManager` | 引擎生命周期与外部 API |
|
||||
| UI 容器 | `ToolbarManager`, `DialogManager`, `ButtonGroupManager` | UI 容器与通用交互 |
|
||||
| UI 容器 | `RadialToolbarManager`, `ToolbarManager`, `DialogManager`, `ButtonGroupManager` | UI 容器与通用交互 |
|
||||
| 业务编排 | `MeasureDialogManager`, `Section*DialogManager`, `WalkControlManager`, `SettingDialogManager` | 对话框/面板回调与引擎能力编排 |
|
||||
| 数据/交互 | `ConstructTreeManagerBtn`, `ComponentDetailManager`, `RightKeyManager` | 构件树、属性、右键菜单 |
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ src/components/
|
||||
├── tree/ # 树形控件组件
|
||||
├── menu/ # 菜单组件
|
||||
├── button-group/ # 按钮组件
|
||||
├── radial-toolbar/ # 径向工具栏组件
|
||||
├── collapse/ # 折叠面板组件
|
||||
├── tab/ # 标签页组件
|
||||
├── description/ # 描述列表组件
|
||||
@@ -408,6 +409,81 @@ class BimButtonGroup {
|
||||
|
||||
---
|
||||
|
||||
## RadialToolbar(径向工具栏组件)
|
||||
|
||||
### 概述
|
||||
|
||||
圆形径向菜单组件,用于替代传统线性工具栏。支持多环布局、扇形展开、hover 触发和 toggle 状态。
|
||||
|
||||
### 配置
|
||||
|
||||
```typescript
|
||||
interface RadialToolbarOptions {
|
||||
container: HTMLElement;
|
||||
items?: RadialMenuItem[];
|
||||
mainButtonIcon?: string;
|
||||
mainButtonLabel?: string;
|
||||
onMainButtonClick?: () => void;
|
||||
itemsPerRing?: number;
|
||||
closeDelay?: number;
|
||||
}
|
||||
|
||||
interface RadialMenuItem {
|
||||
id: string;
|
||||
label: string;
|
||||
/** 直接显示的文本(优先级高于 label 的国际化翻译) */
|
||||
title?: string;
|
||||
icon?: string;
|
||||
onClick?: (item: RadialMenuItem) => void;
|
||||
isToggle?: boolean;
|
||||
isActive?: boolean;
|
||||
onToggle?: (nextActive: boolean, item: RadialMenuItem) => void;
|
||||
}
|
||||
```
|
||||
|
||||
### API
|
||||
|
||||
```typescript
|
||||
class RadialToolbar {
|
||||
init(): void;
|
||||
addItem(item: RadialMenuItem): void;
|
||||
setItemActive(id: string, active: boolean): void;
|
||||
setTheme(theme: ThemeConfig): void;
|
||||
setLocales(): void;
|
||||
destroy(): void;
|
||||
}
|
||||
```
|
||||
|
||||
### 使用说明
|
||||
|
||||
- `label`:国际化键名(如 `'toolbar.home'`),SDK 内置按钮使用
|
||||
- `title`:直接显示文本,优先级高于 `label`,适合外部动态添加按钮
|
||||
- `itemsPerRing`:每环最多显示的按钮数,超出自动进入下一环
|
||||
- `isToggle`:是否为切换按钮,配合 `onToggle` 和 `setItemActive` 使用
|
||||
|
||||
### 布局说明
|
||||
|
||||
**角度计算**:按钮中心均匀分布在扇形范围内(默认 180°~270°),通过 `(index + 0.5) / count` 计算位置,确保完整填满扇形而不贴边。
|
||||
|
||||
**环容量**:每环按钮数量写死在 `src/components/radial-toolbar/index.ts` 中(当前为 `[4, 6, 8]`),如需调整直接修改源码。
|
||||
|
||||
### 与 BottomDock 联动
|
||||
|
||||
`RadialToolbarManager` 会自动监听 `BottomDock` 状态变化,同步按钮激活状态:
|
||||
|
||||
```typescript
|
||||
// 点击径向工具栏按钮展开/收起 Dock
|
||||
onToggle: (active) => {
|
||||
if (active) {
|
||||
bimEngine.bottomDock?.open('measure');
|
||||
} else {
|
||||
bimEngine.bottomDock?.close('measure');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## BimCollapse(折叠面板组件)
|
||||
|
||||
### 概述
|
||||
|
||||
160
docs/外部API总览.md
160
docs/外部API总览.md
@@ -172,3 +172,163 @@ bimEngine.engine?.getEngineComponent()?.isolateModels([
|
||||
{ url: modelUrl, ids: [350518] }
|
||||
]);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6) 启动一键编码 `startOneClickEncoding()`
|
||||
|
||||
### 所属模块
|
||||
|
||||
- 调用入口:`bimEngine.engine?.getEngineComponent()`
|
||||
- 源码位置:`src/components/engine/index.ts`
|
||||
|
||||
### 方法签名
|
||||
|
||||
```ts
|
||||
startOneClickEncoding(): void
|
||||
```
|
||||
|
||||
### 入参
|
||||
|
||||
- 无入参。
|
||||
|
||||
### 行为约定
|
||||
|
||||
- 调用前建议先订阅 `encoding:start`、`encoding:complete`、`encoding:error` 事件以获取编码进度和结果。
|
||||
- 若引擎未初始化或底层 `oneClickEncoding` 模块不可用,会在控制台输出警告并静默返回。
|
||||
- 多次调用将重复触发编码流程(底层行为由 `iflow-engine-base` 决定)。
|
||||
|
||||
### 调用示例
|
||||
|
||||
```ts
|
||||
const engineComp = bimEngine.engine?.getEngineComponent();
|
||||
|
||||
// 订阅编码事件
|
||||
bimEngine.on('encoding:start', (data) => {
|
||||
console.log('编码开始', data);
|
||||
});
|
||||
bimEngine.on('encoding:complete', (data) => {
|
||||
console.log('编码完成', data);
|
||||
});
|
||||
bimEngine.on('encoding:error', (data) => {
|
||||
console.log('编码失败', data);
|
||||
});
|
||||
|
||||
// 启动编码
|
||||
engineComp?.startOneClickEncoding();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7) 检查模型编码 `hasModelCode()`
|
||||
|
||||
### 所属模块
|
||||
|
||||
- 调用入口:`bimEngine.engine?.getEngineComponent()`
|
||||
- 源码位置:`src/components/engine/index.ts`
|
||||
|
||||
### 方法签名
|
||||
|
||||
```ts
|
||||
hasModelCode(): boolean
|
||||
```
|
||||
|
||||
### 入参
|
||||
|
||||
- 无入参。
|
||||
|
||||
### 返回值
|
||||
|
||||
- `true`:所有已加载模型均已存在编码数据。
|
||||
- `false`:至少有一个模型没有编码数据,或引擎未初始化、`oneClickEncoding` 模块不可用。
|
||||
|
||||
### 行为约定
|
||||
|
||||
- 遍历当前 `engine.models` 数组,对每个模型调用底层 `oneClickEncoding.exitModelCode(url)`。
|
||||
- 仅当所有模型的返回值为 `true` 时,才返回 `true`。
|
||||
- 若当前没有加载任何模型,返回 `false`。
|
||||
|
||||
### 调用示例
|
||||
|
||||
```ts
|
||||
const hasCode = bimEngine.engine?.getEngineComponent()?.hasModelCode();
|
||||
console.log('模型是否已编码:', hasCode);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8) 读取缓存编码 `readModelCodeFormStoge()`
|
||||
|
||||
### 所属模块
|
||||
|
||||
- 调用入口:`bimEngine.engine?.getEngineComponent()`
|
||||
- 源码位置:`src/components/engine/index.ts`
|
||||
|
||||
### 方法签名
|
||||
|
||||
```ts
|
||||
readModelCodeFormStoge(): void
|
||||
```
|
||||
|
||||
### 入参
|
||||
|
||||
- 无入参。
|
||||
|
||||
### 行为约定
|
||||
|
||||
- 遍历当前 `engine.models` 数组,对每个模型调用底层 `oneClickEncoding.readModelCodeFormStoge(url)`。
|
||||
- 若引擎未初始化或底层模块不可用,会在控制台输出警告并静默返回。
|
||||
- 无返回值,仅触发读取动作。
|
||||
|
||||
### 调用示例
|
||||
|
||||
```ts
|
||||
bimEngine.engine?.getEngineComponent()?.readModelCodeFormStoge();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9) 一键编码事件
|
||||
|
||||
### 所属模块
|
||||
|
||||
- 事件总线:`bimEngine`(通过 `ManagerRegistry` 桥接)
|
||||
- 源码位置:`src/components/engine/index.ts`
|
||||
|
||||
### 事件列表
|
||||
|
||||
| 事件名 | 触发时机 | payload |
|
||||
|--------|---------|---------|
|
||||
| `encoding:start` | 编码流程开始时 | `{ data?: any }` |
|
||||
| `encoding:complete` | 编码流程成功完成时 | `{ data?: any }` |
|
||||
| `encoding:error` | 编码流程失败时 | `{ data?: any }` |
|
||||
|
||||
### 行为约定
|
||||
|
||||
- 事件由底层 `oneClickEncoding` 模块触发,经 `Engine` 组件桥接后冒泡到 `bimEngine` 事件总线。
|
||||
- 订阅方式与 SDK 其他事件一致:使用 `bimEngine.on(event, handler)`,返回的函数可用于取消订阅。
|
||||
- 建议在调用 `startOneClickEncoding()` 之前完成事件订阅,避免漏掉 `encoding:start` 事件。
|
||||
|
||||
### 调用示例
|
||||
|
||||
```ts
|
||||
const unsubStart = bimEngine.on('encoding:start', (data) => {
|
||||
console.log('编码开始', data);
|
||||
});
|
||||
|
||||
const unsubComplete = bimEngine.on('encoding:complete', (data) => {
|
||||
console.log('编码完成', data);
|
||||
});
|
||||
|
||||
const unsubError = bimEngine.on('encoding:error', (data) => {
|
||||
console.log('编码失败', data);
|
||||
});
|
||||
|
||||
// 启动编码
|
||||
bimEngine.engine?.getEngineComponent()?.startOneClickEncoding();
|
||||
|
||||
// 需要时取消订阅
|
||||
// unsubStart();
|
||||
// unsubComplete();
|
||||
// unsubError();
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user