feat: 迁移BimEngine到radial+dock并完善测量/剖切/漫游面板
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user