Commit Graph

129 Commits

Author SHA1 Message Date
DXC
6a962f5e8f feat(new-arch):主窗口全功能增强(图标系统 + 全链路参数同步 + 服务输出统一解析 + Step12 分类浏览)
1. main_view.py:图标系统 + 全链路参数自动传导
   - 新增 _res() 解析项目根的相对路径,PyInstaller 打包后兼容 sys._MEIPASS。
   - 新增 QListWidgetItem / QMessageBox 导入,左侧导航列表支持右键菜单 + 错误弹窗。
   - ROUTES 12 条全部新增 icon 字段("1.png" 等),侧边栏显示业务图标。
   - 新增 step_outputs 缓存机制:每个 step 完成后把 output_path 写入 self.step_outputs。
   - 新增 _sync_dependencies() 同步函数 + _safe_set_config() 包装器,
     按依赖图把上游产物推给下游 view:
       step1 → step6 water_mask_path
       step3 → step4 / step6 / step10 deglint_img_path / bsq_path
       step4 → step9 sampling_csv_path
       step5 → step6 csv_path
       step6 → step7 / step8 training_csv_path
       step8 → step9 models_dir(父目录)
       step9 → step11 prediction_csv_dir / prediction_csv_path(双推)
       step10 → step11 geotiff_dir / geotiff_path(双推)

2. services/step1-13:统一输出解析器集成
   - 新增 src/new/services/_output_resolver.py,提供 resolve_output_dir /
     copy_to_user_path / get_user_output_path / is_user_specified 四个共享工具。
   - 每个 service 把原有的私有 _resolve_xxx_dir 改为调用 resolve_output_dir,
     强制执行"用户优先"规则(用户指定 output_path 时用其父目录,否则用 work_dir/<subdir>)。
   - 用户指定文件名 vs 底层硬编码文件名的"事后劫持"通过 copy_to_user_path 完成
     (覆盖 step2、step4、step7、step8 等底层 step 不接受 output_path 关键字的步骤)。

