feat: 迁移BimEngine到radial+dock并完善测量/剖切/漫游面板

This commit is contained in:
yuding
2026-03-30 15:56:18 +08:00
parent 2574a11284
commit 819992f331
26 changed files with 9575 additions and 8579 deletions

View File

@@ -123,14 +123,33 @@ interface EngineSettingPreset {
settings: EngineSettings; // 预设包含的设置
readonly?: boolean; // 是否只读
source?: 'sdk-default' | 'external' | 'user'; // 预设来源
allowModify?: boolean; // 是否允许修改(保存/删除),默认 true
}
```
**字段说明:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | `string` | 预设唯一标识 |
| `presetName` | `string` | 预设显示名称 |
| `isDefault` | `boolean` | 是否为默认预设,打开面板时自动选中 |
| `settings` | `EngineSettings` | 预设包含的完整设置 |
| `readonly` | `boolean` | 是否只读,只读预设用户无法修改设置值(但仍可保存为新预设) |
| `source` | `'sdk-default' \| 'external' \| 'user'` | 预设来源 |
| `allowModify` | `boolean` | **是否允许修改当前预设**`false` 时隐藏"保存"和"删除"按钮,默认 `true` |
**source 字段说明:**
- `'sdk-default'`: SDK 内置的默认预设
- `'sdk-default'`: SDK 内置的默认预设`allowModify: false`
- `'external'`: 第三方注入的预设
- `'user'`: 用户自行保存的预设
**allowModify 字段说明:**
- `true`(默认): 显示所有操作按钮("保存预设"、"存为新预设"、"删除"
- `false`: 隐藏"保存当前预设"和"删除"按钮,但保留"另存为新预设"按钮
> **注意:** "另存为新预设"始终可用,因为创建新预设不是在修改当前预设。下拉框宽度始终保持固定。
### 2.3 设置补丁 (局部更新)
```typescript
@@ -532,7 +551,45 @@ bimEngine.setting?.setPresetList(externalPresets);
- 若有多个 `isDefault: true`,取第一个
- 若没有指定默认,选中内置默认预设
### 5.3 动态更新预设
### 5.3 禁止修改预设
使用 `allowModify: false` 可以禁止用户保存或删除某个预设:
```typescript
bimEngine.setting?.setPresetList([
{
id: 'vendor-locked',
presetName: '供应商锁定预设',
isDefault: false,
source: 'external',
allowModify: false, // ← 禁止修改
settings: {
render: { mode: 'advanced', contrast: 60, ... },
display: { showEdge: true, ... },
environment: { type: 'hdr', hdrId: 'hdr-01', ... }
}
}
]);
```
**效果:**
- ❌ 不显示"保存当前预设"按钮(无法覆盖原预设)
- ❌ 不显示删除按钮
- ✅ 保留"另存为新预设"按钮(可基于此预设创建新预设)
- ✅ 预设选择下拉框宽度固定不变
- ✅ 用户仍可修改设置值(如需禁止修改设置值,使用 `readonly: true`
**适用场景:**
- 供应商提供的标准预设,不希望用户覆盖或删除,但允许基于此创建新预设
- 项目规定的固定展示模式
- 内置默认预设SDK 默认 `allowModify: false`
> **为什么保留"另存为新预设"**
>
> "另存为新预设"是创建一个新的预设,不是在修改当前预设。即使用户不能修改供应商预设,也应该可以基于它创建自己的版本。>
> 如果你希望完全禁止用户基于此预设创建新预设,需要额外的前端逻辑控制。
### 5.4 动态更新预设
```typescript
// 随时可以更新预设列表
@@ -550,7 +607,7 @@ bimEngine.setting?.setPresetList([
const presets = bimEngine.setting?.getPresetList();
```
### 5.4 完整示例
### 5.5 完整示例
```typescript
import { BimEngine } from 'iflow-engine';
@@ -881,21 +938,55 @@ await bimEngine.engine?.setSettings({
});
```
### Q3: 第三方预设会被用户删除吗
### Q3: 如何禁止用户修改(保存/删除)某个预设
不会。`readonly: true` 的预设不会显示删除按钮。建议第三方预设设置 `readonly: true`
使用 `allowModify: false` 可以禁止用户覆盖或删除某个预设
```typescript
{
id: 'vendor-locked-preset',
presetName: '供应商锁定预设',
source: 'external',
allowModify: false, // 禁止修改当前预设
settings: { ... }
}
```
**效果:**
- ❌ 隐藏"保存当前预设"按钮(无法覆盖原预设)
- ❌ 隐藏"删除"按钮
- ✅ 保留"另存为新预设"按钮(可基于此创建新预设)
- ✅ 下拉框宽度保持不变
**注意:**
- `allowModify: false` 时,用户仍可以切换到这个预设
- 用户仍可以修改设置值,只是无法保存到当前预设
- 如需完全禁止修改设置值,需配合 `readonly: true`
### Q4: `readonly` 和 `allowModify` 有什么区别?
| 字段 | 作用 | 对用户的影响 |
|------|------|-------------|
| `readonly` | 禁止修改设置值 | 禁用所有设置控件(滑块、开关等) |
| `allowModify` | 禁止覆盖/删除当前预设 | 隐藏"保存当前预设"和"删除"按钮,但保留"另存为新预设" |
内置默认预设(`__internal-default-preset__`)的 `allowModify: false`
### Q5: 第三方预设会被用户删除吗?
如果设置了 `allowModify: false`,用户无法删除该预设。建议第三方预设设置 `allowModify: false`
```typescript
{
id: 'vendor-preset',
presetName: '供应商预设',
source: 'external',
readonly: true, // 用户不可删除
allowModify: false, // 用户不可删除/保存该预设
settings: { ... }
}
```
### Q4: 如何清空所有第三方预设?
### Q6: 如何清空所有第三方预设?
```typescript
// 获取当前列表
@@ -908,7 +999,7 @@ const filteredList = currentList.filter(p => p.source !== 'external');
bimEngine.setting?.setPresetList(filteredList);
```
### Q5: 设置修改后立即生效吗?
### Q7: 设置修改后立即生效吗?
`setSettings` 返回 Promise设置应用完成后 resolve
@@ -921,6 +1012,6 @@ await bimEngine.engine?.setSettings({
---
**文档版本**: 1.0.0
**文档版本**: 1.1.0
**更新时间**: 2026-03-30
**适用 SDK 版本**: iflow-engine >= 2.2.0
**适用 SDK 版本**: iflow-engine >= 2.2.1