基于 Win32 API + GDI+ 从零实现仿真数据检查器,用于替代 Simulink.sdi.view 查看带时间轴的 CSV 数据。 - 新增 Utilities 层:UTF-8/宽字符与数值格式化工具、CSV 解析器(自动识别分隔符与引号)、 信号数据集模型(时间轴识别、信号名解析、取值采样)、Solarised Light 主题色板与绘图基础工具 - 新增 Toolbar 组件:打开 CSV、适应窗口、适应时间、放大、缩小、合并网格、每信号一格 - 新增 SignalPanel 组件:信号列表(可见性开关、颜色标识、所属网格标记)、样式编辑区 (颜色、线宽、线段/散点/点线/阶梯显示方式、所属网格),支持右键上下文菜单与滚轮滚动 - 新增 PlotView 组件:多网格波形绘制、自适应时间轴与幅值轴、网格线、信号图例、 时间光标与实时数值读数、纵向滚动条 - 新增 Application 组件:DPI 感知(Per-Monitor V2)、双缓冲绘制、区域布局与分隔条拖拽、 鼠标与键盘消息分发、文件拖放、状态栏提示 - 交互能力:滚轮缩放、Shift+滚轮平移、Ctrl+滚轮缩放幅值、拖拽平移、幅值轴纵向缩放、 右键框选缩放、单击固定/取消时间光标、双击自适应、方向键平移与滚动 - 补齐 Makefile 的源文件与头文件索引,并新增 gdiplus、comdlg32 链接库
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
#ifndef __CSV_TABLE_HPP__
|
|
#define __CSV_TABLE_HPP__
|
|
|
|
#include <cstddef>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace jdi
|
|
{
|
|
|
|
/**
|
|
* @brief CSV 文件的解析结果,保存列名与数值矩阵。
|
|
*/
|
|
struct CsvTable
|
|
{
|
|
std::vector<std::wstring> headers; /**< 列名(已去除引号与首尾空白)。 */
|
|
std::vector<std::vector<double>> rows; /**< 数值矩阵,行优先,每行长度与 headers 一致。 */
|
|
wchar_t delimiter = L','; /**< 实际使用的分隔符。 */
|
|
std::size_t sourceRowCount = 0; /**< 文件中有效数据行数(不含空行与注释行)。 */
|
|
std::size_t skippedRowCount = 0; /**< 因格式异常被置为缺失值的行数。 */
|
|
|
|
/**
|
|
* @brief 判断解析结果是否包含可用的表格数据。
|
|
* @return 存在列名且存在数据行时返回 true。
|
|
*/
|
|
bool HasData() const
|
|
{
|
|
return !headers.empty() && !rows.empty();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @brief 读取并解析一个 CSV 文件。
|
|
* @param [IN] filePath CSV 文件完整路径(宽字符,支持中文路径)。
|
|
* @param [OUT] table 解析结果输出。
|
|
* @param [OUT] error 失败原因描述(成功时清空)。
|
|
* @return 解析成功返回 true,否则返回 false。
|
|
*/
|
|
bool LoadCsvTable(const std::wstring& filePath, CsvTable& table, std::wstring& error);
|
|
|
|
} // namespace jdi
|
|
|
|
#endif // __CSV_TABLE_HPP__
|