3. views/step12_view.py:恢复 ImageCategoryTree + ImageViewerWidget 高级组件
   - 删掉精简版占位 Label,挂回旧版的 ImageCategoryTree(按"模型评估/光谱分析/
     统计图表/处理结果/含量分布图"五类自动归类工作目录下的图像文件)。
   - 挂回 ImageViewerWidget(滚轮缩放 0.1x-5x + 50ms 防抖 + FastTransformation/
     SmoothTransformation 智能切换 + Ctrl+Wheel + 工具栏)。
   - 扫描按钮接通 image_tree.scan_directory(),选中节点即时加载到 image_viewer。
   - 按钮样式切换为 ModernStylesheet(success/primary)统一视觉。
2026-06-17 13:28:58 +08:00
DXC
9cb3c8ed0d fix(ui):修复 3 项 UI 交互痛点(输出路径不显示 / Step4 预览缺失 / Step5 CSV NaN 报错)
1. base_view.py:update_from_config 路由修复
   原默认实现只缓存 work_dir + pipeline,不触发 update_work_directory,
   导致所有派生 view 的输出路径自动填入从未执行。
   补一行 self.update_work_directory(work_dir) 后,13 个 view 全部受益。

2. step4_view.py:恢复采样点交互式预览
   从旧 panel 移植 preview_btn 按钮 + QTimer 2s 心跳(_check_csv_exists)
   + SamplingViewerDialog 弹窗。
   用户在执行 Step 4 后点击按钮即可点击散点查看各采样点光谱曲线。

3. step5_view.py:CSV 预览 NaN 崩溃修复
   pd.read_csv(csv_path, nrows=n) → pd.read_csv(csv_path, nrows=n).fillna("")。
   避免底层 Qt 模型在解析 float64 空值时崩溃(PandasTableModel 路径必填)。
2026-06-17 13:28:10 +08:00
DXC
48668c9e74 services/step10-13:终极决战!打通空间插值、可视化出图与报告生成的最后四步独立服务 2026-06-17 09:57:13 +08:00
DXC
6fc0394fe2 services/step6-9:打通光谱计算与机器学习预测的核心独立服务 2026-06-17 09:34:21 +08:00
DXC
f8d5ea2eb8 services/step2-5:打通前四个预处理步骤的真实后端独立服务
新增 src/new/services/{step2,step3,step4,step5}_service.py 四个独立后端服务:
2026-06-17 09:15:22 +08:00
DXC
ef3de632d3 smoke:L3 step2 断言从 PlaceholderView 更新为 Step2View(反映 12 个 view 已迁移) 2026-06-17 08:58:29 +08:00
DXC
3d4462f4e9 main_view:ROUTES 12 条全部对齐真实 view(业务名+路径+class),Boot 日志更新 2026-06-17 08:58:24 +08:00
DXC
84f0f6058f views/step2-view13:12 个前端 view 迁移完成(继承 BaseView,纯 UI,service 仍占位) 2026-06-17 08:58:17 +08:00
DXC
61bd8582e5 路由壳升级:TaskWorker 三信号 + main_router→main_view 迁移(54/54 smoke 通过) 2026-06-16 18:23:38 +08:00
DXC
bd4263d2ca 旧 GUI 张冠李戴修复:step6/step8 ML 训练 CSV 强制读 Step 6 特征结果 + step3 默认算法切到 goodman 2026-06-16 17:53:55 +08:00
DXC
afe9eaff2c README_new_arch.md + _smoke_new_arch.py:端到端新架构运行文档与三层冒烟(service/view/e2e 共 54 项断言) 2026-06-16 17:53:46 +08:00
DXC
e993a184bd views/* + main_router.py:13 step 路由壳(QListWidget+QStackedWidget+TaskWorker 后台执行器) 2026-06-16 17:53:35 +08:00
DXC
2a89fdc62c services/placeholder_service.py:step2-step13 占位服务(execute_placeholder 返回 not_implemented 状态) 2026-06-16 17:53:19 +08:00
DXC
e62f53bf77 services/step1_service.py:水域掩膜纯函数服务(execute_step1,零 PyQt/零全局,异常统一转 dict) 2026-06-16 17:53:11 +08:00
DXC
1e0e7d1973 端到端新架构骨架:src/new 包入口 + BaseView 接口契约(dispatch_execute 沿父链上溯 run_single_step) 2026-06-16 17:53:01 +08:00
DXC
15547bddfb .gitignore 精确放行 src/new/(保留 new/ 广义规则的反向例外) 2026-06-16 17:52:51 +08:00
DXC
027981e9a6 ContentMapper 边界读取支持栅格水掩膜(.dat/.bsq/.tif/.tiff/.img) 2026-06-16 15:15:10 +08:00
DXC
5084f7d049 Step10 Kriging 输出路径强制 14_visualization + Step11 掩膜自动填入 2026-06-16 14:12:10 +08:00
DXC
0238aa66ab 路径归一化:统一 14 个子目录 helper 接口 + 修复 getattr 张冠李戴
新增 _step_path_resolver.py(STEP_DATA_SOURCE 映射表 + _FALLBACK_DIR_TABLE 40+ keys + resolve_subdir / get_step_output_path / resolve_step_widget 三层 API),与 pipeline.get_step_output_dir 互为表里、互不依赖。

pipeline 新增 get_step_output_dir(step_name) 唯一权威接口(class-level _STEP_OUTPUT_DIR_MAP 延迟构造 + 未知 key 回退 work_dir + 调试日志)。

全量重构 src/gui/panels/step*.py(17 个文件)

* 消除全部 os.path.join(wp, "X_subdir") 硬编码(14 个预定义子目录)

* 8 处 getattr(main_window.stepXX_panel, ...) 张冠李戴死代码全部修复(错位属性名 → 通过 STEP_DATA_SOURCE 映射到正确的 main_window 长名属性)

* 删除 step12_viz_panel.py 中 self.step11_ml_panel / step11_panel / step12_panel 死代码块

* 提示文字/标签字典/日志保留原文,仅替换实际路径计算

Smoke test:39 fallback key + 14 路径映射 + 14 step 数字 key + 17/17 panel AST 解析 + 17/17 import 全部就位。
2026-06-16 12:54:18 +08:00
DXC
03c788a16c Step6 波长读取:spectral 解析失败时增加 .hdr 文本暴力解析兜底,消灭 band_1 fallback 2026-06-16 11:07:30 +08:00
DXC
d41262aa18 Step5 输出文件名统一为 processed_data.csv(修复 GUI/算法断链)
实际落盘(data_preparation_step.py:32、runner.py:101)一直为 processed_data.csv,但 GUI 三处残留旧名 cleaned_sampling_data.csv:注册表 step_default_outputs['step5_clean']、面板占位符、默认输出路径生成。本次统一替换,与 PipelineRunner/算法真实产物对齐。
2026-06-15 17:32:07 +08:00
DXC
0a0ede2e02 Step3 插值:多进程内存雪崩二次补丁(mask copy + workers 上限 6) 2026-06-15 17:10:36 +08:00
DXC
60a9d7d922 Step3 插值算法 OOM 修复 + 多进程加速 + 全链路累积改动(14 文件) 2026-06-15 16:49:17 +08:00
DXC
82e0b92af6 Mega-1.1 全链路路径归一化收尾(18 文件) 2026-06-15 15:20:50 +08:00
DXC
a9e77d2ad0 添加公式方法 2026-06-15 14:55:32 +08:00
DXC
f73a7d8999 添加公式方法 2026-06-12 16:48:20 +08:00
DXC
be47b70594 Step4 心跳刷新 + Step10 输出目录更名与智能寻址优化 2026-06-12 10:27:47 +08:00
DXC
4c9ca2aa03 全链路路径对齐:注册表重写为字符串格式,10_sampling→4_sampling,water_quality_indices→training_spectra_indices 2026-06-12 09:59:35 +08:00
DXC
89bdcbc27a Step7 面板:移除输出模式选择 UI,output_mode 硬编码锁定为 0(全量输出) 2026-06-12 09:27:16 +08:00
DXC
04669bdee8 Step7 面板:单选框蓝底实心样式美化,清理死代码(np/Tuple 导入、_get_coord_cols),run_step 路由化 2026-06-12 09:24:16 +08:00
DXC
e59703f163 结构修改,后端文件跟前端内容进行适配 2026-06-11 17:44:24 +08:00
DXC
3584c07b67 对齐 GUI 面板 ID 与 pipeline 方法路由 2026-06-11 15:35:47 +08:00
DXC
1ad4c54b80 Fix step4_panel variable name inconsistency causing AttributeError 2026-06-11 15:14:26 +08:00
DXC
5d75d3371b Step5: 强制锁死GUI路由字典,替换全部旧step_id为新命名 2026-06-11 15:09:35 +08:00
DXC
d3262ae80d Rename pipeline method names to match step numbers (Step4) 2026-06-11 14:58:39 +08:00
DXC
7c7a31ce00 Fix panel internal titles and step calls (Step3) 2026-06-11 14:56:33 +08:00
DXC
604886abb3 fix(gui): 同步侧边栏/选项卡文本与路由映射,删除回归预测 tab 2026-06-11 11:24:28 +08:00
DXC
3c4d4081a4 refactor(gui): 重命名面板序号 step4-11,采样点布设移至 step4,ML 建模移至 step9 2026-06-11 11:13:16 +08:00
DXC
184f5fe9f4 fix(step14): 批量渲染文件名唯一性 + Colorbar 样式 + 2σ拉伸 2026-06-11 10:29:32 +08:00
DXC
aa539db9bd chore: .gitignore 排除 _archive_panels_backup_/ 2026-06-10 17:14:29 +08:00
DXC
016c895803 feat(qaa): 新增 QAA 算法模块 src/core/algorithms/qaa/ 2026-06-10 17:14:08 +08:00
DXC
16fc92648b chore: 新增 QAA 校验脚本 _check_qaa.py 和 CSV 生成脚本 _run_gen_csv.py 2026-06-10 17:14:02 +08:00
DXC
0493ba7916 fix(map): GeoTIFF 可视化全链路修复 2026-06-10 17:13:51 +08:00
DXC
2671c0837a feat(step8): 新增 Step8 水色指数反演 GUI 面板 step8_waterindex_panel 2026-06-10 17:13:37 +08:00
DXC
320f2f18f2 feat(step8): 新增水色指数反演模块 waterindex_inversion + CSV 公式驱动架构 2026-06-10 17:13:25 +08:00
DXC
cfe4c50c31 feat(step8→step9): 源头透传坐标元数据,打通空间坐标全程流 2026-06-10 09:55:28 +08:00
DXC
7571762e63 fix(step9): 保留原始坐标列至 final_concentrations.csv,防止 Step14 崩溃 2026-06-10 09:54:00 +08:00
DXC
04a321d225 fix(step14): 修正流水线方法名 step9_generate_distribution_map → step14_distribution_map 2026-06-10 09:46:14 +08:00
DXC
fa9c940074 feat(visualization+report): 接入 Step9 浓度反演数据至可视化面板与报告生成器 2026-06-10 09:41:39 +08:00
DXC
c3cc2ef77e feat(step9): 新增浓度反演模块及 GUI 面板 2026-06-09 17:55:25 +08:00