Esc 退出缩放模式、修复拖拽时波形变模糊、加速超大文件的模式切换
Esc 行为(用户要求): - 网格内按 Esc 在取消拖拽选区的同时,退出全部缩放模式(时间轴缩放 / Y 轴缩放), 工具栏两个缩放按钮随之回到未选中态;时间光标按钮不受影响。 - 新增 PlotView::ExitZoomModes(),由 Application 的 VK_ESCAPE 分支与 CancelDrag 一起调用。 修复拖拽时波形变模糊(用户报告): - 上一轮为提升拖拽帧率引入了"交互降级":拖拽期间关闭抗锯齿 + 顶点预算减半 + 每列只扫 32 个采样点。实测这会让包络丢掉峰值、线条失去抗锯齿, 在选区放大 / 拖拽信号 / 拖拽光标时明显变"糊"。现已**全部移除**, 任何交互期间都按全质量绘制。 - 用"粗粒度包络层"替代降级来保证交互帧率: SignalData 新增 coarseMin/coarseMax/coarseStride(每 256 个采样一组存 min/max, 额外内存约为采样数据的 0.8%),在 BuildDataFile 统计 min/max 的同一个循环里顺带构建 (不额外扫数据)。折线包络改为读取"每列覆盖到的分组", 数据读取量从 O(可见采样数) 降到 O(像素列数 × 少量分组),**绘制结果与全量扫描完全一致**。 - 实测(VERY_BIG_DATA.CSV = 1.77GB、2580 万行 × 5 信号,全选显示): 视图变化时的包络构建由 176~196ms 降到 ≈0ms;平移拖拽整帧由约 336ms 降到 90~120ms。 - 注意:包络路径按分组判断无效值(整组无有效值才断线), 因此密集视图中孤立的 NaN 不再把波形切成两段(原先会),视觉上更干净。 加速超大文件的显示模式切换(用户报告): - 散点绘制由逐点 FillEllipse 改为把全部散点合并进一条 GraphicsPath 后一次 FillPath: 实测 2500 点由 63ms 降到 7ms(基准),程序内单条密集信号由约 51ms 降到约 22ms, 仍是抗锯齿圆形,观感与逐点绘制一致。 - 线段/散点/点线切换时不再有卡顿感;空闲 CPU 仍为 0.00%。 验证: - Esc:分别启用时间轴缩放 / Y 轴缩放后按 Esc,两个按钮均回到未选中(截图对比), 时间光标按钮保持选中;框选拖拽中按 Esc 时间轴保持 0.2~1.2 不变。 - 清晰度:光标拖拽中与静止时对同一区域做像素哈希,结果完全一致; 框选拖拽同样一致;信号拖拽中间态截图中源波形与虚影均为抗锯齿全质量。 - 超大文件:线段/散点/点线切换与拖拽的正常渲染(截图),1.77GB 文件加载过渡动画正常。 - 回归:菜单内联编辑 Y 轴上下限、选区 Y 轴自适应、图例点击选中、面板改名均正常。 - 内存:BIG_DATA 全选 122MB(粗粒度层约 +1MB);VERY_BIG 全选 1224MB(理论下限 1.25GB)。 - make clean && make all 零警告零错误。
This commit is contained in:
1 parent
45b44eae57
commit
04e98ee041
5 files changed
+169
-76
No files matched your search
@@ -1113,11 +1113,16 @@ namespace jdi
|
||||
switch (key)
|
||||
{
|
||||
case VK_ESCAPE:
|
||||
// Esc 只用于放弃当前正在进行的拖拽(典型场景:缩放的框选选区还没松开左键)。
|
||||
// 取消后不应用选区、视图范围保持不变;松开左键也不会再生效(拖拽模式已复位)。
|
||||
// Esc 不再与时间光标关联:关闭光标请用工具栏「光标」按钮或再次点击该按钮,
|
||||
// 避免用户按 Esc 时意外把指针关掉。
|
||||
return m_plot.CancelDrag();
|
||||
{
|
||||
// Esc 的语义:
|
||||
// 1) 放弃当前正在进行的拖拽(典型场景:缩放的框选选区还没松开左键);
|
||||
// 取消后不应用选区、视图范围保持不变;
|
||||
// 2) 同时退出全部缩放模式,使工具栏「时间轴缩放」「Y 轴缩放」回到未选中态。
|
||||
// Esc 不与时间光标关联:关闭光标请用工具栏「光标」按钮,避免误关指针。
|
||||
bool changed = m_plot.CancelDrag();
|
||||
changed = m_plot.ExitZoomModes() || changed;
|
||||
return changed;
|
||||
}
|
||||
case VK_ADD:
|
||||
case VK_OEM_PLUS:
|
||||
m_plot.ZoomTimeStep(1.4);
|
||||
|
||||
Reference in new issue
Block a user