feat/vtk-3d-view #7

Merged
gaozheng merged 301 commits from feat/vtk-3d-view into main 2026-06-27 18:43:52 +08:00
1 changed files with 41 additions and 0 deletions
Showing only changes of commit 209d85536c - Show all commits

View File

@ -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 走数据文件。