DeepSeek V4.1 Flash
73389f424c
适应视图:撤回旧策略并重做边界规则(单值散点让出半径 + 单点簇视图)
用户 2026-10-15 第五轮报告的两个问题与要求(详见 Documents/agent_mem.md §9.33):
1. 加载文件后不勾选任何信号、连点几次「适应视图」,再勾选一个单值信号时,
初次自适应没有发生、数据点既不居中也不在网格内。
根因:FitAll() 在没有任何可见信号时也把 Tab().ViewInitialized() 置为 true,
随后勾选第一个信号时 Application::SynchronizeView 认为"已经初始化",
于是跳过自适应,视界停在"无信号"那一次的整段范围上(实测 MF4 为 42.386s,
数据点被推到绘图区右边缘之外)。
修法:FitAll() 只有在存在可见信号时才置位 ViewInitialized();
并让"初次自适应"与工具栏「适应视图」共用 FitAll() 这一条实现
(不再先试 FitSinglePointSignal)。
2. 仅勾选 WIN_Motor_StallCurrentVolBrk(单值信号)与 m_MOT_Current_DCom[0](连续信号)
时点「适应视图」,单值信号的点被挤到显示区域外只剩半个;上一轮"为左右空出一小格"
的需求效果不佳。
修法(按用户要求先撤回旧策略、再重做规则):
* 撤回并删除 FitSinglePointLanes()(左右各留一小格)、TimeGridCellSeconds()、
LaneValueGridCell()、FitSinglePointSignal()(首个单值信号的时间跨度 1s 视图)。
* 新规则:常规全局适应后,任何一条边界(时间轴左/右、每个网格幅值上/下)
若被一个单值信号的数据点顶住,就把该边界向外让出该散点的半径(+1 像素),
使其完整显示在网格内;只在散点会被裁切时才扩展(内部散点使视界一点不动);
边界不是单值信号的数据点时就落在该信号点上(时间轴不留额外余量)。
判断依据用信号自身的数据点,而不是时间轴范围(MF4 里单值信号与连续信号
常共用同一条时间轴,用轴的范围会误判)。
* 特例:全部可见数据点都是单值信号且时刻完全相同时,时间轴以该时刻居中、
缩放到一大格 = 1s(视界 = kTimeTickTarget × 1s = 10s,此时 NiceStep(10,10) 恰为 1.0),
每个网格的幅值区间以"能完整画出该网格内的全部数据点"为准
(退化成单值时以跨度 1 居中)。
* 新增 FitContribution / CollectFitContributions / FitLaneHeight /
ApplySinglePointValueMargins / FitSinglePointCluster 五个成员承载上述规则。
验证(全部离屏,不占用鼠标 / 键盘 / 屏幕):
- .preflight/check(SW_HIDE + 只注入合成消息 + 进程/线程 BELOW_NORMAL)**62/62 通过**,
连跑 3 次稳定:[A] 初次自适应、[B] 时间边界(外扩量恰为半径 + 1px)、
[C] 幅值边界、[D] 单点簇特例(跨度 10、一大格 1s、每个点都在网格内)、
[E] 回归(普通信号视界 = 数据范围、网格保持自动自适应、§9.31 的
"适应视图 ↔ Y 轴自适应互不干扰"仍逐位成立)。
- [F] 真实文件 TestData/MF4-Record.MF4:WIN_Motor_StallCurrentVolBrk 确实只有 1 个有效点
(t = 0.005492),与 m_MOT_Current_DCom[0](8475 样点)复现用户场景 —— 点「适应视图」后
散点圆心离绘图区左边界 16.5px、半径 15px,完整可见(修复前它正好压在边界上、只剩半个)。
- A/B 判别:回退四处规则后 **20 项如实失败**,失败信息即用户症状
("the dot is horizontally centred (got 1697, want 1084.75)"、
"[F] initial view = one big cell per second (got 42.386313, want 10.000000)")。
- make release:全部源文件重新编译 **零警告**;链接用临时 `make release TARGET_FILE_NAME=Target_check` 通过。
同步记忆:Documents/agent_mem.md 新增 §9.33、§11.2 第 69–71 条硬约束(并把第 68 条与
§9.32 的第四小节显式标注为"已作废/被取代")、变更日志新行。