一、悬停高亮「几乎看不到、只是曲线换了颜色」(对比提交f845616的旧版观感) 根因:调色板第 1 色就是主题强调色(0xFF268BD2),而上一轮为提速把稠密信号的光晕改成 「按包络带原始几何 FillPath」——与曲线**逐像素同形**,于是曲线上的那层半透明强调色 完全看不出变化;旧版观感来自「lineWidth+4 的描边笔向两侧各外扩 2~3px」。 修法(PlotViewPaint.cpp::PaintSignalHaloFor): 1) 逐列成对填四边形,上下左右都外扩 grow = (lineWidth + 4) * scale / 2 (竖向跃变处旧版 5px 笔涂出的正是那条整高色带); 2) 不能把整条包络拼成一个多边形:满幅方波相邻列区间互相交叉,缠绕填充规则会在交叠处 相互抵消 ⇒ 填充变成一条条竖缝(实测只覆盖约一半带宽); 3) alpha 从 0x55 调回 0x66(与旧版描边笔一致)。 代价仍只在「换信号/换视界/改样式」时付一次,此后每帧只 AlphaBlend。 三维对照(新增 haloshot 探针 +f845616工作树构建):变化像素 旧 73726 / 上一轮 13529 / 本轮 74916,目视与旧版一致(跃变处的整高色带恢复)。 二、MATLAB .mat(v7.3 = HDF5)支持,含嵌套分组 新增只读 HDF5 子集(不引第三方库):Utilities/Inc/MatH5.hpp + Utilities/Src/MatH5.cpp - 超级块 v0/v2;对象头 v1(含续块,主块长度以 headerSize 为准);符号表(B-tree v1 + 本地堆)与 link 消息;数据空间 v1/v2;数据类型 v1;数据布局 v3(紧凑/连续/分块); 分块数据集支持 deflate(zlib);地址一律相对基地址解析。 新增 MATLAB 语义层:Utilities/Inc/MatLoader.hpp + Utilities/Src/MatLoader.cpp 1) Simulink SDI / SimulationData.Dataset(识别 #refs# + #sigstream#): · #refs# 元素有 ElementType(signal/dataset)、Name、Values; · timeseries 的 Values/DataR2、Values/TimeR2 是 #sigstream#/<n> 的流编号; #data# 是 uint8 字节流,按 8 字节一组解释为 double(与 #length#/#sampleSize# 一致); · 子数据集的 Values 是对象引用数组(子元素)⇒ 还原嵌套树; · 分组名 = 从根到信号的各级数据集名用 - 连接(如 A/A1/XYZ → 组 A-A1、信号 XYZ), 信号名取元素 Name(空则退回 timeseries 的 Name,再退回 信号N)。 2) 普通 v7.3 变量:顶层数值矩阵按「列 = 信号、行 = 采样」读取(时间轴 = 采样序号), 结构体按字段递归。 加载管线扩成多分组:新增 LoadSignalSourceGroups()(DataLoader)→ AsyncLoadState::groups → Application::LoadFile 逐个 AddGroup;其它格式仍只有一个分组。 文件对话框与 IsSupportedSignalFile 增加 .mat。 三、验证(全部离屏,不占用鼠标/键盘/屏幕) - 新增 haloshot(截图对照 f845616)、matcheck(15/15:4 组 8 信号、时间轴单调、采样数正确)、 matui(11/11:Application::LoadFile 端到端把 4 个分组加进数据层与信号列表); - 回归 verify 49/49、panelanim 158/158、gridanim 93/93、hoverdrag 20/20、lanescroll 23/23、 datacheck 69/69、edgecheck 46/46、errcheck 19/19、halocheck 16/16、panflash 19/19、 panelstutter 8/8、stress 6/6; - make release / make debug 零警告;Makefile 与探针构建脚本补 -lz。 文档:Documents/agent_mem.md 追加本轮小节(含 4 条新规则:叠加层必须自带外扩、 缠绕填充不可用于自交包络带、HDF5 主消息块长度看 headerSize、 MATLAB 分块维度可能比数据空间多一维、按右侧补 1 对齐)。
73 lines
2.7 KiB
C++
73 lines
2.7 KiB
C++
#ifndef __DATA_LOADER_HPP__
|
||
#define __DATA_LOADER_HPP__
|
||
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
#include "DataTable.hpp"
|
||
|
||
namespace jdi
|
||
{
|
||
|
||
/**
|
||
* @brief 一个文件加载后的**命名分组**(多数格式只有一个,名字取文件名)。
|
||
*/
|
||
struct LoadedSourceGroup
|
||
{
|
||
std::wstring name; /**< 分组名(空表示"用源文件名")。 */
|
||
LoadedSource source; /**< 该分组的数据。 */
|
||
};
|
||
|
||
/**
|
||
* @brief 判断路径是否为应用当前支持的测量文件(按扩展名判断,不访问文件内容)。
|
||
* @param [IN] filePath 文件路径。
|
||
* @return 支持返回 true。
|
||
*/
|
||
bool IsSupportedSignalFile(const std::wstring& filePath);
|
||
|
||
/**
|
||
* @brief 供「打开文件」对话框使用的过滤器文本(`GetOpenFileNameW` 的 `lpstrFilter` 格式)。
|
||
* @return 双 NUL 结尾的过滤器文本。
|
||
*/
|
||
const wchar_t* SignalFileDialogFilter();
|
||
|
||
/**
|
||
* @brief 按扩展名选择加载器并读入一个测量文件(**唯一的文件加载入口**)。
|
||
*
|
||
* 上层(数据模型与界面)只依赖本函数返回的 `LoadedSource`,因此新增格式时
|
||
* **只需新增一个加载器并在这里登记**,其余代码完全不用改。
|
||
*
|
||
* 当前支持的格式:
|
||
* * CSV 文本(`.csv` / `.txt`):支持多个 `time` 列(多时间轴)与各时间轴不等长;
|
||
* * ASAM MDF v4(`.mf4` / `.mdf`):每个通道组(CG)是一个时间轴。
|
||
*
|
||
* @param [IN] filePath 文件完整路径。
|
||
* @param [OUT] source 解析结果(若干时间轴块)。
|
||
* @param [OUT] error 失败原因描述(成功时清空)。
|
||
* @param [IN] progress 进度回调,可为空。
|
||
* @return 加载成功返回 true。
|
||
*/
|
||
bool LoadSignalSource(const std::wstring& filePath, LoadedSource& source, std::wstring& error,
|
||
const LoadProgress& progress = LoadProgress());
|
||
|
||
/**
|
||
* @brief 与 `LoadSignalSource` 相同,但允许一个文件产出**多个命名分组**。
|
||
*
|
||
* 绝大多数格式只有一个分组(`groups.size() == 1`,`name` 为空 ⇒ 用文件名)。
|
||
* `.mat`(MATLAB 7.3)里的嵌套数据集会产生多个分组:分组名由"从顶层数据集到信号"
|
||
* 的路径用 `-` 连接而成(用户 2026-10-18 要求)。
|
||
*
|
||
* @param [IN] filePath 文件完整路径。
|
||
* @param [OUT] groups 读出的分组(至少一个)。
|
||
* @param [OUT] error 失败原因描述(成功时清空)。
|
||
* @param [IN] progress 进度回调,可为空。
|
||
* @return 加载成功返回 true。
|
||
*/
|
||
bool LoadSignalSourceGroups(const std::wstring& filePath, std::vector<LoadedSourceGroup>& groups,
|
||
std::wstring& error,
|
||
const LoadProgress& progress = LoadProgress());
|
||
|
||
} // namespace jdi
|
||
|
||
#endif // __DATA_LOADER_HPP__
|