Commit Graph

134 Commits

Author SHA1 Message Date
DXC
1949711cda refactor: 提取 WorkspaceManager,将文件扫描与路径业务逻辑从主 GUI 解耦 2026-06-17 15:35:02 +08:00
DXC
191a4b681d refactor: 移除主界面重复代码,复用现有组件并彻底抽离图像控件 2026-06-17 15:16:19 +08:00
DXC
91881d564a fix: 修复 Step8 模型生成路径错误及特征分离未过滤坐标列导致的 0 模型 Bug
- view 层 Step8View.update_work_directory 不再生成 <work_dir>/indices/<basename>_indices.csv,改为生成标准的 <work_dir>/8_Modeling/ 模型存放目录;FileSelectWidget 标签与文件过滤器同步调整为目录语义(输出模型目录 / All Files (*.*)),消除'保存目录被存成 csv 文件'导致的 train_models 跳过判定。
2026-06-17 14:15:34 +08:00
DXC
c2740c2bde fix(step7): 修复 Step7 未默认加载内置水质指数公式表的问题
- init_ui 末尾自动调用 _auto_load_formulas 读取 src/gui/model/waterindex.csv
  并填充 formula_list(默认全选),用户进 tab 即可见/可勾选公式。
- 新增 _resolve_formula_csv_path helper:兼容 PyInstaller _MEIPASS /
  frozen _internal / 开发环境(__file__ 倒推 3 层到 src/)三种位置。
- get_config 新增 formula_csv_file 字段——之前缺失导致 step7_service
  拿到空路径必报 "未提供公式 CSV 路径(formula_csv_file)" 错误,
  进而导致下游 step8/9 因为拿不到 features 而生成 0 个模型。
- 新增 4 个 _on_select_* 按钮回调(_auto_load_formulas 后启用);
  set_config 同步兼容 formula_csv_file 键。
- 删除未使用的 _resolve_subdir helper(早前从旧 panel 搬过来但新 view 未引用)。

验证:
  AST 解析 320 行 OK
  helper 解析到 D:\...\src\gui\model\waterindex.csv exists=True
  pandas 解析 CSV 63 行(45 ratio + 18 concentration)OK
  BaseView 契约方法 init_ui/get_config/set_config/update_work_directory/
  _on_run_clicked 全部保留
2026-06-17 14:06:15 +08:00
DXC
b3a6855881 fix: 补齐 Step6 缺失的水体与耀斑掩膜自动传导链路
MainView._sync_dependencies 此前未推送以下两条链路,导致用户
每次进入 Step 6 都必须手动选水体/耀斑掩膜文件:

1. step1 → step6 (boundary_path)
   Step 1 在 NDWI 模式下输出 water_mask_out.dat → 经 boundary_path
   推给 Step 6 的 self.water_mask_file。
   注意:Step 6 接收键名是 boundary_path(历史遗留别名),不是
   water_mask_path。

2. step2 → step6 (glint_mask_path)
   Step 2 输出 severe_glint_area.dat → 经 glint_mask_path 推给
   Step 6 的 self.glint_mask_file。

同时精简了 _sync_dependencies 的 docstring(去掉逐条推送关系列表,
改为一行摘要)和若干块内注释。

其它方法 / 字段 / 类结构未改动。
2026-06-17 13:41:50 +08:00
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