gaozheng
|
868cc4daba
|
Merge pull request 'fix/3d-volume-blanking-mask' (#8) from fix/3d-volume-blanking-mask into main
Reviewed-on: https://gitea.geomative.cn/gaozheng/geopro/pulls/8
|
2026-06-28 22:37:24 +08:00 |
gaozheng
|
e6fb087a7f
|
docs(detail-view): 新增数据集详情视图架构与扩展指南
给同事无缝接手"新增一种 ds 类型详情页"的交接文档:端到端数据流、5 个核心
抽象(ViewKind/TabSpec/策略+注册表/IDetailView/payload+DetailLoad)、现有 5 种
类型对照表、分层职责(带 file:line)、扩展配方(5A 复用视图/5B 全新视图 + 代码
骨架)、关键约定与坑、触碰文件速查表、自测建议。基于精读全链路 + Explore 代理
交叉验证。
|
2026-06-28 22:34:54 +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
|
c653a659b2
|
Merge pull request 'feat/vtk-3d-view' (#7) from feat/vtk-3d-view into main
Reviewed-on: https://gitea.geomative.cn/gaozheng/geopro/pulls/7
|
2026-06-27 18:43:52 +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
|
9b4f172809
|
fix(3d-view): 二维/三维分析切换时取消前视图选中
三维分析选中切片后切到二维分析,残留的selected_使InteractionManager::onWheel
持续消费滚轮(二维下无法缩放),且切回三维仍残留高亮。setMode2D进入二维时清切片
选中+高亮,并经onSliceSelectionChanged("")联动清三维分析列表选中行与异常高亮。
与VtkSceneView::setAnalysisMode2D离开二维时clearMapLineSelection清足迹选中相对称。
|
2026-06-26 23:43:26 +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
|
fadcd12239
|
fix(gpr): 补 Api3dRepository::createGprVolume 声明 + 仓储透传 targetDy
HEAD 的 Api3dRepository.cpp 已定义 createGprVolume,但 .hpp 缺该声明
(成员定义无声明 → geopro_data 编译不过)。本提交补上声明,修复构建。
并把线内通道插值 targetDy(默认 2.5cm) 透传到 createGprVolumeGrid →
app 渲染链也得密 Y 体(与 io::gpr 桥同口径,0=不插值)。
|
2026-06-26 23:30:04 +08:00 |
gaozheng
|
cf1c06cde8
|
feat(gpr): 三维体 LOD 多线渲染 + 全局切片(深度/横切/顺路) + 诊断
渲染架构改 LOD 中心:各线独立 mapper + 视野自适应 LOD,弃 multi-volume 单遍。
实测确诊多线卡顿真因是"没用 LOD、渲整卷大贴图"(passcost 排除固定开销;
overlapStat 实测重叠 ~9× 非 20×;ESS 实测仅 ~2× 不解决重叠),非渲染器问题。
切片(view-all --slice [updown|leftright|frontback]):
- 深度 C-scan:逐线整张水平片(深度共面→拼成完整 C-scan,全覆盖、原生分辨率)
- 横切/顺路:全局世界面 reslice 各线到同一面 + blend(竖直面几何上每线只切细断面)
- ↑↓ 整片扫过 / [ ] 体透明度 / v 体显隐 / --sliceAt 跳位
其他:通道插值(2.5cm,从.ord读)接入 gpr_poc;--bgSuppress 压背景突出反射;
slice 命令复用桌面端 SliceTool 切单线。
诊断命令:ess-stat(空块潜力)/--overlapStat(重叠层数)/passcost(N遍vs重叠隔离)。
分析文档:性能确诊(否定 ESS/OSPRay,LOD 为通用解)。
|
2026-06-26 23:25:51 +08:00 |
gaozheng
|
5bf3a8e5dd
|
docs(backlog): 登记 OPT-003 二维分析C期 dd_raster(阻塞·待后端栅格端点)
A/B 期已实现(6a10975/bdebe54);C 期=dd_raster 栅格地理配准渲染,阻塞在后端无
栅格数据端点(实测 business_OpenAPI.json 无 dd_raster/栅格影像端点)。须后端提供
返回「像素+四至/仿射+投影」的端点后方可落地。
|
2026-06-26 22:01:11 +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
|
4e998374e7
|
docs(handoff): 2026-06-26 创建异常打磨+切片异常交互+二维分析改造交接
|
2026-06-26 18:09:35 +08:00 |
gaozheng
|
227ee8fdef
|
docs(spec): 二维分析锁定俯视相机+内容显隐+高程拖动 spec
一个场景两相机:二维分析=同一 3D 地形场景的锁定近俯视(禁旋转,仅平移缩放);切 tab 翻另一方数据集
可见标志(不清空,性能零代价);2D 内容选中后沿 Z 高程拖动分离(锁 XY,实时读数);dd_raster 过滤+地理
配准贴地形(C期,依赖端点)。含与雷达反馈的边界、维度口径(对齐 DD0623)、分期 A/B/C、风险、验收。
|
2026-06-26 18:04:53 +08:00 |
gaozheng
|
c1a824e292
|
fix(data): 二维维度分类对齐数据字典 DD0623(去已删除轨迹类型)
据数据字典 DD0623:足迹型 2D 只 dd_trajectory_data 为统一通用轨迹「保留」(已并入
dd_radar_rtk_trajectory);dd_transient_electromagnetic_trajectory_data / dd_radar_channel_trajectory /
dd_radar_rtk_trajectory 字典均标「删除」。dimensionOf(Api3d/LocalSample3d)从 4 种轨迹收敛为
dd_trajectory_data;同步更新测试。(dd_raster=本次新增 2D 栅格,与渲染一并放第二步)
测试:439/439 通过
|
2026-06-26 17:17:07 +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
|
306d7bc46e
|
fix(3d): 异常绘制提示移右上角美化 + 线双击结束含双击位置
1) 操作提示从左上角(被工具条挡)移到右上角:深底+accent描边+右对齐+分行(标题/结束方式/取消),
按当前形态显示对应结束方式。
2) 线双击结束改为"含双击位置"(同地图工具):去掉之前的回滚——双击第一下的落点即为末顶点。
单/双击不再需要回滚隔离(双击第二下只 finish 不加点,无重复顶点)。
|
2026-06-26 15:41:12 +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
|
91a71064b2
|
feat(3d): 创建异常结束手势按业界通用做法重做(点单击/线双击/面点起点闭合)
双击作主手势别扭(与单击天然冲突)。按业界通用改:
- 点:左键单击即落点并完成(无需双击/回车)。
- 线:双击完成(保留)。
- 面:点回起点闭合(≥3点,屏幕邻近 12px 吸附);光标近起点时橡皮筋指向起点预览闭合,提示文案更新。
Esc 取消 / Backspace 撤点不变。
|
2026-06-26 15:17:53 +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 |
gaozheng
|
58544ffb3c
|
feat(3d): 创建异常支持点/线/面三态(子菜单+统一双击·回车提交)
按原型「创建异常→点/线/面」改造:
- 右键菜单单项「创建异常」→ 点/线/面 子菜单;形态(1/2/3)同时驱动绘制 mode、a.markType、
对话框查平台类型的 remarkSourceType(core::AnomalyMarkType 与 remarkSourceType 同值,一个 shape 贯通)
- AnomalyDrawTool 泛化 DrawMode{Point,Line,Face}:点≥1(再点重定位微调)/线≥2(开放)/面≥3(闭合);
最少点数按模式;分形态屏幕提示
- 交互按锁定规范:**双击/回车 提交**(去掉右键提交,右键绘制中消费不响应保留菜单语义);
**Backspace/Delete 撤上一点**;Esc 取消
- AnomalyActor 已支持点(verts)/折线/闭合多边形三态渲染,无需改
测试:439/439 通过
|
2026-06-26 10:36:38 +08:00 |
gaozheng
|
c6756aafc5
|
feat(3d): 异常类型下拉接平台真实类型(去 mock,与平台一致)
AnomalySaveDialog 原硬编码 4 个 mock 类型。改为按标注形态(remarkSourceType)异步拉平台异常类型
(cmdRepo.listExceptionTypes,label→显示/value→id)填充下拉,与平台保持一致。net 层已把扁平
data 数组归一为 value→wireArray 可读。空/失败由 EmptyAwareComboBox 空态提示。
当前面(Polygon)固定 remarkSourceType=3;P2 接点/线后由菜单形态决定 1/2/3。
构建:app 链接通过
|
2026-06-26 10:28:11 +08:00 |
gaozheng
|
75c1327aa4
|
feat(3d): 创建异常截图改相机重构图(方案A,frame-to-fit selection)
异常截图原为整窗口截图。改为业界 frame/zoom-to-fit selection 范式:
captureFramedRegionPng 把相机临时重新取景到圈定 worldPts 外扩区域(padFactor=1.4≈异常占画面~70%
带周边语境),视角方向不变仅推近/缩放(ResetCamera),后台缓冲+关交换截图屏幕不闪,截后还原相机。
点(零体积)/线面共面(某轴零厚度)用切片尺寸 0.25×min(e1,e2) 作框景半径兜底。
main 调用处从 worldPts 算世界包围盒 + 从切片 o/p1/p2 算兜底尺寸。
构建:app 链接通过
|
2026-06-26 10:21:25 +08:00 |
gaozheng
|
56e4b3a7ff
|
fix(ui): 登录验证码图形容器背景改白底
#captchaImg 背景 bg/hover(浅灰) → 白底。后端验证码图是浅底,白底贴合图边、两侧不再露灰条;
两种主题下验证码图都是浅底,故用白色字面值(随主题反而割裂)。
构建:app 链接通过
|
2026-06-26 09:02:00 +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
|
d6e52cb51f
|
fix(ui): 三维分析分段面板视觉打磨(段头/新增按钮/顶部留白,规范§4.3/§6.7)
用户反馈分段面板难看,逐项重做:
- 可折叠段头:去原生小三角(难看)→chevron 文本前缀 ▾/▸(随主题/hover 变色);标题改 title 字号
+半粗(原默认字体);加浅底分段条 bg/panel-subtle + 底分隔线 divider 作视觉分段;hover 转 accent
- 「+新增三维体」:裸 autoRaise 文字 → 描边强调按钮(border/文字 accent/primary,hover 浅强调底,
radius/sm,caption 字号),符合§6.7 次级强调按钮
- 顶部留白:CategoryAnalysisTab 内容区加 top margin → 首段段头不再贴顶
- 筛选行 setSpacing 一致化
构建:app 链接通过
|
2026-06-26 07:29:32 +08:00 |
gaozheng
|
fb911a9d85
|
fix(ui): 坐标轴面板硬编码颜色 token 化(深色模式合规,规范§1/§6.7)
按视觉规范审计修 AxesSettingsPanel 硬编码(深色模式下会失效):
- 应用按钮 #2f6fed/#2a63d4/radius6 → setDefault(true) 走全局 QPushButton:default(accent/primary,随主题)
- 关闭按钮 #888/#2f6fed → token(text/secondary / accent/primary)
- 放大系数标签 + 最小/最大值标签 #888 → token(text/secondary / text/tertiary)
- 面板圆角 10px → 8px(radius/lg,规范§3.2 画布浮窗)
构建:app 链接通过
|
2026-06-25 22:46:13 +08:00 |
gaozheng
|
cdd7613d53
|
docs(api): vtk-3d-openapi 对齐实测实现(0.6.1)
按客户端实测口径修正文档偏差:
- DsPage: 行在 data.list(非 data.value)+total;补注与 structNode/exception 用 data.value 的差异
- DsRow: 从5字段扩为实测解析全字段——name(=类型名,JSON键是name非typeName)/dsTypeCode/createTime/
sourceShowParentId(+parentId回退)/structParentId/structParentConfType/properties(泛型JSON,数组或对象)/
file;ddCode 是通用 dd 码(非仅 voxel/slice),data/page 返回各类 dsObject
- data/page 描述补实测:行在list/返回各类ds/classifyType==1走file·page/**业务字段值(含装置arrayType)不在行上**
(装置属测线脚本配置)→ 类型筛选改按 typeName/dsTypeCode 范围筛
- registerSlice 描述补:客户端 mock 当前 projectId 为空,接真后端需补 nav.currentProjectId
未变(已与实现一致):VoxelGenerateRequest/SliceGenerateRequest/SliceSpec/VolumeBuildParams/DsPageRequest/
StructNode(L)/ExceptionList(均 data.value)
|
2026-06-25 22:20:43 +08:00 |
gaozheng
|
2f6ec7dae2
|
fix(ui): 类型筛选改用组内数据自带类型值(typeName/dsTypeCode),不再依赖缺失的arrayType
按用户口径:类型筛选=按加载到该段的数据其自身携带的类型值的范围筛选。装置/arrayType 实测不在
ds 行数据上(data/page 不返回),故改用 ds 已带的 typeName(多为中文)作筛选维度,缺失回退 dsTypeCode
(必要时全局枚举翻译)。下拉列出组内实际出现的类型;passesFilters 按 typeName/dsTypeCode 比对。
构建:app 链接通过
|
2026-06-25 22:09:15 +08:00 |
gaozheng
|
31ad7a4750
|
chore: 撤诊断日志([dsrow-raw]/[arrayfilter]),保留 parseDsRows 对象形态解析健壮性
诊断结论(自读日志):data/page 所有 ds 行(文件/网格/反演)均不带字段属性(properties=文件元数据或null,
attachedParameters=null,无 arrayType);结构树节点亦无 arrayType。装置类型纯属脚本配置(ScriptInfoVO),
不在任何现有拉取数据里 → 装置筛选需新接脚本配置并按 ds→测线→脚本 串联(数据来源待定)。
|
2026-06-25 21:48:07 +08:00 |
gaozheng
|
1742b7508b
|
fix(data): 装置筛选空-parseDsRows 兼容对象形态 properties+顶层装置字段 + CLAUDE规则
诊断(自读日志[arrayfilter]):enum=15(枚举正常)但 row0[](行 properties 空)→装置值没进 row.properties。
DsObjectDataVO.properties 是泛型 JSON(可能对象而非数组),旧 parseDsRows 只 toArray()→对象形态丢空。
修:properties 数组/对象两种形态都解析;顶层 arrayType/arrayTypeName 也收为属性兜底。
另加 [dsrow-raw] 一次性打印首行原始 JSON,若仍空可据此精准定位装置字段实际位置。
生成位置下拉:combo 自身按内容加宽(对话框随之变宽)→ popup 宽=combo 宽,不再外溢出对话框。
CLAUDE.md:新增「能自己做的绝不让用户做」绑定规则——日志/数据/构建/诊断都自己来,只在 LNK1104
需关 app、或真正产品决策时才找用户。
|
2026-06-25 21:37:42 +08:00 |
gaozheng
|
98bbc9f947
|
fix(ui): 生成位置下拉树面板加宽,避免长节点名被截断
QComboBox 树 popup 默认只取 combo 宽度+缩进 → GS/TM 长名被遮(用户反馈)。按最长节点名文本宽
(QFontMetrics) + 缩进/箭头/滚动条余量(120px)定 view 最小宽,下限 260px,保证全名可见。
注:obj 已编译通过;本地链接因 app 运行中 exe 被锁(LNK1104)未完成,关 app 后重 build 即生效。
|
2026-06-25 21:18:49 +08:00 |
gaozheng
|
5edfc8e5e8
|
fix(ui): 装置筛选稳健匹配+诊断日志 + 生成位置改下拉框(树形下拉面板)
- 装置下拉空:arrayTypeList 请求成功(日志确认),但匹配只认 itemValue(键)。改稳健匹配——ds 装置属性
存 itemValue 或中文名都认(命中键取中文名/命中值用原名),data 存实际属性值供 passesFilters 比对。
仍空则打 [arrayfilter] 诊断日志(枚举大小+首行属性 confFieldId=value)定位是枚举空还是值不匹配。
- 生成位置:QTreeWidget(常显树)→ QComboBox 下拉框,下拉面板用 QTreeView+QStandardItemModel 树模型
(GS/项目根/TM 层级);mountTargetId/confType 从树视图当前项读(树模型下比 combo currentData 可靠)。
构建:app 链接通过;434/434 测试通过
|
2026-06-25 21:12:45 +08:00 |
gaozheng
|
63ebf7d4f1
|
fix(ui): 修日期日历面板错乱-popup 父对象改顶层窗口避开下拉项样式
DateRangeEdit 改 QComboBox 子类后,日历 popup 成 QComboBox 后代 → 日历内部日期网格
(QAbstractItemView)吃到全局「QComboBox QAbstractItemView::item」(padding 6px10px/min-height 20px)
下拉列表项样式 → 日期格重叠错位、无星期表头。修:popup 父对象用顶层 window() 而非本 combo,
日历不再是 QComboBox 后代,该 QSS 不匹配 → 日历恢复正常渲染。
注:本地链接因 app 运行中 exe 被锁(LNK1104)未完成,obj 已编译通过;关 app 后重 build 即生效。
|
2026-06-25 20:55:18 +08:00 |
gaozheng
|
5c412eedfa
|
docs: OPT-002 全簇完成-④拾取串选已修(63cda56,体PickableOff)
|
2026-06-25 20:45:05 +08:00 |
gaozheng
|
63cda568e5
|
fix(vtk): ④ 切片拾取串选-体 actor 设 PickableOff,拾取只落切片平面
点击落到体内部时 picker 命中体、worldPoint 落体内 → nearestSlice 按平面距离选错切片(常选最前的
上下切片)。改:addVolume 后 volume->PickableOff() → 光标拾取只命中切片纹理平面(及帘面),worldPoint
落在光标下那张切片 → 选对。onPick 仅在命中时触发(未命中不误选);旋转支点用选中切片不受影响;
widget 直接交互(selectByTool)本就精确、不受影响。重叠切片仍按最前优先(合理)。
构建:app 链接通过;434/434 测试通过
|
2026-06-25 20:43:49 +08:00 |
gaozheng
|
51090962c3
|
docs: OPT-002 标记 issue2/③/反向② 已完成(69e8790),④拾取串选留待live调试
|
2026-06-25 20:38:12 +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
|
85ae48ebfb
|
test: FakeView 跟进 I3dSceneView::render(bool,bool) 新签名(VE保留相机引入)
|
2026-06-25 20:09:15 +08:00 |
gaozheng
|
dfba221a6e
|
docs: OPT-002 并入 ③切片建到错误体 + ④切片拾取串选(同源多体/拾取簇)
|
2026-06-25 20:04:31 +08:00 |
gaozheng
|
40c8d6ccb4
|
fix(ui): 创建三维体对话框 左侧源/右侧生成位置 改树型结构(4b)
- 左「已选择对象」:QListWidget 平铺 → QTreeWidget(项目/GS/TM 容器树 + 可勾选源 ds 挂各自结构归属下,
容器按源 ds 的 structParentId 向上剪枝)
- 右「生成位置」:QComboBox 平铺 → QTreeWidget(GS/项目根/TM 层级单选);confType 据所选节点 type 推导
- ctor 改签名:传 VolumeSourceItem(含 structParentId)+ StructNode 结构 + defaultMountId;main 同步传 structParentId
构建:app 链接通过
|
2026-06-25 19:54:44 +08:00 |