feat(resample): 实验性功能新增「重采样」(位于「自由标记」上方)

- Lane::ResampleItem + resample/resampleItems/resamplePanel/resampleScroll,
  并在 LaneCarry / SplitLane / PruneLaneSignalItems / RemapAfterSignalInsert|Removal 同步
- 面板:可滚动分组列表(信号色条目栏 + 复选框 + 展开三角),展开后 4 行:
  最大/最小数据间隔(只读,勾选时一次性缓存,绘制不扫描采样)+ 重采样间隔/频率(输入)
- 输入框联动:改间隔同步频率,改频率同步间隔(输入单位分别为秒 / Hz)
- 「构建为新信号」:DataSet::AppendGroupAxis 追加新时间轴 + InsertDerivedSignal,
  采样值先按公式/系数/绝对值/镜像/Y偏移变换再等间隔线性插值,时间轴偏移不烘值
- 新信号名 <原信号> (重采样 <自适应单位频率>);Utf8Util::FormatFrequency 为唯一实现
- 非单调轴 / 点太少 / 间隔过大 / 点数超 2000 万 ⇒ 拒绝构建并给出自绘提示
- 顺带加入 FormulaEval(公式编译/求值,供 ApplyDrawTransform 与后续 UI 使用)
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-11-02 20:41:26 +08:00
1 parent 30e9d65c30
commit 1e1c2432ae
19 files changed
+1979 -56

No files matched your search

+27 -1
View File
@@ -40,7 +40,9 @@ namespace jdi
CMD_OFFSET_Y = 503, /**< 「偏移调整」:Y 轴偏移输入框。 */
CMD_OFFSET_TIME = 504, /**< 「偏移调整」:时间轴偏移输入框。 */
CMD_MIRROR_HORIZONTAL = 510, /**< 「镜像」二级面板:水平镜像(数据反序)。 */
CMD_MIRROR_VERTICAL = 511 /**< 「镜像」二级面板:垂直镜像(按 Y=0 上下翻转)。 */
CMD_MIRROR_VERTICAL = 511, /**< 「镜像」二级面板:垂直镜像(按 Y=0 上下翻转)。 */
CMD_FORMULA_EDIT = 520, /**< 「公式映射」输入框(`Y = …`)。 */
CMD_FORMULA_RESET = 521 /**< 「公式映射」标题栏右侧的还原按钮:恢复为 `f(t)`。 */
};
/**
@@ -269,6 +271,27 @@ namespace jdi
return laneIndex >= 0;
}
/**
* @brief 取出并清除「需要以非模态浮层提示给用户」的消息。
*
* 「公式映射」解析失败时用它把警告交给宿主:宿主调用
* `PlotView::ShowPersistentHint()` 画在绘图区底部(与"加载文件失败"同一套自绘提示,
* **不弹 Windows 消息框**)。
*
* @param [OUT] text 提示文本(取出后清空)。
* @return 存在待提示的消息返回 true。
*/
bool TakePendingHint(std::wstring& text)
{
if (m_pendingHint.empty())
{
return false;
}
text = m_pendingHint;
m_pendingHint.clear();
return true;
}
/**
* @brief 向当前输入框送入一个字符。
* @param [IN] character 输入字符('\r' 提交、'\b' 退格、0x03 复制)。
@@ -1473,6 +1496,9 @@ namespace jdi
bool m_plotLaneRequestFlag = false;
int m_pendingPlotLane = -1;
/** 待宿主以非模态浮层提示的文本(见 `TakePendingHint`,例如公式解析失败)。 */
std::wstring m_pendingHint;
/**
* @brief 待确认的「关闭类」按钮(✕)。
*