gaozheng
|
8b32566351
|
feat(vtk): 列表单击已选中数据可取消选中(恢复全景轴)
在 CategorySection 段体树上安装 viewport 事件过滤器,于左键按下瞬间
(默认改选前) 记录被按行及其选中态;itemClicked(释放)时若该行按下前已选中
且本次未点勾选框,则 clearSelection() 直发 datasetSelected("") → 上层
恢复全景轴、丢贴合轴。点勾选框(切渲染)与容器行不触发取消。双击仍激活:
首击可能 toggle 掉选中,itemDoubleClicked 补回选中,终态=选中+贴合轴+详情。
不影响全列互斥(Fix A)、防环、右键菜单与切片/异常高亮。
|
2026-07-01 12:22:28 +08:00 |
gaozheng
|
0e449e082d
|
fix(vtk): 列表选中全局互斥+任意类型ds选中显子树贴合轴
- 解除 CategorySection itemSelectionChanged→datasetSelected 的 voxel-only 门控,
各类型段(反演帘面/轨迹/三维体等)选中均发选中信号→显子树贴合坐标轴
- 新增 CategorySection::clearSelection()(QSignalBlocker 下清选,不回发信号)
- CategoryAnalysisTab 选中转发改为跨段互斥:某段选中非空则清其余各段选中,
全列至多一个 ds 选中;inSelectionSync_ 兜底防重入
- 复用既有 applyFittedAxes/subtreeDsIds/datasetBounds,无平行路径
- voxel 切片/异常高亮、视口点选贴合轴对称、T3 gnomon 均未回归
|
2026-07-01 11:38:09 +08:00 |
gaozheng
|
fcabf4c59f
|
feat(vtk): 列表双击DS→适配到该DS空间范围+详情联动(无详情页静默)
决策6/T4:合并栏双击某 DS —
- 适配:复用 T2 subtreeDsIds + T1 datasetBounds/fitToBounds,相机适配到该
ds 子树空间范围(与选中贴合轴同一子树盒);无盒(未渲染)则静默跳过。
- 详情联动:仅当该 ddCode 有已注册图表策略时开中下方 DatasetDetailPanel;
三维体 dd_voxel/dd_radar_3d 等无详情页类型静默——gate 在联动入口
(DatasetDetailController::supports),不走 openDataset→loadFailed 的状态栏提示。
双击语义与右键分离:新增 CategorySection::datasetActivated(双击=适配+图表联动),
右键「详情」仍发 detailRequested→属性弹窗(保留)。故三维体双击「只适配、静默」,
属性弹窗改由右键触发,符合验收#4。
加 T4 gate 契约单测(三维体/切片/异常 supports()=false,5 已注册类型=true)。
build.bat app 链接通过;build.bat test 474/474 绿。
|
2026-07-01 11:03:23 +08:00 |
gaozheng
|
dd0205919d
|
feat(vtk): 选中数据集→子树贴合坐标轴,隐全景轴;取消恢复
选中三维体/切片/异常 → 隐去全场景总览轴,显示覆盖「该体子树(体+切片+异常)」的一个贴合 cube axes;
取消选中(空选中/VTK 点空白)→ 恢复全场景轴。
- CategorySection::subtreeDsIds:归一到子树根(最高非容器祖先=三维体)再向下收集整棵子树 dsId;
空选中改发 datasetSelected("","") 使取消经同一信号恢复全景轴。
- CategoryAnalysisTab::subtreeDsIds:段级转发,返首个命中段结果。
- VtkSceneView::showFittedAxes/showSceneAxes:useFittedAxes_+fittedBounds_ 两态;
rebuildAxes 按态选子树盒/全场景盒(复用 AxesActor);clear 复位防残留旧盒。
- main.cpp:datasetSelected 接线(子树→datasetBounds→贴合/退回全景)+VTK 侧取消恢复。
|
2026-07-01 10:17:38 +08:00 |
gaozheng
|
94d0ac9c3b
|
feat(vtk): 2D 平面z值直接平移足迹+底图(去重渲染与防抖)
拖 z 值滑块时足迹与平面底图直接沿 Z 平移(改 actor position),取代
移除+异步重载足迹与底图销毁+重建 → 实时跟随、无闪烁。
- 足迹几何建于 Z=0,平面高程经 addMapLine SetPosition 施加;新增
VtkSceneView::setMapLinesZ 直接平移足迹 actor(接口默认空实现)
- TileBasemap 瓦片几何仅留逐层级 z-fighting 偏移,平面高程经
placeActor SetPosition(groundZ_)施加(LOD 新增瓦片同面);新增
setGroundZ 重设所有已贴瓦片 position,无重下载/重建
- IPlaneBasemap 新增 setGroundZ,适配器转发;Plane2DRenderStrategy
setPlaneZ 改为直接平移足迹+底图(创建/销毁生命周期不变)
- 移除 z 滑块 150ms 防抖(直接平移瞬时同步),底图透明度防抖保留
build.bat app 链接干净;build.bat test 467/467 通过
|
2026-07-01 09:10:04 +08:00 |
gaozheng
|
e8df41b9f2
|
feat(vtk): Plane2D 策略持每类型平面矢量底图(多实例+生命周期+底图popup)
|
2026-07-01 00:21:45 +08:00 |
gaozheng
|
15c30a5821
|
fix(vtk): 2D z值滑块发射防抖,避免拖动期异步重摆失步
|
2026-06-30 23:41:43 +08:00 |
gaozheng
|
352e60d37b
|
feat(vtk): 2D 段 z值滑块整体升降类型平面
|
2026-06-30 23:33:07 +08:00 |
gaozheng
|
11d7dd53b9
|
feat(vtk): 段构造迁描述符;段头图标条由operations/filters驱动+筛选折叠
|
2026-06-30 22:32:33 +08:00 |
gaozheng
|
286054720e
|
feat(vtk): 数据集单栏 段按数据动态显隐 + 全空占位提示
|
2026-06-30 21:22:41 +08:00 |
gaozheng
|
571a72701d
|
feat(radar): 三维交互精修 + 增益切换 + 视角导航(B#1/#2) + 全链路方案 spec
交互精修(雷达+反演通用):
- 切片拾取精确化: 光标射线 vs 切片真实矩形求交 + 可见数据(alpha)双判定, 去外扩
- 取消选中: 点体/空白/帘面即取消(精确命中判据) + Esc 兜底; 选中后上下拖动方向修正
- 滚轮步长: 按沿法向体素间距 x N(Shift 粗调), 不随体长跳变
- 双击正视: 缩放到切片(面内尺寸+视角框住), 不再又小又远
- 不透明度: 各向异性体用特征尺度(门控; 近立方反演维持原对角线)
视角导航(B 方案):
- #1 绕拾取点旋转: 无选中时绕光标射线穿体中段点(按下捕获/拖动固定), 不甩飞
- #2 沿线位置滑块: 雷达专属, 沿最长轴 dolly 到窗口(focusAlongLongAxis), 仅细长体显示
雷达显示增益: 右键切 AGC/保幅 tpow/关, 纯显示重建不动原始数据
spec: 落地 导入->处理->渲染 全链路方案(结合 POC 评估), 定预渲染可选->混合渲染源(IVolumeRenderSource)决策
|
2026-06-30 18:58:42 +08:00 |
gaozheng
|
63ab099f76
|
fix(radar): 导入入口从隐藏菜单栏改到三维体段头按钮(app无原生菜单栏)
根因:app 经 window.setMenuWidget(TopBar) 占用 QMainWindow 菜单栏槽位,
原生 QMenuBar 不显示(全 app 无菜单栏),故 Task8 放在 menuBar() 的「三维雷达」
菜单根本看不到。
修复:入口迁到三维体(voxel)段头「+ 导入雷达测线」按钮(QToolButton+InstantPopup,
镜像现有「+新增三维体」),弹出 规范化(.head/.data)/Impulse(.iprb) 两项 →
CategorySection.radarImportRequested(impulse) → CategoryAnalysisTab 转发 →
main.cpp 走原导入流程。删除死的 menuBar 代码 + QMenuBar include。
|
2026-06-29 15:13:53 +08:00 |
gaozheng
|
4f6abf0c83
|
feat(3d-view): 三维体渲染稳定性修复 + 透明度可调/交互优化
- 修偶发"不渲染/淡蓝/很实"根因:合并体值域取"首个到达源色阶"随网络到达
顺序抖动→改取所有源色阶 vmax 中位者(确定性+抗单线离群)
- 体素标量 double→float:GPU 体绘制对 double 处理不稳/间歇出空,float 更稳且省显存
- 源剖面加载瞬时失败(如后端 502)自动重试,避免一条抖动致整体建不出;失败弹 toast 不再静默
- 退化薄体(共面剖面 ny/nz=1)网格每维补到≥2,避免 vtkGPUVolumeRayCastMapper 拒绝渲染
- 三维体透明度可调:工具条「透」按钮+弹出滑块(默认 0.30,实时改已渲染体)
- 工具条 z 序修复:引导层挂 vtkWidget 并 raise,工具条/提示再 raise 其上(缩小渲染区不再被挡)
- 收起左栏同步 QSplitter 尺寸,消除残留空白
- 切换项目清空三维体/切片/异常列表
- VTK 警告/错误转 Qt 日志,不再弹独立 vtkOutputWindow 窗口
- 勾选非三维体 ds 首次加载也显示等待动画(复选框↔spinner)
- 新建三维体后该行多拍重试滚动到分析栏顶部
|
2026-06-27 18:32:07 +08:00 |
gaozheng
|
85636931af
|
fix(ui): 分段折叠时向上收起(不再停在原位中间格)
根因:各段 addWidget(sec,1) 等高平分 stretch,折叠后该段仍占等分高度→段头浮在那格顶部、下方留空,
看着像"停在当前位置中间"(仅面板不出滚动条/内容short于视口时可见)。
修法:据折叠态动态重排 stretch——展开段=1(吸收余量铺满)、折叠段=0(只占段头高);末加尾部弹簧,
全部折叠时置 1 把段头顶到顶部。CategorySection 暴露 isExpanded()+collapsedChanged() 信号驱动重排。
保留"全展开等高铺满"原行为(#7)。
构建:app 链接通过
|
2026-06-26 07:49:08 +08:00 |
gaozheng
|
69e8790810
|
feat(vtk): 多三维体并发切片渲染重构(OPT-002:issue2+③+反向②)
核心:InteractionManager 单 image_ → 按 volumeDsId 的多体 map;各切片附着到各自体的 image。
- issue2 选第二个体→第一个体切片消失:setVolumeImage 不再 closeAll 全部切片;改 upsert 某体(同体重建
才关该体切片)。syncSlices 改为「勾选 + 父体已渲染」即显示(不再限当前体)→ 多体切片并存
- ③ 右键体却建到 current 体:sliceRequested 带目标体 dsId;addSlice(axis,volumeDsId) 用该体 image;
保存切片/创建异常的 volumeDsId 改用 selectedSliceVolumeDsId(选中切片所属体)而非 currentVolume
- 反向② VTK→树:InteractionManager.onSliceSelectionChanged(selectByTool/onPicked 触发)→
CategorySection::selectItem 程序化选中(屏蔽信号防环路)
- VtkSceneView 按 dsId 存 volumes_(image/cs/vmin/vmax);addVolume 登记/removeDataset 移除并回退
current/clear 清空;volume(dsId) 取指定体→色阶编辑支持非当前体;SliceTool 加 volumeDsId 标签
- nearestSlice 阈值/onWheel 步长/导出上色 改用切片所属体的 bounds/色阶
未解:④ 切片拾取串选(nearestSlice 启发式,VTK9.6 不暴露切片 actor 难精确化;widget 交互选中是精确的)
构建:app 链接通过;434/434 测试通过
|
2026-06-25 20:36:43 +08:00 |
gaozheng
|
b2904c211e
|
fix(vtk): 坐标轴面板预热(4a)+装置枚举到达重刷下拉+树→VTK选中联动正向(②)
- 4a 坐标轴面板首开卡顿:启动时 ensurePolished+adjustSize 预热样式/布局,避免首次点开同步解析卡UI
- 装置下拉空:枚举异步加载(可能晚于数据)→在 listArrayTypes 回调里 refreshArrayFilters 重填各段下拉
- ② 树选中切片/异常→VTK高亮:CategorySection 发 datasetSelected→main 对 dd_anomaly setSelectedAnomaly
/dd_slice selectSavedSlice。反向(VTK→树)需拾取回调,并入 OPT-002
构建:app 链接通过
|
2026-06-25 19:50:36 +08:00 |
gaozheng
|
62b7cde5cd
|
fix(ui): 筛选时间换 QComboBox(与装置同款) + 异常复选框驱动显隐(①)
- #3/#4 DateRangeEdit 重写为 QComboBox 子类(覆写 showPopup 弹双日历):外观与装置下拉完全一致
(同款原生下拉箭头/高度/边框),消除 QToolButton 方案的 popup「must be top level window」告警
- ① 创建异常后取消勾选仍渲染:异常行复选框现驱动显隐——itemChanged 对 dd_anomaly 发
anomalyVisibilityChanged→setAnomalyVisible;异常默认勾选=显示(新项默认勾,曾取消的保留);
refreshAnomalies 按三维体段复选框设各异常可见性;异常创建回调改为先 refreshAnalysis 再 refreshAnomalies
构建:app 链接通过
|
2026-06-25 19:42:37 +08:00 |
gaozheng
|
652b37b672
|
fix(vtk): 修创建切片/异常清空体·切片选择(issue1)+异常副标题补时间+新切片自动勾选
- issue1 真因:voxel(三维体)段数据来自 mock voxelTree,但 setBuckets 用 splitByCategory 的空桶
(对象树 ds 里无 dd_voxel→必空)先 setDatasets(空) 清掉其勾选,随后 section("voxel")->setDatasets
(voxelTree) 重填时勾选已丢→「创建切片/异常后体/切片选择被清空」。修:setBuckets 跳过 voxel 段
- 异常副标题没时间:saveAnomaly 没设 createTime(main 构建 Anomaly 也没设)→补当前时间(mock)
- 新切片自动勾选:CategorySection::setChecked(dsId) + 保存切片回调在 refreshAnalysis 后勾选新切片
(恢复旧行为,避免刚存的切片因未勾被 syncSlices 隐藏)
未解(下轮):issue2 选第二个体时第一个体切片消失=单"当前体"模型固有限制(syncSlices 只显示
volumeDsId==currentVolumeDsId 的切片),需多体并发切片渲染改造
构建:app 链接通过
|
2026-06-25 19:21:55 +08:00 |
gaozheng
|
778ffe88c0
|
feat(ui): 三维体段右键全接旧栏操作-体(生成切片/色阶) 切片(保存/另存/导出图片dat/色阶/删除) 异常(显隐/删除)
|
2026-06-25 12:33:22 +08:00 |
gaozheng
|
888a63081b
|
feat(ui): 三维体段从项目根完整层级树(容器节点+体挂归属)+段体右键菜单(详情/删除切片异常)(界面修复 4/5)
|
2026-06-25 11:50:17 +08:00 |
gaozheng
|
c2f2b1f94c
|
feat(ui): 日期范围筛选控件(双日历面板/可清空/默认今天)替代单 QDateEdit(界面修复 1/2/3)
|
2026-06-25 11:41:23 +08:00 |
gaozheng
|
beb398d478
|
fix(ui): 生成按钮移标题行+采集时间改时间段(不限)+切片不单列段(挂三维体树)(界面修复 3/4/5)
|
2026-06-25 09:34:19 +08:00 |
gaozheng
|
30e990d967
|
feat(ui): CategorySection 类型段组件(段头装置/日期筛选+段体可勾选树+生成入口) + DatasetFieldDictionary 缓存类
|
2026-06-24 19:10:03 +08:00 |