From 5d1384d2a94b1d5c28082f9428368f363e07cdf1 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 17 Jun 2026 19:24:34 +0800 Subject: [PATCH] =?UTF-8?q?docs(vtk):=20=E4=B8=89=E7=BB=B4=E4=BD=93?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=AE=9A=E7=A8=BF-=E5=88=9B=E5=BB=BA=3D?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF;=E5=BC=82=E5=B8=B8=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E6=94=B9=E8=AF=BB=E7=AB=AF=E7=82=B9=E5=B7=B2=E4=BB=8E?= =?UTF-8?q?web=E6=BA=90=E7=A0=81=E6=89=BE=E5=88=B0(POST/PUT/DELETE=20/busi?= =?UTF-8?q?ness/exception+=E7=B1=BB=E5=9E=8B/=E5=BC=82=E5=B8=B8=E4=BD=93)?= =?UTF-8?q?=E6=8E=A5=E7=9C=9F=E5=AE=9E;=E4=B8=89=E7=BB=B4=E4=BD=93/?= =?UTF-8?q?=E5=88=87=E7=89=87/=E6=8F=92=E5=80=BC=E6=97=A0=E7=AB=AF?= =?UTF-8?q?=E7=82=B9=E5=85=88mock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6-17-vtk-3d-volume-slice-anomaly-design.md | 51 ++++++++++++------- 1 file changed, 34 insertions(+), 17 deletions(-) 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 836cc63..d2ab5e3 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 @@ -61,26 +61,39 @@ ddCode:`dd_slice`。 - **导出为图片** / **导出到 dat**。 - **正视图** / **视图翻转(水平 180°)** / **关闭**。 -### 2.4 创建三维体(设计:建议客户端支持,归属待产品确认) -需求行 196「客户端二维/三维视图聚焦最基本**展示**功能」→ 创建/插值**可能在平台(web)侧**。 -- **方案 A(推荐先做 mock)**:「三维数据集」栏多选若干 3D 数据集(反演剖面)→ 菜单「生成三维体」→ 选插值模型/参数 → 客户端 `IdwInterpolator` 插值 → 三维体(暂存内存/本地)。 -- **方案 B**:仅展示平台已生成的三维体(客户端不提供创建)。 -- 决策见 §5。 +### 2.4 创建三维体(**已定:客户端创建**) +产品确认创建三维体在**客户端**侧。 +- 「三维数据集」栏多选若干 3D 数据集(反演剖面)→ 菜单「生成三维体」→ 选插值模型/参数 → 客户端 `IdwInterpolator` 插值 → 三维体。 +- 持久化:后端**无三维体端点**(见 §3)→ 先本地 mock(内存/本地文件),端点就绪后切真实。 --- -## 3. 后端依赖 vs 本地 mock +## 3. 后端依赖 vs 本地 mock(已核对 web 源码 `commercial-admin/src/apis`) | 能力 | 现有端点 | 方案 | |---|---|---| -| 展示已有三维体(取网格) | ❌ `loadVolume` 是 stub(`kNotReady`) | 后端无 → **mock**:以源数据集散点 IDW 出体(复用 `IdwInterpolator`) | -| 创建三维体(插值) | — 纯计算 | **客户端可做**(IdwInterpolator);持久化见下 | +| 展示已有三维体(取网格) | ❌ 无(`/model/*` 只有 ResIPy 反演/雷达,无三维体网格) | **mock**:以源数据集散点 IDW 出体(`IdwInterpolator`) | +| 创建三维体(插值) | ❌ 无(无三维空间插值端点) | **客户端做**(IdwInterpolator);持久化 mock | | 三维体/切片**持久化** | ❌ 无写端点 | **mock**:内存/本地存;端点就绪后切真实 | | 切片创建/交互 | — 纯客户端 | ✅ 已有(`SliceTool`/`InteractionManager`) | -| 切片保存/另存/导出/删除 | ❌ stub | 保存/删除 → mock(内存);导出图片/dat → **客户端可做**(截图/写文件) | -| 异常读取 | ✅ 现有 `queryException`/`queryExceptionByTmObjectId`(2D 详情已用) | **接真实**(读);三维异常树可复用 | -| 异常保存/删除 | ⚠️ 写端点待确认(原版可标注异常→大概率有) | 有则接,无则 mock | -| 任务记录/可用任务 | ❌ stub | mock | +| 切片保存/另存/导出/删除 | ❌ 无切片端点 | 保存/删除 → mock(内存);导出图片/dat → **客户端做**(截图/写文件) | +| 异常**读取** | ✅ `POST /exception/queryExceptionTree`、`queryException`/`queryExceptionByTmObjectId` | **接真实** | +| 异常**新增** | ✅ `POST /business/exception` | **接真实** | +| 异常**更新** | ✅ `PUT /business/exception` | **接真实** | +| 异常**删除** | ✅ `DELETE /business/exception/{exceptionId}` | **接真实** | +| 异常类型 | ✅ `GET /exceptionType/queryExceptionTypeByProjectIdAndType/{projectId}/{remarkSourceType}`、`/exceptionType/getDetail/{id}` | **接真实** | +| 异常体(exceptionConsortium) | ✅ `POST/PUT /exceptionConsortium`、`/page`、`/export`、`/getDetail/{id}` | **接真实** | +| 任务记录/可用任务 | ❌(`/model/task/page` 是反演任务,非三维分析任务) | mock | + +### 异常新增请求体(web 实证 `datasetInfo/index.js:212`) +`POST /business/exception`: +``` +{ exceptionName, exceptionTypeId, location:{...圈定坐标...}, + projectId, remarkSourceId, remarkSourceType, remark } +``` +- `remarkSourceId` / `remarkSourceType`:异常所附着的对象(本场景=切片数据集 id + 其类型)。 +- `location`:圈定多边形坐标。截图:保存对话框含截图(行 393),上传方式参考 `exceptionInfos/modalNewException.vue`。 +- 更新:`PUT /business/exception` `{ id, exceptionName, remark }`;删除:`DELETE /business/exception/{exceptionId}`;详情:`GET /business/exception/getDetail/{exceptionId}`。 --- @@ -96,11 +109,15 @@ ddCode:`dd_slice`。 --- -## 5. 待产品确认 +## 5. 待产品确认(更新 2026-06-17) -1. **创建三维体在客户端还是平台?** 决定是否做 §2.4 方案 A。 -2. **后端是否会提供**:三维体网格端点、三维体/切片/异常的写端点、任务端点?时间表?(决定哪些长期 mock、哪些等接。) -3. **异常写端点**确切路径(原版标注异常的保存接口)。 +1. **创建三维体在客户端还是平台?** → **已定:客户端**(§2.4)。 +2. **后端三维体/切片/任务端点时间表?** → 暂未知。当前 web 源码**无**三维体网格、三维插值、切片、三维分析任务端点 → 这些**先 mock**(保持 `I3dSceneRepository` 接口不变,端点就绪后仅换实现)。 +3. **异常写端点?** → **已找到**(§3):`POST/PUT/DELETE /business/exception` + 类型/异常体一整套 → 异常**接真实**,不 mock。 + +剩余待确认(次要): +- 异常保存对话框的**截图上传**方式/字段(参考 `exceptionInfos/modalNewException.vue`,落地时细化)。 +- 三维体/切片本地 mock 的持久化形态(纯内存 vs 本地文件,影响重启后是否还在)。 --- @@ -111,7 +128,7 @@ ddCode:`dd_slice`。 1. **三维体(mock 渲染)**:把当前勾选/源数据反演剖面散点 → `IdwInterpolator` → `VolumeGrid` → `VoxelActor`。`Api3dRepository::loadVolume` 由 stub 改为"取源数据散点 + IDW"(mock)。→ 解锁三维体显示 + 切片有可切对象。 2. **切片交互接通三维体**:体素就位后,三维体右键"切片▸"已能创建切片(现有 SliceTool)。补:选中切片滚轮推进、双击正视。 3. **切片保存/另存/导出/删除**:保存/删除 → Api3dRepository 改内存 mock(同 LocalSample);导出图片(截图)/dat(写文件) → 客户端实现。VTK 视图切片右键菜单接线。 -4. **异常**:切片右键"创建异常"→ 圈定工具 + 保存对话框(截图/坐标);异常树接 `queryException` 读端点;保存/删除按端点有无(真实/mock)。 +4. **异常**:切片右键"创建异常"→ 圈定工具 + 保存对话框(截图/坐标)。**全套接真实端点**:新增 `POST /business/exception`、更新 `PUT /business/exception`、删除 `DELETE /business/exception/{id}`、读 `queryException*`/`queryExceptionTree`、类型 `exceptionType/*`、异常体 `exceptionConsortium/*`。`remarkSourceId/Type` 填切片数据集。 5. **分析栏右键菜单接线**:色阶、显示/隐藏(纯客户端)、切片保存/另存/导出/删除(接 #3)。 6. **三维体/切片/异常详情**:数据详情栏展示源数据/插值参数/色阶/测量(点数·体积)/异常列表。