feat/vtk-3d-view #7
|
|
@ -133,3 +133,44 @@ ddCode:`dd_slice`。
|
|||
6. **三维体/切片/异常详情**:数据详情栏展示源数据/插值参数/色阶/测量(点数·体积)/异常列表。
|
||||
|
||||
> 每步:客户端能做的先做、缺端点的内存 mock 留出可替换缝(保持 `I3dSceneRepository` 接口不变,仅换实现)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 三维体持久化策略与存储结构(2026-06-17 定)
|
||||
|
||||
### 7.1 策略:参数为准 + 明细可选缓存 + 缺则惰性重算
|
||||
- **保存**:
|
||||
- **必存**:插值参数(源数据引用 + 插值模型/参数 + 色阶)+ **网格规格 `GridSpec`**(origin/spacing/dims)。
|
||||
- **可选存**:网格明细值(体素标量,nx·ny·nz)。
|
||||
- **加载**:
|
||||
- **有明细** → 直接渲染明细。
|
||||
- **无明细** → 按参数把值**重算填入已存的 `GridSpec`**(坐标系固定),再渲染。
|
||||
- **理由**:参数小且可复现(详情面板要展示);明细贵、但稳定一致;`GridSpec` 必存以**锚定切片/异常坐标**(它们定义在体网格坐标系上,重算必须落在同一规格里,否则错位)。
|
||||
|
||||
### 7.2 何时建议存明细
|
||||
| 体的情形 | 建议 |
|
||||
|---|---|
|
||||
| 带切片/异常 | **存明细**(与源数据生命周期解耦,重算变形风险归零) |
|
||||
| 网格大 / 插值慢 | **存明细**(避免每次加载实时重算的卡顿) |
|
||||
| 纯展示、源数据稳定、网格小 | 可只存参数(省存储),加载时重算 |
|
||||
|
||||
### 7.3 重算路径的两个前提(UI/逻辑需兜住)
|
||||
1. **源数据仍在且可取**:源数据集被删/改 → 重算失败或结果变 → 应回退提示 / 阻止。
|
||||
2. **算法确定性**:同参数同输入 → 同结果(IDW 确定);算法升级时旧体优先用已存明细,避免变形。
|
||||
|
||||
### 7.4 存储结构(字段定义,驱动实现)
|
||||
**三维体元数据(必存,进数据集元数据)`VolumeBuildParams`**:
|
||||
- `sourceDatasetIds[]`:源数据集 id 列表。
|
||||
- `interpModel`:枚举 IDW / Kriging。
|
||||
- `interpParams`:`{ cellXY, cellZ, power, maxDist, ... }`(按模型)。
|
||||
- `colorScaleId` 或内联色阶。
|
||||
- `gridSpec`:`{ ox, oy, oz, dx, dy, dz, nx, ny, nz }`(**必存**,锚定坐标)。
|
||||
- `vmin, vmax`、`measure{ points, volume }`(派生,可缓存)。
|
||||
|
||||
**三维体明细(可选,进数据集数据文件)**:
|
||||
- `values`:`ScalarVolume`(nx·ny·nz 标量,maxDist 外为 NaN=空)。
|
||||
|
||||
**与现有代码的关系**:
|
||||
- 现 `data::VolumeGrid = { ScalarVolume vol; origin[3]; spacing[3]; vmin; vmax }` ≈ "明细 + 规格(部分)"。
|
||||
- 落地改造:拆出 `VolumeBuildParams`(含 `GridSpec`)为必存元数据;`vol`(values)为可选。`I3dSceneRepository::loadVolume` 返回时:若有 values 直接给 `VolumeGrid`;若无,则用 `VolumeBuildParams` 现场 `IdwInterpolator` 重算出 `vol` 再给(坐标用存好的 `gridSpec`)。
|
||||
- mock 阶段:客户端 IDW 同时产出 params(含 spec) 与 values,两者本地存;接口签名不变,后端就绪后元数据走数据集属性、values 走数据文件。
|
||||
|
|
|
|||
Loading…
Reference in New Issue