feat/vtk-3d-view #7
|
|
@ -3,7 +3,56 @@
|
|||
> 给下一个会话无缝接手。日期 2026-06-24。分支 `feat/vtk-3d-view`。
|
||||
> 本会话**产出 spec + 实施 plan + openapi 修订,未改业务代码**——下一步是按 plan 执行实现。
|
||||
>
|
||||
> **速览**:把 VTK 左侧三 tab 重构为「按数据类型大类分组」两 tab;经真实接口实测定分类/字段、opus 子代理评审、客户两轮交互确认后定稿。产出 spec(`specs/2026-06-24-vtk-category-view-refactor-design.md`)+ 实施 plan(`plans/2026-06-24-vtk-category-view-refactor.md`,8 phase/12 task)+ openapi v0.6(`docs/api/vtk-3d-openapi.json`)。均已提交(`eceb964`、`ef10c35`)。**无半成品代码**。下一会话方向:**执行 plan**(建议 subagent-driven + 独立 worktree)。
|
||||
> **速览**:把 VTK 左侧三 tab 重构为「按数据类型大类分组」两 tab;经真实接口实测定分类/字段、opus 子代理评审、客户两轮交互确认后定稿。产出 spec(`specs/2026-06-24-vtk-category-view-refactor-design.md`)+ 实施 plan(`plans/2026-06-24-vtk-category-view-refactor.md`,8 phase/12 task)+ openapi v0.6(`docs/api/vtk-3d-openapi.json`)。
|
||||
|
||||
---
|
||||
|
||||
## ⏩ 实施进度(2026-06-24 续会话,Task 1-10 完成)
|
||||
|
||||
**已完成 Task 1-10(10/12),全部已提交、可编译、逻辑层单测全绿(425 测试,5 个失败均为 PROJ_DATA 环境性、非回归)。剩 Task 11-12(main 接线总成)。**
|
||||
|
||||
提交链(在 `a7d558b` docs 之后):
|
||||
```
|
||||
a06d9e8 feat(data): createVolume(VoxelGenerateRequest) 重载+fromRequest 派生+请求体打印(mock) # Task10
|
||||
3af7e44 feat(ui): VtkViewToolbar 画布工具条 + AxesSettingsDialog 坐标轴设置 # Task9
|
||||
98114a3 feat(ui): CategoryAnalysisTab(QScrollArea 5段)+ColumnDrawer 两tab(旧栏隐藏过渡) # Task8
|
||||
30e990d feat(ui): CategorySection 类型段组件 + DatasetFieldDictionary 缓存类 # Task7
|
||||
40646f7 refactor(tree): 评审修复-抽 recomputeAllGsStates 去 nullptr 信号 hack # Task4-6 review 修复
|
||||
c5b3907 feat(data): DatasetFieldDictionary 解析 arrayType/collectTime 映射+装置字典 # Task6
|
||||
1978a31 feat(tree): GS 三态状态机(停 AutoTristate)+右键 ds/tm + checkedSourcesChanged # Task4+5(合并)
|
||||
6b39901 test(data): 补 properties[1] 日期项断言
|
||||
f00a214 feat(data): VoxelGenerateRequest/SliceGenerateRequest DTO + toJson # Task3
|
||||
07cf75d feat(app): CategoryConfig 映射表 + splitByCategory # Task2
|
||||
5a719ca feat(data): DsRow 加 dsTypeCode/properties + parseDsRows 解析 # Task1
|
||||
```
|
||||
|
||||
**已就绪的新构件(均编译通过)**:
|
||||
- 逻辑层:`DsRow` 扩字段、`splitByCategory`(CategoryConfig 5 段)、`Vtk3dRequests`(Voxel/Slice DTO + toJson + `fromRequest`)、`DatasetFieldDictionary`(parseFieldMapping + 缓存类)、`ObjectTreeSelection`(aggregateGsState/dedupeSources)。
|
||||
- 对象树:`ObjectTreePanel` GS 三态状态机(停 AutoTristate)+ 右键「选择▸ds/tm」+ `checkedSourcesChanged(QList<DataSource>)` 信号(**与旧 `checkedTmsChanged` 并存**,Task 12 删旧)。
|
||||
- UI 组件:`CategorySection`(段头装置/日期筛选+段体可勾选树+「+新增三维体」+双击详情)、`CategoryAnalysisTab`(QScrollArea 5 段,setBuckets/section/勾选并集)、`ColumnDrawer` 已改两 tab(三维分析=analysisTab / 二维分析=col2D;**旧 col3D_/colAnalysis_ 仍实例化但 hide()、不入 tab**,保留访问器供 main 过渡)、`VtkViewToolbar`、`AxesSettingsDialog`。
|
||||
- data:`Api3dRepository::createVolume(VoxelGenerateRequest)` 重载(组装真实请求体+打印+`lastVoxelRequest`),旧 `createVolume(VolumeBuildParams,name)` 保留。
|
||||
|
||||
**⚠️ 当前过渡态**:app 可编译运行,但「三维分析」tab 是**空的 CategoryAnalysisTab**(数据接线在 Task 12);旧三维数据集/三维分析功能已隐藏。对象树 GS 三态+右键 ds/tm **已在现 app 生效**(旧 checkedTmsChanged 仍兼容),可立即真实验证(plan Task 4 Step 7 清单)。
|
||||
|
||||
**偏离 plan 的决策(已记录理由)**:① Task 4+5 合并一个 commit(plan Task4 右键已引用 Task5 的 emitCheckedSources,循环依赖);② DatasetFieldDictionary 异步拉取下放 main(data 层无网络,类只内存缓存);③ CategorySection 段体先平铺(populateDatasetList),「项目根/GS/TM 容器节点分层」推迟 Task 12 接真实 StructNode;④ createSlice 虚接口未改签名,SliceGenerateRequest 组装并入 Task 12 main 层。
|
||||
|
||||
### 🔧 Task 11+12 待做(main.cpp 接线总成,最高风险,须真实 app 验证)
|
||||
|
||||
`main.cpp` 1943 行,接线密集。关键现状符号位置:
|
||||
- `:361` `new ColumnDrawer(centerWidget)` —— 需改传 dict(构造已支持第2参 `DatasetFieldDictionary* dict=nullptr`)。
|
||||
- `:397 refreshAnomalies` / `:448 refreshAnalysis` 闭包用 `drawer->colAnalysis()`。
|
||||
- `:442 c3 = drawer->col3D()`;`:641` c3 checkedDatasetsChanged→sceneCtrl;`:653` c3 generateVolumeRequested→createVolume;`:898/902` c3 verticalExaggeration。
|
||||
- `:579/745` createSlice 调用(补 projectId + 组装 SliceGenerateRequest)。
|
||||
- `:584/623` `colAnalysis()->setItemChecked`;`:666 ca=colAnalysis()`。
|
||||
- `:1117/1267` 对象树 `checkedTmsChanged` 接线(→改 `checkedSourcesChanged` + confType 分流 `loadRowsAsync(projId, src.id, src.confType, 3, ...)`)。
|
||||
- `:1134 splitByDimension`→`splitByCategory` + `analysisTab()->setBuckets`;`:1135 col3D/col2D setDatasets`。
|
||||
- `:1215 clearCentral`。`:1328 drawer->expand()`。
|
||||
|
||||
**Task 11 缺口**:`CategoryAnalysisTab`/`CategorySection` 尚无 colAnalysis 的 `setItemChecked`、异常子区 API;三维体段需迁入 Column3DAnalysis 异常控件(参 `src/app/panels/columns/Column3DAnalysis.{hpp,cpp}` + main `:397 refreshAnomalies`)。
|
||||
|
||||
**Task 12 要点**(plan §Task12 Step1-8 已详列):① 对象树勾选→confType 分流拉取→splitByCategory→analysisTab setBuckets;② analysisTab checkedDatasetsChanged→并入 checkedProfiles/checkedAnalysis→pushChecked;③ generateVolumeRequested→`VolumeParamsDialog` 扩展(左侧勾选源树·可二次增删 + 右侧「生成位置」下拉=项目内 GS/TM)→组装 `VoxelGenerateRequest`→`createVolume(req)`;④ 工具条 `VtkViewToolbar` 叠加中央 QVTK + AxesSettingsDialog 接坐标轴;⑤ createSlice 补 `nav.currentProjectId()`;⑥ 删旧 checkedTmsChanged/col3D()/colAnalysis()/splitByDimension/Column3D* 引用 + setStructure 传对象树同源 StructNode(容器分层)。**建议新会话以充足上下文做,每步 build + 用户真实验证。**
|
||||
|
||||
> 下方为初版交接(spec/plan 设计定论,仍有效)。
|
||||
|
||||
## 1. 背景
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue