diff --git a/docs/superpowers/specs/2026-06-17-vtk-3d-volume-slice-anomaly-design.md b/docs/superpowers/specs/2026-06-17-vtk-3d-volume-slice-anomaly-design.md index d2ab5e3..5ff8d92 100644 --- a/docs/superpowers/specs/2026-06-17-vtk-3d-volume-slice-anomaly-design.md +++ b/docs/superpowers/specs/2026-06-17-vtk-3d-volume-slice-anomaly-design.md @@ -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 走数据文件。