gaozheng
|
48b8e582ef
|
feat(vtk): 导航gizmo改业界轴球风(平涂盘+白字标签+负轴淡环+hover高亮+抗锯齿)
- 方向球 LightingOff 平涂实心盘(theta/phi=48),非高光3D球
- 柔和调色板 X(0.90,0.30,0.36)/Y(0.55,0.78,0.33)/Z(0.28,0.45,0.90)
- 正向球稍大+白色XYZ公告板字标(推到球前避遮挡),负向球同色×0.42更暗更小无字标(仍可拾取)
- 细轴线(1.8)连正向球、同色、不可拾取
- 新增 MouseMove hover 观察者(不abort):角落内拾取→提亮+就地放大1.18×,离开复原
- 整窗 MSAA(8x,有守卫) + 视口上抬避开沿线条 + parallelScale 按视口长宽比自适应不裁切
- CMake 增补 RenderingFreeType 供白字字形运行时渲染
|
2026-07-01 13:52:03 +08:00 |
gaozheng
|
8b32566351
|
feat(vtk): 列表单击已选中数据可取消选中(恢复全景轴)
在 CategorySection 段体树上安装 viewport 事件过滤器,于左键按下瞬间
(默认改选前) 记录被按行及其选中态;itemClicked(释放)时若该行按下前已选中
且本次未点勾选框,则 clearSelection() 直发 datasetSelected("") → 上层
恢复全景轴、丢贴合轴。点勾选框(切渲染)与容器行不触发取消。双击仍激活:
首击可能 toggle 掉选中,itemDoubleClicked 补回选中,终态=选中+贴合轴+详情。
不影响全列互斥(Fix A)、防环、右键菜单与切片/异常高亮。
|
2026-07-01 12:22:28 +08:00 |
gaozheng
|
e1a10a1a73
|
fix(vtk): 导航gnomon重做为固定右下角叠加渲染器(无边框可点转视角+业界样式)
|
2026-07-01 11:52:31 +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
|
b1a8e02f6d
|
feat(vtk): 角落可点击方向标gnomon→绕当前轴盒中心转到该轴(保缩放)
T3(spec 2026-07-01 §3.3/决策4·5):VtkSceneView 装配常驻右上角 gnomon
(vtkOrientationMarkerWidget + vtkAxesActor 三向箭头/轴标签,相机随主相机同步)。
组装体内加 6 个方向球(±X/±Y/±Z, vtkPropAssembly)作可点击热区;左键高优先级
(1.0)观察者在角落视口内做 vtkPropPicker 硬件拾取,命中球→orbitToCurrentPivot
(该方向)并 SetAbortFlag 消费(不触发相机旋转/场景拾取)。
orbitToCurrentPivot 封装决策5支点规则:有选中(useFittedAxes_)→子树盒
fittedBounds_ 中心,否则全场景 computeDataBounds 中心;无有效数据 no-op。
复用 T1 orbitToAxis/orbitPose(保当前缩放)。方向→ViewDir 对齐 CameraPreset:
+Z=Top −Z=Bottom +Y=Back −Y=Front +X=Right −X=Left。
ensureGnomon 幂等(交互器就绪后于构造/render/renderIncremental 补装一次);
析构摘除观察者、禁用 widget。CMakeLists 增 RenderingAnnotation(vtkAxesActor)
+ FiltersSources(vtkSphereSource)。build.bat app 链接干净,test 473/473 通过。
|
2026-07-01 10:45:38 +08:00 |
gaozheng
|
f67913982d
|
fix(vtk): 视口内点选切片/异常也显示子树贴合轴(与树选一致)
视口点选经 onSliceSelectionChanged→selectItem(QSignalBlocker下)压制 datasetSelected,
故 T2 贴合轴只在树选中出、视口点选缺失(仅取消方向已恢复全景轴)。抽 T2 树路解析序列为
共用 lambda applyFittedAxes(subtreeDsIds→datasetBounds→showFittedAxes),树路精简复用,
视口非空分支直接调用补齐(不解 blocker,保留防选择环);无盒则保持现状不强推全景轴。
|
2026-07-01 10:26:32 +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
|
8b85e1e514
|
feat(vtk): 相机/包围盒基元 datasetBounds/fitToBounds/orbitToAxis(+orbit数学单测)
- CameraPreset: 纯数学 orbitPose(ViewDir,pivot,distance)->CameraPose,
方向偏移/up 约定复用 applyView(Top+Z/up+Y, Front-Y/up+Z, …),6 向 TDD 单测。
- VtkSceneView: datasetBounds(按 dsId 并集已渲染 actor 包围盒)、
fitToBounds(保朝向 ResetCamera(b))、orbitToAxis(保当前缩放距离绕 pivot 转)。
- spec §3.1 T1 基元;不含贴合轴/gnomon/双击(T2/T3/T4)。
|
2026-07-01 10:02:08 +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
|
995c511240
|
fix(vtk): 沿线位置滑块改按实际雷达三维体存在门控,不再被细长非雷达数据误触发
|
2026-07-01 08:16:52 +08:00 |
gaozheng
|
e9a9866c34
|
fix(vtk): 段头图标条实现sizeHint,修正被标题挤压致默认折叠
SectionIconBar 未实现 sizeHint/minimumSizeHint:段头 HBox(标题|stretch|图标条)
在 width()=0 构造期 relayout 折叠全部图标→内层布局尺寸塌缩成只剩「…」→恒折叠。
现实现 sizeHint(默认上限内全图标宽 count*iconPx)与 minimumSizeHint(仅「…」),
水平 Preferred/垂直 Fixed;标题改 Preferred+最小宽 0 先让位,使图标条守住宽度
直到列真正变窄才将右侧图标折进「…」。不改 visibleIconCount 逻辑与单测。
|
2026-07-01 07:43:49 +08:00 |
gaozheng
|
dc4671e09e
|
refactor(vtk): 清退2D拾取拖动死交互子系统 + 段图标上限钉为3 + 注释除锈
Fix 1 (死代码清退): E1 退役 per-ds 拖Z 2D 交互后, render/interact 层的另一半残留
接线为空。grep 确认零活调用方后, 移除整条 2D 交互通路:
- InteractionManager::setMode2D / pickStyle (decl+def, 唯一调用方 analysisModeChanged
lambda 已删)
- PickInteractorStyle::lock2D_/setLock2D/isLock2D, onPick2D/onDrag2D/onDrag2DEnd/onWheel2D,
worldPerPixelZ/kWheelStepPx/dragging2D_/lastDragY_ 及各事件处理器内的 lock2D_ 分支
仅删 2D 锁分支, 完整保留 3D 拾取/绕支点旋转/切片拖动/双击正视/滚轮推进/Esc 取消。
Fix 2 (spec §6): CategorySection 段头图标条上限由 setMaxIcons(acts.size()) 钉为
命名常量 kDefaultMaxIcons=3, 恢复计数溢出折叠分支(原恒=操作数→永不触发)。宽度挤压分支不动。
Fix 3 (注释除锈): 修正失真注释 —— categoryConfigs/CategorySpec → categoryCatalog()/
CategoryDescriptor; 删除 section("trajectory")返回 nullptr 的过期断言(C2 已构造该段);
VtkSceneController 注释引用已删的 gridCache_ → sectionGridCache_。
|
2026-07-01 00:43:58 +08:00 |
gaozheng
|
e8df41b9f2
|
feat(vtk): Plane2D 策略持每类型平面矢量底图(多实例+生命周期+底图popup)
|
2026-07-01 00:21:45 +08:00 |
gaozheng
|
55085208bb
|
refactor(vtk): TileBasemap groundZ 参数化支持多实例平面底图
|
2026-06-30 23:46:44 +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
|
24b53f5e0c
|
refactor(vtk): 删维度相机/显隐耦合与逐ds拖Z(单一自由场景)
|
2026-06-30 23:09:58 +08:00 |
gaozheng
|
ef56529d8c
|
feat(vtk): 3D 底图控件移渲染区工具栏(天地图/无+透明度滑块)
|
2026-06-30 22:54:31 +08:00 |
gaozheng
|
aea5b6b8cb
|
refactor(vtk): TileBasemap 透明度参数化(默认0.5)备多实例与可调
|
2026-06-30 22:46:00 +08:00 |
gaozheng
|
1029bf5037
|
feat(vtk): 导入雷达入口移到顶部设备菜单(临时测试功能集中化)
|
2026-06-30 22:41:54 +08:00 |
gaozheng
|
11d7dd53b9
|
feat(vtk): 段构造迁描述符;段头图标条由operations/filters驱动+筛选折叠
|
2026-06-30 22:32:33 +08:00 |
gaozheng
|
b0da3c12fb
|
feat(vtk): 段头响应式图标工具条 SectionIconBar(溢出折叠+单元测试)
|
2026-06-30 22:18:26 +08:00 |
gaozheng
|
e970ab428e
|
refactor(vtk): 移除退役的 Column2DDataset(并入统一单列)
|
2026-06-30 22:03:10 +08:00 |
gaozheng
|
70f847058d
|
refactor(vtk): 抽屉去tab单列; 勾选经描述符路由渲染策略(统一入口,无维度散判)
- ColumnDrawer 去 QTabWidget/Column2DDataset/analysisModeChanged, body 直持 CategoryAnalysisTab 单列
- VtkSceneController: 统一入口 setCheckedDatasets((dsId,typeId)) 经 catalog.renderStrategyId 派 3 策略
add/remove, 维护每 typeId 活跃计数 onTypeActivated/Deactivated; checkedDs_/checked2dDs_ 合并为 checked_
- 3 策略持控制器友元引用, 委托回 addDatasetAsync/add2DDatasetAsync/view.removeDataset
- main: pushChecked 解析 dsId→typeId 下发统一入口; 删 col2D 全部接线; 2D 轨迹经 trajectory 段并入单列
- rebuildInternal 据 checked_ 经策略重放(主题/VE/坐标轴重建不丢数据)
- 控制器单测迁移至统一 API (18/18 通过)
|
2026-06-30 21:56:37 +08:00 |
gaozheng
|
286054720e
|
feat(vtk): 数据集单栏 段按数据动态显隐 + 全空占位提示
|
2026-06-30 21:22:41 +08:00 |
gaozheng
|
8f7da3657a
|
feat(vtk): 类目描述符目录 categoryCatalog(classify谓词+扩展契约)取代 categoryConfigs
splitByCategory 改遍历 catalog 用 classify 路由(首个 classify==true 入段);新增 5 段含 trajectory。旧 CategoryConfig/categoryConfigs 暂保留供 CategoryAnalysisTab/CategorySection。同步修正 test_dataset_category 旧断言(段数随 catalog=5)。
|
2026-06-30 21:05:15 +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
|
cda84adcee
|
fix(radar): 三维分析栏勾选(体/切片)隐藏不透明引导层,露出渲染
根因:中央引导层 emptyState(不透明 QFrame, background=canvas/bg)只在
objectTree.checkedSourcesChanged(对象树测线勾选)时隐藏(main.cpp:1612)。
雷达体由三维分析栏(CategoryAnalysisTab)勾选触发渲染——日志确认 addVolume
radar-1 已渲染——但该路径不碰 emptyState(因 emptyState 在 pushChecked 之后
才声明,分析渲染路径拿不到它),引导层不隐藏 → 盖住已渲染的体,用户只见
"勾选左侧数据集开始渲染"占位文本。
修复:用可后置赋值的回调把引导层隐藏接进 pushChecked(剖面∪三维分析 并集),
场景有勾选内容即隐藏;对象树隐藏条件并入 checkedAnalysis(取消勾选对象树不再
盖住仍渲染的雷达体)。
|
2026-06-29 15:45:47 +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
|
1e931e4f85
|
fix(radar): dd_radar_3d 补进 ddCode→维度映射(dimOf/dimensionOf)
|
2026-06-29 13:35:47 +08:00 |
gaozheng
|
717bdbb70c
|
feat(radar): Impulse 测线本地导入入口(双数据集互证下游)
radarMenu 追加「导入Impulse测线目录(.iprb)…」动作,复用 createGprVolume
(eager 同步建体,预填 cachedGrid)。内层 lambda 按引用捕获 window 修正
QMainWindow 拷贝构造删除/showToast 非 const QWidget* 编译错误。
|
2026-06-29 13:19:12 +08:00 |
gaozheng
|
2ba9d07f6c
|
feat(radar): 导入入口 + dd_radar_3d 切片/色阶/详情 gate 放开
|
2026-06-29 13:13:01 +08:00 |
gaozheng
|
eef8188bcb
|
feat(3d): 色阶跨视图同步真源 + 三维体/切片白化与不透明度重做
- 跨视图色阶单一真源 DatasetViewState:2D详情/3D帘面体共用按dsId的色阶,编辑→真源
→各视图实时联动且无信号回环;散点(type1) load-then-save 回写,避免覆盖网格的
lineConfig/层级方案(共享同一条 businessCode="" 后端记录)。
- 色阶两级透明度:ColorScale.globalOpacity 独立存储不烘焙、渲染时与每色 alpha 相乘;
对话框回显真实值、单色独立;properties 补全 lvlSchemeType/logLinesCount/
equalAreaLayerCount,避免整条覆盖写清空;"整体透明度"改名"不透明度"、显示 0~100。
- 切片白化:SetWindowLevel 钉死 [vmin,vmax] + LUT 0号白化槽,哨兵真透明
(tests/spike/slice_alpha_probe.cpp 真 widget 离屏实测);同时纠正切片颜色映射。
- 切片不透明度:与三维体解耦的独立模型(100%/三维体+50%/跟随),默认100%;保存切片建
自己的色阶对象(颜色快照+不透明度),已保存切片走列表右键"色阶"编辑自身。
- 三维体白化:二值 mask 真白化(NoData 排除出插值,符合 ESRI/GDAL/Surfer 标准);改体
色阶改为原地更新传函(不重建image),未保存切片不再被刷掉且跟随改色;GPU 探测+CPU
回退;体不透明度归一为色阶"不透明度"单一控制(去 kMaxOpacity、移除工具条"透"滑块)。
- 持久化:网格视图补 saveColorGradation;DatasetChartDto.parseColorBar 回读 opacity。
详见 docs/superpowers/specs/2026-06-27-inversion-3d-volume-surfer-method-and-gaps.md §7。
|
2026-06-28 22:14:46 +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
|
d5e3522bfa
|
feat(project-menu): 项目管理菜单按Excel接入web嵌入页
- 项目管理一级菜单仅保留需「直接嵌入」的4个子菜单(在线监测/工具组件/批量导出/
告警管理,共10项,对应Excel「单个项目」页签第10~21行带嵌入地址者);其余全部隐藏
(数据视图/项目配置/数据管理/业务管理/项目资料管理/自动任务/模板管理)
- 新增 ProjectWebView(内嵌QWebEngineView):DocumentCreation阶段注入
localStorage['token']=登录token,早于页面脚本执行
- 中央区用QStackedWidget承载:page0=工作台,page1=web整窗;点菜单项整窗加载,
顶部视图菜单「分析视图」切回工作台
- URL: tenant.geomative.cn/#/embed?space=3&projectId=<运行时项目id>&target=<target>
(space=3为项目空间常量;两个OpenAPI文档均无embed相关space字段)
|
2026-06-26 23:43:06 +08:00 |
gaozheng
|
bdebe54859
|
feat(3d-view): 二维分析B期(足迹高程Z拖动)+选择联动/滚轮升降/工具条禁用
- B期:二维分析里选中足迹(单击/Ctrl 多选)→ 竖向拖动只改世界 Z(锁 XY)、
顶部实时高程读数浮层;Z 偏移按 dsId 持久(切走再回/全量重建保留)。
VtkSceneView 加 pickMapLineAt/nudgeSelectedMapLinesZ/selectedMapLineZ(vtkCellPicker
+PickFromList 只拾可见足迹、选中黄高亮加粗、mapLineZOffset_ 持久);PickInteractorStyle
lock2D 下命中足迹→Z 拖动(onPick2D/onDrag2D/onDrag2DEnd + worldPerPixelZ 像素→世界Z);
InteractionManager::pickStyle() 暴露样式;main.cpp 接回调 + 读数浮层。
- 列表↔VTK 双向选择联动:Column2DDataset 多选行 + selectedDatasetsChanged/setSelectedDsIds;
VtkSceneView onMapLineSelectionChanged/setSelectedMapLines;两向各自断环。
- 滚轮升降:onWheel2D——有选中足迹时滚轮改其 Z(一格≈拖动24px)、消费滚轮,否则缩放;
读数浮层滚轮后 1.2s 自动隐藏。
- 工具条:二维分析激活禁用 6 向快捷视图(会改朝向破坏近俯视锁定),切回三维恢复。
|
2026-06-26 21:56:45 +08:00 |
gaozheng
|
6a10975b6b
|
feat(3d-view): 二维分析A期(一场景两相机)+视图切换/底图/增量修复
- 切「二维分析」tab:锁近俯视(下压12°≈78°)、禁旋转(左键平移=仅平移+缩放)、
按维度翻 actor 可见(轨迹↔体/帘面/异常,不清空)、切片 SetEnabled 显隐、坐标轴在二维移除;
地形+底图常驻。ColumnDrawer 新增 analysisModeChanged 信号串起三处协作。
- 修复切回三维数据不取景:按目标维度重置取景基线(VtkSceneController::onAnalysisModeChanged),
computeDataBounds 只计可见 prop,render 朝向认 analysisMode2D_。
- 修复底图在远离锚点的数据处为空(如台湾,frame 锚深圳):底图取瓦片中心+距离剔除
改用相机焦点(cenX_/cenY_)而非坐标系原点。
- 修复删到空不重锚致底图错位:removeDataset 清空 dsProps_ 时复位 frameAnchoredToData_。
- 修复二维分析列表非增量:对象树勾选刷新保留已勾选足迹(对齐 CategorySection::rebuildList),
不再清空渲染/丢失列表选中。
- 新增控制器回归测试 2 项(切模式取景基线)。
|
2026-06-26 20:53:53 +08:00 |
gaozheng
|
e8bb2f82e7
|
fix(ui): 异常提示浮层去圆角+不透明深底(消白角/灰底)
上一版 WA_TranslucentBackground 让半透明背景在 GL 子控件上渲染成灰底。改为方角+不透明深底
(#0E1A2D)+accent 描边:方角无"圆角外三角区"故不露白,不透明深底不被白底冲淡成灰。
|
2026-06-26 16:23:44 +08:00 |
gaozheng
|
1648ccb8c4
|
fix(ui): 异常提示浮层圆角外露白底 → WA_TranslucentBackground
QLabel 默认不透明,QSS border-radius 只画圆角矩形,四角(圆角外三角区)露出 widget 白底色。
加 WA_TranslucentBackground → 圆角外透明(露画布),圆角矩形(深底0.85)正常。
构建:app 链接通过
|
2026-06-26 16:13:02 +08:00 |
gaozheng
|
f230ca8dd1
|
fix(3d): 异常绘制提示中文乱码(改 QLabel 浮层) + 列表切到别对象清切片选中
1) 提示"乱码":vtkTextActor 用 VTK 内置字体不含中文字形 → 中文渲染不出(只剩 ASCII)。
移除 VTK 文本提示,改 app 层右上角 QLabel 浮层:Qt 渲染中文 + QSS(深底/accent描边/圆角),
绘制开始按形态显示结束方式、结束/取消隐藏;不挡画布鼠标。
2) 列表选中切片后切到别的对象(三维体/异常),VTK 切片仍高亮:datasetSelected 选非切片对象时
未清切片选中。加 InteractionManager::deselectSlice();选异常/其它对象均清切片高亮(异常↔切片互斥)。
测试:439/439 通过
|
2026-06-26 16:06:07 +08:00 |
gaozheng
|
9782a2b93e
|
feat(ui): 删除切片/异常加确认 + 弹框按钮全局中文化
3) 删除切片/异常前弹确认框(警告图标 + 明确「删除/取消」中文按钮 + 不可撤销提示)。
4) 弹框默认英文 OK/Cancel/Yes/No 全局中文化:
- 安装 Qt 自带 zh_CN 翻译(QMessageBox/QDialogButtonBox/QFileDialog 等标准按钮);加载兼顾
dev(Qt 安装路径)与部署版(exe 旁 translations\)。
- formkit::addDialogButtons 默认按钮 QString()→「确定/取消」(不依赖翻译就位,覆盖自建对话框)。
- 打包脚本补拷 qtbase_zh_CN.qm(windeployqt --no-translations 不带)。
测试:439/439 通过
|
2026-06-26 15:41:13 +08:00 |
gaozheng
|
d7ab7705c9
|
feat(3d): 切片保存后定稿锁定(不可移动/旋转)+ 菜单去保存·另存
按用户口径:切片保存后即定稿,不可再改。
- SliceTool::setInteractive(false) 关 widget 鼠标交互(锁移动/旋转,纹理仍显示;拾取选中/右键由
PickInteractorStyle 独立处理不受影响)。tagSelectedSlice(临时→保存)与 showSavedSlice(重显已保存)均锁定。
- VTK 右键「保存」仅对未保存(临时)切片显示;已保存切片无保存项。
- 数据列表切片右键去掉「保存/另存」(列表中切片均为已保存=锁定),留 详情/导出/色阶/删除。
测试:439/439 通过
|
2026-06-26 15:17:54 +08:00 |
gaozheng
|
302d946bd9
|
fix(ui): 数据列表切片菜单「保存位姿/另存为…」→「保存/另存为」(与VTK菜单/用户口径一致)
构建:app 链接通过
|
2026-06-26 14:09:34 +08:00 |
gaozheng
|
b48684a0ba
|
fix(3d): 右键色阶去省略号 + 关闭切片取消列表勾选 + 异常取消选中清高亮
1) 数据列表三维体/切片右键「色阶…」→「色阶」(去省略号)。
3) VTK 右键关闭已保存切片后,数据列表仍勾选:onSliceClosed 此前从未连接 → 接 setChecked(dsId,false)。
4) 异常取消选中(选别的对象/点 VTK 空白)后异常图形仍高亮:
- 选中非异常对象 → setSelectedAnomaly("") 清异常高亮;
- onSliceSelectionChanged 收到空 dsId(点空白/清选) → 一并清异常高亮。
构建:app 链接通过
|
2026-06-26 14:06:11 +08:00 |
gaozheng
|
1a70ca0072
|
feat(3d): 异常对话框加样式预览(选中类型 legend 可视化)
应用户要求,在异常类型下拉下方加「样式」预览行:据选中类型的平台 legend 按形态画——
点=实心色球 / 线=按线宽·虚实的线 / 面=描边矩形+淡填充。选类型变化或样式拉到后实时刷新;
未取到时显占位「—」。
构建:app 链接通过
|
2026-06-26 12:07:11 +08:00 |
gaozheng
|
4ae8286bb0
|
fix(3d): 异常截图配色与切面一致——取 widget 同源着色输出(非另建 LUT)
用户实测异常截图与切面渲染配色差异极大(切面暖色彩虹、截图偏冷蓝绿)。根因:selectedSliceColorImage
另建 buildLut(v->cs,vmin,vmax) 上色, 与屏幕切片 widget 的实际着色可能分歧(范围/血缘处理不同)。
改:SliceTool 暴露 coloredResliceImage() = widget->GetColorMap()->GetOutput()(屏幕切片所贴的同一
RGBA 像素, 逐像素一致, 外区 alpha=0); selectedSliceColorImage 改取它再双线性上采样到 2048。
captureAnomalyShotFromSlice 处理 RGBA → 外区透明(顺带消除截图蓝边)。导出图片同样受益(与屏幕一致)。
测试:439/439 通过
|
2026-06-26 11:56:33 +08:00 |
gaozheng
|
d470dc8154
|
fix(3d): 双击与单击隔离 + 异常类型下拉误显「暂无数据」
双击结束时"第一下"会先触发单击(点会移/线多一段/面多一条边)。修:每次单击前快照 pts_,双击时
先回滚那一下(pts_=快照)再 finish → 双击纯结束,不再附带加点/移点。
EmptyAwareComboBox::realItemCount 用 itemData(i,UserRole-1) 取 flags 是错的(非 Qt flags 角色),
对正常项恒判不可选 → 计数恒 0 → 有真实项(异常区)也误插「暂无数据」。改用 model()->flags()。
构建:app 链接通过
|
2026-06-26 11:49:14 +08:00 |
gaozheng
|
04af569b7d
|
fix(3d): 创建异常返工(点交互/点渲染/截图/类型空态)——前一轮质量不过关
#1 点模式还拉线:updateRubber 点模式直接 return,不画末点→光标橡皮筋。
#3 点不是小球:AnomalyActor 点分支 + 绘制预览均开 RenderPointsAsSpheres,点径 13px → 真小球(非扁平方点)。
#4 截图整窗方框→改对:captureAnomalyShotFromSlice 只从切片 2D 剖面彩图、按异常几何向外缓冲一圈裁剪
(GIS buffer+掩膜:点→圆/线→胶囊带/面→外扩多边形,缓冲外透明,再描轮廓);worldPts 经平面 o/e1/e2
归一映射到图像像素(Qt QPainterPath/Stroker)。无切片图时回退相机框景。
#2 类型/样式选择"消失":异常类型下拉补占位「请选择异常类型」,空(该形态平台无类型)时显灰占位+「暂无数据」。
注:本项目平台「点」类型为空,故点的类型下拉确实无项——需平台先建点类异常类型。
测试:439/439 通过
|
2026-06-26 11:31:04 +08:00 |
gaozheng
|
3ed1ea75ac
|
feat(3d): 异常样式接平台 legend(与平台一致,不依赖 mock 保存)
修正前一轮误判:异常样式("与平台一致")不依赖真后端保存链——getDetail/{id} 端点存在且返回 legend。
- 新增 getExceptionTypeDetail(typeId) → GET /business/exceptionType/getDetail/{id}(wireObject 取 data)
- AnomalySaveDialog 选中类型变化时拉其 legend,按形态(1点 pointColor / 2线·3面 polylineColor+Width+
Shape→dashed)派生样式;首项自动预取
- main accept 后用 dlg.styleColor/Width/Dashed 覆盖默认(#ff3030/2/实线)→异常按平台类型样式渲染
注:真保存(newException)仍卡——实测真后端无任何登记三维体/切片为 dsObject 的端点(voxel/slice
generate 无、通用 dsObject create 也无),异常 remarkSourceId 无真实实体可指,是后端缺端点的硬依赖。
测试:通过
|
2026-06-26 11:00:34 +08:00 |