From 209d85536c10601305f406126cad0bfad106cb80 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 17 Jun 2026 19:36:25 +0800 Subject: [PATCH] =?UTF-8?q?docs(vtk):=20=E4=B8=89=E7=BB=B4=E4=BD=93?= =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96=E7=AD=96=E7=95=A5-=E5=8F=82?= =?UTF-8?q?=E6=95=B0+GridSpec=E5=BF=85=E5=AD=98,=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=8F=AF=E9=80=89=E7=BC=93=E5=AD=98,=E7=BC=BA=E5=88=99?= =?UTF-8?q?=E6=8C=89=E5=8F=82=E6=95=B0=E9=87=8D=E7=AE=97=E5=A1=AB=E5=9B=BA?= =?UTF-8?q?=E5=AE=9A=E8=A7=84=E6=A0=BC;=E5=90=AB=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E5=AD=97=E6=AE=B5VolumeBuildParams=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6-17-vtk-3d-volume-slice-anomaly-design.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) 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 走数据文件。