Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcc27a88be | ||
|
|
faa9695bc0 | ||
|
|
f102e9c661 | ||
|
|
dc3ce66308 | ||
|
|
dc0cc2e0d7 | ||
|
|
3ed17eb061 | ||
|
|
c258c11795 |
100
README.md
100
README.md
@@ -3,6 +3,8 @@
|
|||||||
基于 Vue 3、TypeScript 和 D3 的响应式 SVG 波形图组件。适合展示单通道、多通道和大规模采样
|
基于 Vue 3、TypeScript 和 D3 的响应式 SVG 波形图组件。适合展示单通道、多通道和大规模采样
|
||||||
数据,内置缩放、tooltip、图例、误差棒、标注、分页和多 Y 轴叠加。
|
数据,内置缩放、tooltip、图例、误差棒、标注、分页和多 Y 轴叠加。
|
||||||
|
|
||||||
|
当前稳定版本:`v0.1.15`。
|
||||||
|
|
||||||
组件使用不可变数据模型:替换 `data` 引用后会重新计算数据域和视口;大数据会按当前可见范围
|
组件使用不可变数据模型:替换 `data` 引用后会重新计算数据域和视口;大数据会按当前可见范围
|
||||||
和屏幕像素自动保峰降采样,而 tooltip、最近点查询和标注仍使用完整原始数据。
|
和屏幕像素自动保峰降采样,而 tooltip、最近点查询和标注仍使用完整原始数据。
|
||||||
|
|
||||||
@@ -16,18 +18,16 @@
|
|||||||
- 采样值、显式坐标点和多系列数据模型
|
- 采样值、显式坐标点和多系列数据模型
|
||||||
- `independent`、`separated`、`compact` 三种布局模式
|
- `independent`、`separated`、`compact` 三种布局模式
|
||||||
- 曲线、阶梯线、点符号和对称/非对称误差棒
|
- 曲线、阶梯线、点符号和对称/非对称误差棒
|
||||||
|
- 实线、虚线和点划线,可按系列独立配置
|
||||||
- 缩放过程事件、缩放结束按可视区间加载和视口重置
|
- 缩放过程事件、缩放结束按可视区间加载和视口重置
|
||||||
|
- 可选的空格拖拽平移,默认关闭并隔离多图表实例
|
||||||
- 多系列图例、受控显隐、网格分页和最多四根 Y 轴
|
- 多系列图例、受控显隐、网格分页和最多四根 Y 轴
|
||||||
|
- 按轨道控制水平/垂直网格线的显隐与颜色
|
||||||
- 受控标注、右键编辑、拖拽避让和自定义颜色
|
- 受控标注、右键编辑、拖拽避让和自定义颜色
|
||||||
- 标题、图框、坐标轴、时间单位和降采样参数可配置
|
- 标题、图框、坐标轴、零值参考线、净图和渲染参数可配置
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm install
|
|
||||||
pnpm dev
|
|
||||||
```
|
|
||||||
|
|
||||||
组件库将 Vue、D3、Ant Design Vue 和 vue3-colorpicker 作为 peer dependency;直接安装到业务项目时请一并
|
组件库将 Vue、D3、Ant Design Vue 和 vue3-colorpicker 作为 peer dependency;直接安装到业务项目时请一并
|
||||||
安装这些依赖:
|
安装这些依赖:
|
||||||
|
|
||||||
@@ -40,11 +40,13 @@ pnpm add waveform-analysis vue d3 ant-design-vue vue3-colorpicker
|
|||||||
组件库支持以下运行时版本:
|
组件库支持以下运行时版本:
|
||||||
|
|
||||||
| 依赖 | 支持版本 |
|
| 依赖 | 支持版本 |
|
||||||
| -------------- | ------------- |
|
| ---------------- | ------------- |
|
||||||
| Vue | `>=3.2.33 <4` |
|
| Vue | `>=3.2.33 <4` |
|
||||||
| Ant Design Vue | `>=3.2.20 <4` |
|
| Ant Design Vue | `>=3.2.20 <4` |
|
||||||
|
| D3 | `>=7.9.0 <8` |
|
||||||
|
| vue3-colorpicker | `>=2.3.0 <3` |
|
||||||
|
|
||||||
安装时请确保业务项目中的 Vue 与 Ant Design Vue 版本满足上述范围。
|
安装时请确保业务项目中的 peer dependency 版本均满足上述范围。
|
||||||
|
|
||||||
## 发布
|
## 发布
|
||||||
|
|
||||||
@@ -96,24 +98,32 @@ const data = ref<WaveformData>({
|
|||||||
| `displayMode` | `'independent' \| 'separated' \| 'compact'` | `'independent'` | 图框布局 |
|
| `displayMode` | `'independent' \| 'separated' \| 'compact'` | `'independent'` | 图框布局 |
|
||||||
| `overlayMode` | `'single-axis' \| 'multi-axis'` | `'single-axis'` | 叠加曲线的 Y 轴模式 |
|
| `overlayMode` | `'single-axis' \| 'multi-axis'` | `'single-axis'` | 叠加曲线的 Y 轴模式 |
|
||||||
| `timeUnit` | `'s' \| 'ms'` | `'ms'` | 坐标轴和 tooltip 展示单位 |
|
| `timeUnit` | `'s' \| 'ms'` | `'ms'` | 坐标轴和 tooltip 展示单位 |
|
||||||
|
| `xLabel` / `yLabel` | `string` | `时间(timeUnit)` / `'幅值'` | 坐标轴名称 |
|
||||||
|
| `lineColor` | `string` | `'#0960bd'` | 单波形默认颜色 |
|
||||||
| `width` / `height` | `number` | 自适应 | 组件总尺寸,单位为 CSS 像素 |
|
| `width` / `height` | `number` | 自适应 | 组件总尺寸,单位为 CSS 像素 |
|
||||||
| `zoomable` / `showTooltip` | `boolean` | `true` / `true` | 缩放和数值 tooltip 开关 |
|
| `zoomable` / `showTooltip` | `boolean` | `true` / `true` | 缩放和数值 tooltip 开关 |
|
||||||
| `pannable` | `boolean` | `false` | 空格拖拽平移开关 |
|
| `pannable` | `boolean` | `false` | 空格拖拽平移开关 |
|
||||||
| `minZoomSpan` | `number` | 未设置 | 最小缩放跨度,使用原始 X 数据单位 |
|
| `minZoomSpan` | `number` | 未设置 | 最小缩放跨度,使用原始 X 数据单位 |
|
||||||
|
| `minVisiblePoints` | `number` | `0` | 缩放后至少保留的不同 X 坐标数 |
|
||||||
| `initialXDomain` | `[number, number]` | 未设置 | 所有图框的初始 X 范围 |
|
| `initialXDomain` | `[number, number]` | 未设置 | 所有图框的初始 X 范围 |
|
||||||
| `initialXDomains` | `Record<string, [number, number]>` | 未设置 | 按 track/series ID 配置初始范围 |
|
| `initialXDomains` | `Record<string, [number, number]>` | 未设置 | 按 track/series ID 配置初始范围 |
|
||||||
| `grid` | `WaveformGridOptions` | `{ rowCount: 2, columnCount: 1, showPagination: true }` | 网格和分页 |
|
| `grid` | `WaveformGridOptions` | `{ rowCount: 2, columnCount: 1, showPagination: true }` | 网格和分页 |
|
||||||
|
| `axes` | `WaveformAxesOptions` | 轴线均显示 | X/Y 轴基线显隐 |
|
||||||
| `rendering` | `WaveformRenderingOptions` | `{}` | 降采样与点/误差棒间距 |
|
| `rendering` | `WaveformRenderingOptions` | `{}` | 降采样与点/误差棒间距 |
|
||||||
| `title` / `legend` / `frameStyle` | 对应公开类型 | 未设置 | 标题、图例和图框样式 |
|
| `title` / `legend` / `frameStyle` | 对应公开类型 | 未设置 | 标题、图例和图框样式 |
|
||||||
|
| `frameNumber` | `string \| number` | 未设置 | 图框水印内容 |
|
||||||
| `zeroLine` | `WaveformZeroLineOptions` | `{ visible: false }` | 零值参考线显隐与样式 |
|
| `zeroLine` | `WaveformZeroLineOptions` | `{ visible: false }` | 零值参考线显隐与样式 |
|
||||||
| `cleanView` | `boolean` | `false` | 仅保留波形的净图模式 |
|
| `cleanView` | `boolean` | `false` | 仅保留波形的净图模式 |
|
||||||
| `annotations` | `WaveformAnnotation[]` | `[]` | 受控标注数据 |
|
| `annotations` | `WaveformAnnotation[]` | `[]` | 受控标注数据 |
|
||||||
|
| `annotationsVisible` | `boolean` | `true` | 标注图层显隐 |
|
||||||
|
| `interactionMode` | `'zoom' \| 'annotation'` | `'zoom'` | 左键交互模式 |
|
||||||
| `hiddenSeriesIds` | `string[]` | 未设置 | 受控隐藏系列 ID |
|
| `hiddenSeriesIds` | `string[]` | 未设置 | 受控隐藏系列 ID |
|
||||||
| `defaultHiddenSeriesIds` | `string[]` | `[]` | 非受控模式的初始隐藏系列 |
|
| `defaultHiddenSeriesIds` | `string[]` | `[]` | 非受控模式的初始隐藏系列 |
|
||||||
|
|
||||||
所有公开类型均可从包入口导入,例如 `WaveformData`、`WaveformSeries`、
|
所有公开类型均可从包入口导入,例如 `WaveformData`、`WaveformSeries`、
|
||||||
`WaveformAnnotation`、`WaveformRenderingOptions`、`WaveformZeroLineOptions` 和
|
`WaveformAnnotation`、`WaveformLineStyle`、`WaveformRenderingOptions`、
|
||||||
`WaveformGridOptions`。
|
`WaveformAxesOptions`、`WaveformZeroLineOptions`、`WaveformGridOptions` 和
|
||||||
|
`WaveformGridTrackLines`。
|
||||||
|
|
||||||
### 数据结构
|
### 数据结构
|
||||||
|
|
||||||
@@ -157,7 +167,8 @@ const chartData: WaveformData = {
|
|||||||
|
|
||||||
```vue
|
```vue
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { WaveformChart } from './index'
|
import { WaveformChart } from 'waveform-analysis'
|
||||||
|
import 'waveform-analysis/style.css'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -311,28 +322,6 @@ const series = {
|
|||||||
`width` 和 `height` 始终表示组件总尺寸。标题显示后会从总高度中扣除标题区域,剩余高度
|
`width` 和 `height` 始终表示组件总尺寸。标题显示后会从总高度中扣除标题区域,剩余高度
|
||||||
用于 SVG 绘图区,因此启用标题不会扩大组件或破坏父容器布局。
|
用于 SVG 绘图区,因此启用标题不会扩大组件或破坏父容器布局。
|
||||||
|
|
||||||
宿主已有全局标题配置时,可以在未来接入组件库绘图链路时按以下方式映射:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
const waveformTitle = {
|
|
||||||
visible: hasQueried && !cleanViewEnabled && titleStyle.enabled,
|
|
||||||
text: titleStyle.titleName.trim() || defaultTitleText,
|
|
||||||
align: titleStyle.align,
|
|
||||||
textStyle: {
|
|
||||||
color: titleStyle.color,
|
|
||||||
fontSize: titleStyle.fontSize,
|
|
||||||
fontFamily: titleStyle.fontFamily,
|
|
||||||
rotation: titleStyle.rotation,
|
|
||||||
fontWeight: titleStyle.bold ? 700 : 400,
|
|
||||||
fontStyle: titleStyle.italic ? 'italic' : 'normal',
|
|
||||||
textDecoration: titleStyle.underline ? 'underline' : 'none',
|
|
||||||
},
|
|
||||||
} satisfies WaveformTitleOptions
|
|
||||||
```
|
|
||||||
|
|
||||||
宿主的抽屉折叠状态不需要传给组件。替换绘图链路时应同步移除宿主外层标题,避免重复
|
|
||||||
渲染;当前宿主实现无需修改。
|
|
||||||
|
|
||||||
Demo 左侧控制面板提供标题实时预览,可配置标题名称、显隐、对齐、字体、字号、粗体、
|
Demo 左侧控制面板提供标题实时预览,可配置标题名称、显隐、对齐、字体、字号、粗体、
|
||||||
斜体、下划线、旋转和颜色。字号范围为 `8–72px`,旋转范围为 `-180–180°`;样式栏中的
|
斜体、下划线、旋转和颜色。字号范围为 `8–72px`,旋转范围为 `-180–180°`;样式栏中的
|
||||||
`A` 用于恢复常规字重、非斜体和无下划线,关闭标题不会清除已经填写的配置。
|
`A` 用于恢复常规字重、非斜体和无下划线,关闭标题不会清除已经填写的配置。
|
||||||
@@ -353,6 +342,8 @@ Demo 左侧控制面板提供标题实时预览,可配置标题名称、显隐
|
|||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`frameStyle.borderStyle` 支持 `solid`(实线)、`dashed`(虚线)和 `dotted`(点虚线)。
|
||||||
|
|
||||||
对应的公开类型为 `WaveformFrameStyle`。默认边框颜色为 `#1f2937`、线宽为 `1`、线型为
|
对应的公开类型为 `WaveformFrameStyle`。默认边框颜色为 `#1f2937`、线宽为 `1`、线型为
|
||||||
`solid`,背景透明。`borderWidth` 为 `0` 时隐藏边框;非有限值或负数会回退到默认线宽。
|
`solid`,背景透明。`borderWidth` 为 `0` 时隐藏边框;非有限值或负数会回退到默认线宽。
|
||||||
|
|
||||||
@@ -373,6 +364,10 @@ const hiddenSeriesIds = ref<string[]>([])
|
|||||||
v-model:hidden-series-ids="hiddenSeriesIds"
|
v-model:hidden-series-ids="hiddenSeriesIds"
|
||||||
:legend="{
|
:legend="{
|
||||||
position: 'top-right',
|
position: 'top-right',
|
||||||
|
trackPositions: {
|
||||||
|
'group-1': 'top-left',
|
||||||
|
'group-2': 'bottom',
|
||||||
|
},
|
||||||
orientation: 'auto',
|
orientation: 'auto',
|
||||||
backgroundColor: 'rgba(255, 255, 255, 0.45)',
|
backgroundColor: 'rgba(255, 255, 255, 0.45)',
|
||||||
interactive: true,
|
interactive: true,
|
||||||
@@ -380,6 +375,11 @@ const hiddenSeriesIds = ref<string[]>([])
|
|||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`legend.trackPositions` 按图框 ID 单独覆盖图例位置;同一个 `trackId` 组成的图框以该
|
||||||
|
`trackId` 为键,未设置 `trackId` 时以规范化后的 `series.id` 为键。未命中的图框继续使用
|
||||||
|
`legend.position`,两者都未配置时使用 `top-right`。当 `orientation` 为 `auto` 时,每个图框
|
||||||
|
会根据最终位置独立选择排列方向:`top`、`bottom` 为水平排列,其余位置为垂直排列。
|
||||||
|
|
||||||
未配置或传入空字符串时,图例背景默认使用 `rgba(255, 255, 255, 0.7)`。
|
未配置或传入空字符串时,图例背景默认使用 `rgba(255, 255, 255, 0.7)`。
|
||||||
`legend.interactive` 默认为 `false`;开启后可以单击或使用键盘操作图例项切换曲线显隐。
|
`legend.interactive` 默认为 `false`;开启后可以单击或使用键盘操作图例项切换曲线显隐。
|
||||||
调用方可通过 `hiddenSeriesIds` 和 `update:hidden-series-ids` 控制状态,也可使用
|
调用方可通过 `hiddenSeriesIds` 和 `update:hidden-series-ids` 控制状态,也可使用
|
||||||
@@ -445,6 +445,29 @@ tooltip 仍然可用,切换回普通模式后原有配置和标注不会丢失
|
|||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`axes` 可以分别隐藏 X/Y 轴的基线,同时保留刻度短线、刻度数字、科学计数倍率、单位和轴标题。
|
||||||
|
与关闭网格线、设置 `frameStyle` 组合后,可以只使用图框边框围住绘图区:
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<WaveformChart
|
||||||
|
:data="chartData"
|
||||||
|
:axes="{
|
||||||
|
x: { lineVisible: false },
|
||||||
|
y: { lineVisible: false },
|
||||||
|
}"
|
||||||
|
:grid="{
|
||||||
|
trackLines: {
|
||||||
|
voltage: { horizontal: false, vertical: false },
|
||||||
|
},
|
||||||
|
}"
|
||||||
|
:frame-style="{
|
||||||
|
borderColor: '#1f2937',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderStyle: 'solid',
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
```
|
||||||
|
|
||||||
`interactionMode` 可选 `zoom` 或 `annotation`,默认使用缩放模式。右键绘图区可直接打开
|
`interactionMode` 可选 `zoom` 或 `annotation`,默认使用缩放模式。右键绘图区可直接打开
|
||||||
标注编辑器,无需切换交互模式。`zoomable`、`pannable` 和 `showTooltip` 可分别控制缩放、
|
标注编辑器,无需切换交互模式。`zoomable`、`pannable` 和 `showTooltip` 可分别控制缩放、
|
||||||
空格拖拽平移和 tooltip;平移默认关闭。
|
空格拖拽平移和 tooltip;平移默认关闭。
|
||||||
@@ -455,8 +478,8 @@ tooltip 仍然可用,切换回普通模式后原有配置和标注不会丢失
|
|||||||
组件按不可变数据处理:替换 `data` 引用会重新过滤、排序和缓存坐标域,并重置视口;
|
组件按不可变数据处理:替换 `data` 引用会重新过滤、排序和缓存坐标域,并重置视口;
|
||||||
原地修改已有数组不会触发缓存刷新。建议通过 `shallowRef` 保存大数据并整体替换引用。
|
原地修改已有数组不会触发缓存刷新。建议通过 `shallowRef` 保存大数据并整体替换引用。
|
||||||
规范化始终保留所有有效点,坐标域、误差棒、tooltip 和标注均使用完整数据;绘制路径会根据
|
规范化始终保留所有有效点,坐标域、误差棒、tooltip 和标注均使用完整数据;绘制路径会根据
|
||||||
当前视口和 `rendering` 配置自动降采样。如需在传入组件前主动压缩数据,可使用公开的
|
当前视口和 `rendering` 配置自动降采样。调用方如需在传入组件前主动压缩数据,应自行保留
|
||||||
`downsampleLTTB`、`downsampleMinMax` 或 `adaptiveSampling` 工具。
|
原始数据,以免影响 tooltip、标注和误差范围的精度。
|
||||||
|
|
||||||
默认在可见点超过 2,000 时进行降采样,每个像素最多渲染 4 个保峰点。可按业务调整:
|
默认在可见点超过 2,000 时进行降采样,每个像素最多渲染 4 个保峰点。可按业务调整:
|
||||||
|
|
||||||
@@ -496,7 +519,8 @@ import {
|
|||||||
WaveformChart,
|
WaveformChart,
|
||||||
type WaveformAnnotation,
|
type WaveformAnnotation,
|
||||||
type WaveformInteractionMode,
|
type WaveformInteractionMode,
|
||||||
} from './index'
|
} from 'waveform-analysis'
|
||||||
|
import 'waveform-analysis/style.css'
|
||||||
|
|
||||||
const annotations = ref<WaveformAnnotation[]>([])
|
const annotations = ref<WaveformAnnotation[]>([])
|
||||||
const annotationsVisible = ref(true)
|
const annotationsVisible = ref(true)
|
||||||
@@ -542,7 +566,7 @@ X、Y 轴会根据各自完整显示域选择格式:最大绝对值在 `[0.01,
|
|||||||
| --------------------------------------------------------------- | -------------------------------------------------------------- |
|
| --------------------------------------------------------------- | -------------------------------------------------------------- |
|
||||||
| `point-hover` | 当前最近点变化时触发,离开图表时传入 `null` |
|
| `point-hover` | 当前最近点变化时触发,离开图表时传入 `null` |
|
||||||
| `zoom-change` | 缩放过程中触发,参数为 `[start, end]` |
|
| `zoom-change` | 缩放过程中触发,参数为 `[start, end]` |
|
||||||
| `zoom-end` | 滚轮放大结束后触发;独立分图模式附带 `trackIndex`、`seriesIds` |
|
| `zoom-end` | 滚轮或框选结束后触发;`gesture` 区分二者,独立模式附带轨道信息 |
|
||||||
| `zoom-reset` | 双击重置视口时触发,调用方应恢复首次完整数据 |
|
| `zoom-reset` | 双击重置视口时触发,调用方应恢复首次完整数据 |
|
||||||
| `page-change` | 分页变化,参数为当前页和总页数 |
|
| `page-change` | 分页变化,参数为当前页和总页数 |
|
||||||
| `series-visibility-change` | 图例切换曲线显隐时触发 |
|
| `series-visibility-change` | 图例切换曲线显隐时触发 |
|
||||||
@@ -585,7 +609,7 @@ pnpm build
|
|||||||
发布由推送版本 tag 触发。先将 `package.json` 的 `version` 更新为目标版本并提交,再创建同版本 tag:
|
发布由推送版本 tag 触发。先将 `package.json` 的 `version` 更新为目标版本并提交,再创建同版本 tag:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git tag -a v0.1.7 -m "Release v0.1.7"
|
git tag -a v0.1.15 -m "Release v0.1.15"
|
||||||
git push origin main --follow-tags
|
git push origin main --follow-tags
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
16
package.json
16
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "waveform-analysis",
|
"name": "waveform-analysis",
|
||||||
"version": "0.1.15",
|
"version": "0.1.21",
|
||||||
"main": "./dist/index.cjs",
|
"main": "./dist/index.cjs",
|
||||||
"module": "./dist/index.js",
|
"module": "./dist/index.js",
|
||||||
"types": "./dist/types/index.d.ts",
|
"types": "./dist/types/index.d.ts",
|
||||||
@@ -34,11 +34,14 @@
|
|||||||
"test": "vitest run",
|
"test": "vitest run",
|
||||||
"test:coverage": "vitest run --coverage"
|
"test:coverage": "vitest run --coverage"
|
||||||
},
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"d3": "^7.9.0",
|
||||||
|
"vue3-colorpicker": "^2.3.0",
|
||||||
|
"ant-design-vue": "4.2.6"
|
||||||
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"ant-design-vue": ">=3.2.20 <4",
|
"ant-design-vue": ">=3.2.20 <4",
|
||||||
"d3": ">=7.9.0 <8",
|
"vue": ">=3.2.33 <4"
|
||||||
"vue": ">=3.2.33 <4",
|
|
||||||
"vue3-colorpicker": ">=2.3.0 <3"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "10.0.1",
|
"@eslint/js": "10.0.1",
|
||||||
@@ -47,8 +50,6 @@
|
|||||||
"@vitejs/plugin-vue": "6.0.8",
|
"@vitejs/plugin-vue": "6.0.8",
|
||||||
"@vitest/coverage-v8": "4.1.10",
|
"@vitest/coverage-v8": "4.1.10",
|
||||||
"@vue/test-utils": "2.4.11",
|
"@vue/test-utils": "2.4.11",
|
||||||
"ant-design-vue": "4.2.6",
|
|
||||||
"d3": "7.9.0",
|
|
||||||
"eslint": "10.7.0",
|
"eslint": "10.7.0",
|
||||||
"eslint-config-prettier": "10.1.8",
|
"eslint-config-prettier": "10.1.8",
|
||||||
"eslint-plugin-vue": "10.9.2",
|
"eslint-plugin-vue": "10.9.2",
|
||||||
@@ -60,7 +61,6 @@
|
|||||||
"vite": "8.1.5",
|
"vite": "8.1.5",
|
||||||
"vitest": "4.1.10",
|
"vitest": "4.1.10",
|
||||||
"vue": "3.5.40",
|
"vue": "3.5.40",
|
||||||
"vue-tsc": "3.3.7",
|
"vue-tsc": "3.3.7"
|
||||||
"vue3-colorpicker": "2.3.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
19
pnpm-lock.yaml
generated
19
pnpm-lock.yaml
generated
@@ -7,6 +7,16 @@ settings:
|
|||||||
importers:
|
importers:
|
||||||
|
|
||||||
.:
|
.:
|
||||||
|
dependencies:
|
||||||
|
ant-design-vue:
|
||||||
|
specifier: 4.2.6
|
||||||
|
version: 4.2.6(vue@3.5.40(typescript@6.0.3))
|
||||||
|
d3:
|
||||||
|
specifier: ^7.9.0
|
||||||
|
version: 7.9.0
|
||||||
|
vue3-colorpicker:
|
||||||
|
specifier: ^2.3.0
|
||||||
|
version: 2.3.0(@aesoper/normal-utils@0.1.5)(@popperjs/core@2.11.8)(@vueuse/core@10.11.1(vue@3.5.40(typescript@6.0.3)))(gradient-parser@1.2.0)(lodash-es@4.18.1)(tinycolor2@1.6.0)(vue-types@4.2.1(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3))
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@eslint/js':
|
'@eslint/js':
|
||||||
specifier: 10.0.1
|
specifier: 10.0.1
|
||||||
@@ -26,12 +36,6 @@ importers:
|
|||||||
'@vue/test-utils':
|
'@vue/test-utils':
|
||||||
specifier: 2.4.11
|
specifier: 2.4.11
|
||||||
version: 2.4.11(@vue/compiler-dom@3.5.40)(@vue/server-renderer@3.5.40)(vue@3.5.40(typescript@6.0.3))
|
version: 2.4.11(@vue/compiler-dom@3.5.40)(@vue/server-renderer@3.5.40)(vue@3.5.40(typescript@6.0.3))
|
||||||
ant-design-vue:
|
|
||||||
specifier: 4.2.6
|
|
||||||
version: 4.2.6(vue@3.5.40(typescript@6.0.3))
|
|
||||||
d3:
|
|
||||||
specifier: 7.9.0
|
|
||||||
version: 7.9.0
|
|
||||||
eslint:
|
eslint:
|
||||||
specifier: 10.7.0
|
specifier: 10.7.0
|
||||||
version: 10.7.0
|
version: 10.7.0
|
||||||
@@ -68,9 +72,6 @@ importers:
|
|||||||
vue-tsc:
|
vue-tsc:
|
||||||
specifier: 3.3.7
|
specifier: 3.3.7
|
||||||
version: 3.3.7(typescript@6.0.3)
|
version: 3.3.7(typescript@6.0.3)
|
||||||
vue3-colorpicker:
|
|
||||||
specifier: 2.3.0
|
|
||||||
version: 2.3.0(@aesoper/normal-utils@0.1.5)(@popperjs/core@2.11.8)(@vueuse/core@10.11.1(vue@3.5.40(typescript@6.0.3)))(gradient-parser@1.2.0)(lodash-es@4.18.1)(tinycolor2@1.6.0)(vue-types@4.2.1(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3))
|
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
expect(gridSizeInputs[1]?.props('value')).toBe(1)
|
expect(gridSizeInputs[1]?.props('value')).toBe(1)
|
||||||
expect(panel.find('[aria-label="显示水平网格线"]').exists()).toBe(true)
|
expect(panel.find('[aria-label="显示水平网格线"]').exists()).toBe(true)
|
||||||
expect(panel.find('[aria-label="显示垂直网格线"]').exists()).toBe(true)
|
expect(panel.find('[aria-label="显示垂直网格线"]').exists()).toBe(true)
|
||||||
|
expect(panel.find('[aria-label="显示横轴线"]').exists()).toBe(true)
|
||||||
|
expect(panel.find('[aria-label="显示纵轴线"]').exists()).toBe(true)
|
||||||
expect(panel.find('[aria-label="水平网格线颜色"]').exists()).toBe(true)
|
expect(panel.find('[aria-label="水平网格线颜色"]').exists()).toBe(true)
|
||||||
expect(panel.find('[aria-label="垂直网格线颜色"]').exists()).toBe(true)
|
expect(panel.find('[aria-label="垂直网格线颜色"]').exists()).toBe(true)
|
||||||
expect(panel.find('[aria-label="净图模式"]').exists()).toBe(true)
|
expect(panel.find('[aria-label="净图模式"]').exists()).toBe(true)
|
||||||
@@ -62,6 +64,9 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
expect(frameControls.text()).toContain('背景颜色')
|
expect(frameControls.text()).toContain('背景颜色')
|
||||||
expect(frameControls.find('[aria-label="图框线宽"]').exists()).toBe(true)
|
expect(frameControls.find('[aria-label="图框线宽"]').exists()).toBe(true)
|
||||||
expect(frameControls.find('[aria-label="图框线型"]').exists()).toBe(true)
|
expect(frameControls.find('[aria-label="图框线型"]').exists()).toBe(true)
|
||||||
|
expect(
|
||||||
|
frameControls.get('[aria-label="图框线型"]').getComponent(Select).props('options'),
|
||||||
|
).toContainEqual({ label: '点虚线', value: 'dotted' })
|
||||||
expect(frameControls.find('[aria-label="显示图框水印"]').exists()).toBe(true)
|
expect(frameControls.find('[aria-label="显示图框水印"]').exists()).toBe(true)
|
||||||
expect(frameControls.get('.frame-style-control--switch .ant-switch').classes()).toContain(
|
expect(frameControls.get('.frame-style-control--switch .ant-switch').classes()).toContain(
|
||||||
'ant-switch-small',
|
'ant-switch-small',
|
||||||
@@ -129,6 +134,27 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
wrapper.unmount()
|
wrapper.unmount()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('passes independent X and Y axis-line controls to the chart', async () => {
|
||||||
|
const wrapper = mount(App)
|
||||||
|
await flushPromises()
|
||||||
|
const chart = wrapper.getComponent(WaveformChart)
|
||||||
|
|
||||||
|
expect(chart.props('axes')).toEqual({
|
||||||
|
x: { lineVisible: false },
|
||||||
|
y: { lineVisible: false },
|
||||||
|
})
|
||||||
|
|
||||||
|
await wrapper.get('[aria-label="显示横轴线"]').trigger('click')
|
||||||
|
await wrapper.get('[aria-label="显示纵轴线"]').trigger('click')
|
||||||
|
await flushPromises()
|
||||||
|
|
||||||
|
expect(chart.props('axes')).toEqual({
|
||||||
|
x: { lineVisible: true },
|
||||||
|
y: { lineVisible: true },
|
||||||
|
})
|
||||||
|
wrapper.unmount()
|
||||||
|
})
|
||||||
|
|
||||||
it('passes tooltip and per-series line-style controls to the chart', async () => {
|
it('passes tooltip and per-series line-style controls to the chart', async () => {
|
||||||
const wrapper = mount(App)
|
const wrapper = mount(App)
|
||||||
await flushPromises()
|
await flushPromises()
|
||||||
@@ -175,7 +201,7 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
wrapper.unmount()
|
wrapper.unmount()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('keeps only one error-bar series in the first frame', async () => {
|
it('keeps the primary simulated signal in the first frame', async () => {
|
||||||
const wrapper = mount(App)
|
const wrapper = mount(App)
|
||||||
await flushPromises()
|
await flushPromises()
|
||||||
|
|
||||||
@@ -183,10 +209,10 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
const firstFrameSeries = firstFrame.findAll('.waveform-chart__series')
|
const firstFrameSeries = firstFrame.findAll('.waveform-chart__series')
|
||||||
|
|
||||||
expect(firstFrameSeries.map((series) => series.attributes('data-series-name'))).toEqual([
|
expect(firstFrameSeries.map((series) => series.attributes('data-series-name'))).toEqual([
|
||||||
'BT2_2M',
|
'正弦基波',
|
||||||
])
|
])
|
||||||
|
|
||||||
const triangleSeries = firstFrame.get('.waveform-chart__series[data-series-name="BT2_2M"]')
|
const triangleSeries = firstFrame.get('.waveform-chart__series[data-series-name="正弦基波"]')
|
||||||
expect(triangleSeries.find('.waveform-chart__line').exists()).toBe(false)
|
expect(triangleSeries.find('.waveform-chart__line').exists()).toBe(false)
|
||||||
expect(triangleSeries.get('.waveform-chart__points').attributes('data-point-type')).toBe(
|
expect(triangleSeries.get('.waveform-chart__points').attributes('data-point-type')).toBe(
|
||||||
'triangle',
|
'triangle',
|
||||||
@@ -196,7 +222,7 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
wrapper.unmount()
|
wrapper.unmount()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('splits the attached ENG channels across the remaining first-page frames', async () => {
|
it('keeps the simulated channels across the paginated frames', async () => {
|
||||||
const wrapper = mount(App)
|
const wrapper = mount(App)
|
||||||
await flushPromises()
|
await flushPromises()
|
||||||
|
|
||||||
@@ -206,7 +232,7 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
tracks.map((track) =>
|
tracks.map((track) =>
|
||||||
track.findAll('.waveform-chart__series').map((item) => item.attributes('data-series-name')),
|
track.findAll('.waveform-chart__series').map((item) => item.attributes('data-series-name')),
|
||||||
),
|
),
|
||||||
).toEqual([['BT2_2M'], ['ENG6KV1'], ['ENG4F2YIb3'], ['ENG8KJXAc']])
|
).toEqual([['正弦基波'], ['谐波扰动'], ['阻尼振荡'], ['阶跃响应']])
|
||||||
expect(
|
expect(
|
||||||
tracks
|
tracks
|
||||||
.slice(1)
|
.slice(1)
|
||||||
@@ -220,10 +246,16 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
WaveformData,
|
WaveformData,
|
||||||
{ kind: 'series' }
|
{ kind: 'series' }
|
||||||
>
|
>
|
||||||
const frameTwoSeries = chartData.series.filter((item) => item.trackId?.startsWith('frame-two-'))
|
const simulatedSeries = chartData.series
|
||||||
expect(frameTwoSeries.map((item) => item.name)).toEqual(['ENG6KV1', 'ENG4F2YIb3', 'ENG8KJXAc'])
|
expect(simulatedSeries.map((item) => item.name)).toEqual([
|
||||||
expect(frameTwoSeries.map((item) => item.unit)).toEqual(['KV', 'KA', 'A'])
|
'正弦基波',
|
||||||
frameTwoSeries.forEach((item) => {
|
'谐波扰动',
|
||||||
|
'阻尼振荡',
|
||||||
|
'阶跃响应',
|
||||||
|
'脉冲响应',
|
||||||
|
'带噪信号',
|
||||||
|
])
|
||||||
|
simulatedSeries.forEach((item) => {
|
||||||
expect(item.data.kind).toBe('points')
|
expect(item.data.kind).toBe('points')
|
||||||
if (item.data.kind === 'points') {
|
if (item.data.kind === 'points') {
|
||||||
expect(item.data.points).toHaveLength(1000)
|
expect(item.data.points).toHaveLength(1000)
|
||||||
@@ -237,7 +269,7 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
wrapper
|
wrapper
|
||||||
.findAll('.waveform-chart__track')
|
.findAll('.waveform-chart__track')
|
||||||
.map((track) => track.get('.waveform-chart__series').attributes('data-series-name')),
|
.map((track) => track.get('.waveform-chart__series').attributes('data-series-name')),
|
||||||
).toEqual(['BT1_2M', 'TEST_CH_2'])
|
).toEqual(['脉冲响应', '带噪信号'])
|
||||||
|
|
||||||
wrapper.unmount()
|
wrapper.unmount()
|
||||||
})
|
})
|
||||||
@@ -247,7 +279,7 @@ describe('App workspace layout', { timeout: 20_000 }, () => {
|
|||||||
await flushPromises()
|
await flushPromises()
|
||||||
|
|
||||||
const renderedTitle = () => wrapper.get('.waveform-chart__title-text')
|
const renderedTitle = () => wrapper.get('.waveform-chart__title-text')
|
||||||
expect(renderedTitle().text()).toMatch(/^Shot:\d+$/)
|
expect(renderedTitle().text()).toBe('模拟波形分析')
|
||||||
expect(renderedTitle().attributes('style')).toContain('Microsoft YaHei')
|
expect(renderedTitle().attributes('style')).toContain('Microsoft YaHei')
|
||||||
expect(renderedTitle().attributes('style')).toContain('font-size: 14px')
|
expect(renderedTitle().attributes('style')).toContain('font-size: 14px')
|
||||||
expect(renderedTitle().attributes('style')).toContain('font-weight: 400')
|
expect(renderedTitle().attributes('style')).toContain('font-weight: 400')
|
||||||
|
|||||||
117
src/App.vue
117
src/App.vue
@@ -7,6 +7,7 @@ import 'vue3-colorpicker/style.css'
|
|||||||
import {
|
import {
|
||||||
WaveformChart,
|
WaveformChart,
|
||||||
type WaveformAnnotation,
|
type WaveformAnnotation,
|
||||||
|
type WaveformAxesOptions,
|
||||||
type WaveformData,
|
type WaveformData,
|
||||||
type WaveformDisplayMode,
|
type WaveformDisplayMode,
|
||||||
type WaveformFrameStyle,
|
type WaveformFrameStyle,
|
||||||
@@ -16,57 +17,29 @@ import {
|
|||||||
type WaveformLegendOrientation,
|
type WaveformLegendOrientation,
|
||||||
type WaveformLegendPosition,
|
type WaveformLegendPosition,
|
||||||
type WaveformOverlayMode,
|
type WaveformOverlayMode,
|
||||||
type WaveformSeries,
|
|
||||||
type WaveformTitleOptions,
|
type WaveformTitleOptions,
|
||||||
type WaveformZoomEndPayload,
|
type WaveformZoomEndPayload,
|
||||||
type WaveformZeroLineOptions,
|
type WaveformZeroLineOptions,
|
||||||
} from './components'
|
} from './components'
|
||||||
import chartWaveformsJson from './data/chartWaveforms.json'
|
|
||||||
import frameTwoWaveformsJson from './data/frameTwoWaveforms.json'
|
|
||||||
import { normalizeWaveformSeries } from './core'
|
import { normalizeWaveformSeries } from './core'
|
||||||
|
import { createSimulatedWaveformData } from './data/simulatedWaveforms'
|
||||||
|
|
||||||
interface WaveformSourcePoint {
|
const fullChartData = createSimulatedWaveformData()
|
||||||
x: number
|
|
||||||
y: number
|
|
||||||
error?: number
|
|
||||||
lowerError?: number
|
|
||||||
upperError?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
interface WaveformSourceRow {
|
|
||||||
chnl: string
|
|
||||||
chnl_id: number
|
|
||||||
dat_unit: string
|
|
||||||
data: WaveformSourcePoint[]
|
|
||||||
dev: number
|
|
||||||
shot: number
|
|
||||||
time?: number[]
|
|
||||||
time_unit: 'ms'
|
|
||||||
}
|
|
||||||
|
|
||||||
interface FrameTwoWaveformRow {
|
|
||||||
chnl: string
|
|
||||||
chnl_id: number
|
|
||||||
dat_unit: string
|
|
||||||
data: number[]
|
|
||||||
time: number[]
|
|
||||||
time_unit: 'ms'
|
|
||||||
}
|
|
||||||
|
|
||||||
const sourceRows = chartWaveformsJson as unknown as WaveformSourceRow[]
|
|
||||||
const displayMode = ref<WaveformDisplayMode>('independent')
|
const displayMode = ref<WaveformDisplayMode>('independent')
|
||||||
const overlayMode = ref<WaveformOverlayMode>('single-axis')
|
const overlayMode = ref<WaveformOverlayMode>('single-axis')
|
||||||
const rowCount = ref(4)
|
const rowCount = ref(4)
|
||||||
const columnCount = ref(1)
|
const columnCount = ref(1)
|
||||||
const frameBorderColor = ref('#1f2937')
|
const frameBorderColor = ref('#1f2937')
|
||||||
const frameBorderWidth = ref(1)
|
const frameBorderWidth = ref(1)
|
||||||
const frameBorderStyle = ref<'solid' | 'dashed'>('solid')
|
const frameBorderStyle = ref<NonNullable<WaveformFrameStyle['borderStyle']>>('solid')
|
||||||
const frameBackgroundColor = ref('rgba(255, 255, 255, 0)')
|
const frameBackgroundColor = ref('rgba(255, 255, 255, 0)')
|
||||||
const frameWatermarkVisible = ref(true)
|
const frameWatermarkVisible = ref(true)
|
||||||
const horizontalGridVisible = ref(true)
|
const horizontalGridVisible = ref(true)
|
||||||
const horizontalGridColor = ref('#dfe5ef')
|
const horizontalGridColor = ref('#dfe5ef')
|
||||||
const verticalGridVisible = ref(true)
|
const verticalGridVisible = ref(true)
|
||||||
const verticalGridColor = ref('#dfe5ef')
|
const verticalGridColor = ref('#dfe5ef')
|
||||||
|
const xAxisLineVisible = ref(false)
|
||||||
|
const yAxisLineVisible = ref(false)
|
||||||
const annotations = ref<WaveformAnnotation[]>([])
|
const annotations = ref<WaveformAnnotation[]>([])
|
||||||
const annotationsVisible = ref(true)
|
const annotationsVisible = ref(true)
|
||||||
const cleanView = ref(false)
|
const cleanView = ref(false)
|
||||||
@@ -81,7 +54,7 @@ const legendOrientation = ref<WaveformLegendOrientation>('auto')
|
|||||||
const legendBackgroundColor = ref('rgba(255, 255, 255, 0.7)')
|
const legendBackgroundColor = ref('rgba(255, 255, 255, 0.7)')
|
||||||
const hiddenSeriesIds = ref<string[]>([])
|
const hiddenSeriesIds = ref<string[]>([])
|
||||||
const titleVisible = ref(true)
|
const titleVisible = ref(true)
|
||||||
const titleText = ref(`Shot:${sourceRows[0]?.shot ?? 4712}`)
|
const titleText = ref('模拟波形分析')
|
||||||
const titleAlign = ref<NonNullable<WaveformTitleOptions['align']>>('center')
|
const titleAlign = ref<NonNullable<WaveformTitleOptions['align']>>('center')
|
||||||
const titleFontFamily = ref('"Microsoft YaHei", "微软雅黑", sans-serif')
|
const titleFontFamily = ref('"Microsoft YaHei", "微软雅黑", sans-serif')
|
||||||
const titleFontSize = ref(14)
|
const titleFontSize = ref(14)
|
||||||
@@ -109,6 +82,7 @@ const legendOrientationOptions: Array<{ label: string; value: WaveformLegendOrie
|
|||||||
const frameBorderStyleOptions = [
|
const frameBorderStyleOptions = [
|
||||||
{ label: '实线', value: 'solid' },
|
{ label: '实线', value: 'solid' },
|
||||||
{ label: '虚线', value: 'dashed' },
|
{ label: '虚线', value: 'dashed' },
|
||||||
|
{ label: '点虚线', value: 'dotted' },
|
||||||
]
|
]
|
||||||
const zeroLineDashOptions = [
|
const zeroLineDashOptions = [
|
||||||
{ label: '虚线', value: '6 4' },
|
{ label: '虚线', value: '6 4' },
|
||||||
@@ -136,6 +110,10 @@ const frameStyle = computed<WaveformFrameStyle>(() => ({
|
|||||||
borderStyle: frameBorderStyle.value,
|
borderStyle: frameBorderStyle.value,
|
||||||
backgroundColor: frameBackgroundColor.value,
|
backgroundColor: frameBackgroundColor.value,
|
||||||
}))
|
}))
|
||||||
|
const axes = computed<WaveformAxesOptions>(() => ({
|
||||||
|
x: { lineVisible: xAxisLineVisible.value },
|
||||||
|
y: { lineVisible: yAxisLineVisible.value },
|
||||||
|
}))
|
||||||
const zeroLine = computed<WaveformZeroLineOptions>(() => ({
|
const zeroLine = computed<WaveformZeroLineOptions>(() => ({
|
||||||
visible: zeroLineVisible.value,
|
visible: zeroLineVisible.value,
|
||||||
color: zeroLineColor.value,
|
color: zeroLineColor.value,
|
||||||
@@ -143,62 +121,6 @@ const zeroLine = computed<WaveformZeroLineOptions>(() => ({
|
|||||||
dash: zeroLineDash.value,
|
dash: zeroLineDash.value,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const seriesStylePresets: Array<Pick<WaveformSeries, 'lineType' | 'pointType' | 'errorBar'>> = [
|
|
||||||
{ lineType: 'none', pointType: 'triangle', errorBar: { visible: true } },
|
|
||||||
{ lineType: 'linear', pointType: 'none' },
|
|
||||||
{ lineType: 'step-after', pointType: 'circle', errorBar: { visible: true } },
|
|
||||||
{ lineType: 'linear', pointType: 'diamond', errorBar: { visible: true } },
|
|
||||||
]
|
|
||||||
|
|
||||||
const waveformSeries: WaveformSeries[] = sourceRows.map((row, seriesIndex) => {
|
|
||||||
const presetStyle = seriesStylePresets[seriesIndex % seriesStylePresets.length]!
|
|
||||||
const style: Pick<WaveformSeries, 'lineType' | 'pointType' | 'errorBar'> =
|
|
||||||
row.chnl === 'TEST_CH_4'
|
|
||||||
? { lineType: 'linear', pointType: 'circle', errorBar: { visible: false } }
|
|
||||||
: presetStyle
|
|
||||||
return {
|
|
||||||
id: String(row.chnl_id),
|
|
||||||
trackId:
|
|
||||||
row.chnl.startsWith('TEST_CH_') && row.chnl !== 'TEST_CH_2'
|
|
||||||
? String(sourceRows[0]?.chnl_id ?? row.chnl_id)
|
|
||||||
: undefined,
|
|
||||||
name: row.chnl,
|
|
||||||
unit: row.dat_unit,
|
|
||||||
...style,
|
|
||||||
data: {
|
|
||||||
kind: 'points',
|
|
||||||
points: row.data,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const frameTwoWaveforms = frameTwoWaveformsJson as FrameTwoWaveformRow[]
|
|
||||||
const frameTwoSeries: WaveformSeries[] = frameTwoWaveforms.map((series) => ({
|
|
||||||
id: String(series.chnl_id),
|
|
||||||
trackId: `frame-two-${series.chnl_id}`,
|
|
||||||
name: series.chnl,
|
|
||||||
unit: series.dat_unit.trim(),
|
|
||||||
lineType: 'linear',
|
|
||||||
pointType: 'none',
|
|
||||||
data: {
|
|
||||||
kind: 'points',
|
|
||||||
points: series.data.flatMap((y, index) => {
|
|
||||||
const time = series.time[index]
|
|
||||||
return Number.isFinite(time) && Number.isFinite(y) ? [{ x: time! / 1000, y }] : []
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
}))
|
|
||||||
|
|
||||||
const frameOneTrackId = String(sourceRows[0]?.chnl_id ?? 'frame-one')
|
|
||||||
const frameOneCandidates = waveformSeries.filter(
|
|
||||||
(series) => series.id === frameOneTrackId || series.trackId === frameOneTrackId,
|
|
||||||
)
|
|
||||||
const frameOneSeries = frameOneCandidates.filter((series) => series.errorBar?.visible).slice(0, 1)
|
|
||||||
const remainingSeries = waveformSeries.filter((series) => !frameOneCandidates.includes(series))
|
|
||||||
const fullChartData: WaveformData = {
|
|
||||||
kind: 'series',
|
|
||||||
series: [...frameOneSeries, ...frameTwoSeries, ...remainingSeries],
|
|
||||||
}
|
|
||||||
const initialXValues = normalizeWaveformSeries(fullChartData).flatMap((series) =>
|
const initialXValues = normalizeWaveformSeries(fullChartData).flatMap((series) =>
|
||||||
series.points.map((point) => point.x),
|
series.points.map((point) => point.x),
|
||||||
)
|
)
|
||||||
@@ -217,7 +139,9 @@ const initialXDomainValue: [number, number] | undefined =
|
|||||||
const initialXDomain = ref<[number, number] | undefined>(initialXDomainValue)
|
const initialXDomain = ref<[number, number] | undefined>(initialXDomainValue)
|
||||||
const chartData = ref<WaveformData>(fullChartData)
|
const chartData = ref<WaveformData>(fullChartData)
|
||||||
const lineStyleOverrides = ref<Record<string, WaveformLineStyle>>({})
|
const lineStyleOverrides = ref<Record<string, WaveformLineStyle>>({})
|
||||||
const selectedSeriesId = ref(String(sourceRows[0]?.chnl_id ?? ''))
|
const selectedSeriesId = ref(
|
||||||
|
fullChartData.kind === 'series' ? (fullChartData.series[0]?.id ?? '') : '',
|
||||||
|
)
|
||||||
const lineStyleOptions: Array<{ label: string; value: WaveformLineStyle }> = [
|
const lineStyleOptions: Array<{ label: string; value: WaveformLineStyle }> = [
|
||||||
{ label: '实线', value: 'solid' },
|
{ label: '实线', value: 'solid' },
|
||||||
{ label: '虚线', value: 'dashed' },
|
{ label: '虚线', value: 'dashed' },
|
||||||
@@ -510,7 +434,7 @@ onBeforeUnmount(() => window.removeEventListener('keydown', handleWindowKeydown)
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="control-section">
|
<section class="control-section">
|
||||||
<h2>网格线</h2>
|
<h2>网格与轴线</h2>
|
||||||
<div class="grid-line-controls">
|
<div class="grid-line-controls">
|
||||||
<div class="grid-line-control">
|
<div class="grid-line-control">
|
||||||
<span>水平网格</span>
|
<span>水平网格</span>
|
||||||
@@ -548,6 +472,14 @@ onBeforeUnmount(() => window.removeEventListener('keydown', handleWindowKeydown)
|
|||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="grid-line-control grid-line-control--switch-only">
|
||||||
|
<span>横轴线</span>
|
||||||
|
<Switch v-model:checked="xAxisLineVisible" size="small" aria-label="显示横轴线" />
|
||||||
|
</div>
|
||||||
|
<div class="grid-line-control grid-line-control--switch-only">
|
||||||
|
<span>纵轴线</span>
|
||||||
|
<Switch v-model:checked="yAxisLineVisible" size="small" aria-label="显示纵轴线" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -773,6 +705,7 @@ onBeforeUnmount(() => window.removeEventListener('keydown', handleWindowKeydown)
|
|||||||
interactive: true,
|
interactive: true,
|
||||||
}"
|
}"
|
||||||
:frame-style="frameStyle"
|
:frame-style="frameStyle"
|
||||||
|
:axes="axes"
|
||||||
:clean-view="cleanView"
|
:clean-view="cleanView"
|
||||||
:show-tooltip="showTooltip"
|
:show-tooltip="showTooltip"
|
||||||
:zero-line="zeroLine"
|
:zero-line="zeroLine"
|
||||||
|
|||||||
@@ -349,6 +349,75 @@ describe('WaveformChart', () => {
|
|||||||
expect(zeroLines[0].attributes('y1')).not.toBe(zeroLines[1].attributes('y1'))
|
expect(zeroLines[0].attributes('y1')).not.toBe(zeroLines[1].attributes('y1'))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('hides X and Y axis lines independently while preserving axis text and the frame', async () => {
|
||||||
|
const wrapper = await mountSizedChart({
|
||||||
|
kind: 'series',
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
id: 'channel',
|
||||||
|
name: 'Voltage',
|
||||||
|
data: {
|
||||||
|
kind: 'points',
|
||||||
|
points: [
|
||||||
|
{ x: 0, y: -1 },
|
||||||
|
{ x: 1, y: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
const xAxis = wrapper.get('.waveform-chart__axis--x')
|
||||||
|
const yAxis = wrapper.get('.waveform-chart__axis--y')
|
||||||
|
|
||||||
|
expect(xAxis.classes()).not.toContain('waveform-track__axis--line-hidden')
|
||||||
|
expect(yAxis.classes()).not.toContain('waveform-track__axis--line-hidden')
|
||||||
|
|
||||||
|
await wrapper.setProps({ axes: { x: { lineVisible: false } } })
|
||||||
|
await flushPromises()
|
||||||
|
expect(xAxis.classes()).toContain('waveform-track__axis--line-hidden')
|
||||||
|
expect(yAxis.classes()).not.toContain('waveform-track__axis--line-hidden')
|
||||||
|
expect(xAxis.get('path.domain').attributes('display')).toBe('none')
|
||||||
|
expect(
|
||||||
|
xAxis.findAll('.tick line').every((line) => line.attributes('display') === undefined),
|
||||||
|
).toBe(true)
|
||||||
|
expect(yAxis.get('path.domain').attributes('display')).toBeUndefined()
|
||||||
|
|
||||||
|
await wrapper.setProps({
|
||||||
|
axes: {
|
||||||
|
x: { lineVisible: false },
|
||||||
|
y: { lineVisible: false },
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
rowCount: 1,
|
||||||
|
columnCount: 1,
|
||||||
|
trackLines: { channel: { horizontal: false, vertical: false } },
|
||||||
|
},
|
||||||
|
frameStyle: { borderColor: '#dc2626', borderWidth: 2 },
|
||||||
|
})
|
||||||
|
await flushPromises()
|
||||||
|
|
||||||
|
expect(xAxis.classes()).toContain('waveform-track__axis--line-hidden')
|
||||||
|
expect(yAxis.classes()).toContain('waveform-track__axis--line-hidden')
|
||||||
|
expect(yAxis.get('path.domain').attributes('display')).toBe('none')
|
||||||
|
expect(
|
||||||
|
yAxis.findAll('.tick line').every((line) => line.attributes('display') === undefined),
|
||||||
|
).toBe(true)
|
||||||
|
expect(xAxis.findAll('text').length).toBeGreaterThan(0)
|
||||||
|
expect(yAxis.findAll('text').length).toBeGreaterThan(0)
|
||||||
|
expect(wrapper.findAll('.waveform-chart__axis-endpoint')).toHaveLength(2)
|
||||||
|
expect(wrapper.get('.waveform-chart__y-axis-label').text()).toBe('Voltage')
|
||||||
|
expect(wrapper.findAll('[data-grid-direction]')).toHaveLength(0)
|
||||||
|
expect(wrapper.get('.waveform-chart__plot-frame').attributes()).toMatchObject({
|
||||||
|
stroke: '#dc2626',
|
||||||
|
'stroke-width': '2',
|
||||||
|
})
|
||||||
|
|
||||||
|
await wrapper.setProps({ axes: { x: { lineVisible: true }, y: { lineVisible: true } } })
|
||||||
|
await flushPromises()
|
||||||
|
expect(xAxis.get('path.domain').attributes('display')).toBeUndefined()
|
||||||
|
expect(yAxis.get('path.domain').attributes('display')).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
it('preserves a titled multi-axis plot and hides auxiliary layers in clean view', async () => {
|
it('preserves a titled multi-axis plot and hides auxiliary layers in clean view', async () => {
|
||||||
const data: WaveformData = {
|
const data: WaveformData = {
|
||||||
kind: 'series',
|
kind: 'series',
|
||||||
@@ -1079,6 +1148,61 @@ describe('WaveformChart', () => {
|
|||||||
expect(wrapper.attributes('data-chart-left-margin')).toBe('64')
|
expect(wrapper.attributes('data-chart-left-margin')).toBe('64')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('resolves legend positions by stable track id across pages', async () => {
|
||||||
|
const wrapper = await mountSizedChart(
|
||||||
|
{
|
||||||
|
kind: 'series',
|
||||||
|
series: Array.from({ length: 8 }, (_, index) => ({
|
||||||
|
id: `series-${index}`,
|
||||||
|
trackId: `frame-${Math.floor(index / 2)}`,
|
||||||
|
name: `series ${index}`,
|
||||||
|
data: {
|
||||||
|
kind: 'points' as const,
|
||||||
|
points: [
|
||||||
|
{ x: 0, y: index },
|
||||||
|
{ x: 1, y: index + 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
grid: { rowCount: 2, columnCount: 1, showPagination: true },
|
||||||
|
legend: {
|
||||||
|
position: 'left',
|
||||||
|
orientation: 'auto',
|
||||||
|
trackPositions: {
|
||||||
|
'frame-0': 'top',
|
||||||
|
'frame-1': 'bottom-right',
|
||||||
|
'frame-2': 'bottom',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
const legendForTrack = (trackId: string) =>
|
||||||
|
wrapper.get(`[data-legend-track-id="${trackId}"] .waveform-chart__legend`)
|
||||||
|
|
||||||
|
expect(legendForTrack('frame-0').attributes('data-position')).toBe('top')
|
||||||
|
expect(legendForTrack('frame-0').attributes('data-orientation')).toBe('horizontal')
|
||||||
|
expect(legendForTrack('frame-1').attributes('data-position')).toBe('bottom-right')
|
||||||
|
expect(legendForTrack('frame-1').attributes('data-orientation')).toBe('vertical')
|
||||||
|
|
||||||
|
await wrapper.setProps({
|
||||||
|
legend: {
|
||||||
|
position: 'left',
|
||||||
|
orientation: 'vertical',
|
||||||
|
trackPositions: { 'frame-0': 'top', 'frame-1': 'bottom-right', 'frame-2': 'bottom' },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(legendForTrack('frame-0').attributes('data-orientation')).toBe('vertical')
|
||||||
|
|
||||||
|
await wrapper.get('.ant-pagination-next button').trigger('click')
|
||||||
|
expect(legendForTrack('frame-2').attributes('data-position')).toBe('bottom')
|
||||||
|
expect(legendForTrack('frame-2').attributes('data-orientation')).toBe('vertical')
|
||||||
|
expect(legendForTrack('frame-3').attributes('data-position')).toBe('left')
|
||||||
|
expect(legendForTrack('frame-3').attributes('data-orientation')).toBe('vertical')
|
||||||
|
})
|
||||||
|
|
||||||
it('applies a configurable alpha background to every visible legend', async () => {
|
it('applies a configurable alpha background to every visible legend', async () => {
|
||||||
const wrapper = await mountSizedChart(
|
const wrapper = await mountSizedChart(
|
||||||
{
|
{
|
||||||
@@ -2208,6 +2332,44 @@ describe('WaveformChart', () => {
|
|||||||
expect(pendingAnimationFrameCount()).toBe(0)
|
expect(pendingAnimationFrameCount()).toBe(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('isolates hover rendering from the chart, track, and waveform path subtrees', async () => {
|
||||||
|
const wrapper = await mountSizedChart(
|
||||||
|
{
|
||||||
|
kind: 'points',
|
||||||
|
points: [
|
||||||
|
{ x: 0, y: 0 },
|
||||||
|
{ x: 1, y: 5 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{ grid: { rowCount: 1, columnCount: 1 } },
|
||||||
|
)
|
||||||
|
const overlay = wrapper.get('.waveform-chart__overlay')
|
||||||
|
const overlayWidth = Number(overlay.attributes('width'))
|
||||||
|
Object.defineProperty(overlay.element, 'getBoundingClientRect', {
|
||||||
|
value: () => ({ left: 0, top: 0, width: overlayWidth, height: 290 }),
|
||||||
|
})
|
||||||
|
|
||||||
|
const track = wrapper.getComponent({ name: 'WaveformTrack' })
|
||||||
|
const seriesLayer = wrapper.getComponent({ name: 'WaveformSeriesLayer' })
|
||||||
|
const chartUpdate = vi.spyOn(wrapper.vm.$, 'update')
|
||||||
|
const trackUpdate = vi.spyOn(track.vm.$, 'update')
|
||||||
|
const seriesLayerUpdate = vi.spyOn(seriesLayer.vm.$, 'update')
|
||||||
|
const pathBeforeHover = wrapper.get('.waveform-chart__line').element
|
||||||
|
|
||||||
|
overlay.element.dispatchEvent(
|
||||||
|
new MouseEvent('pointermove', { clientX: overlayWidth, clientY: 120, bubbles: true }),
|
||||||
|
)
|
||||||
|
flushAnimationFrames()
|
||||||
|
await flushPromises()
|
||||||
|
|
||||||
|
expect(wrapper.get('.waveform-chart__tooltip').text()).toContain('ms: 1,000.0000')
|
||||||
|
expect(wrapper.findAll('.waveform-chart__crosshair line')).toHaveLength(1)
|
||||||
|
expect(wrapper.get('.waveform-chart__line').element).toBe(pathBeforeHover)
|
||||||
|
expect(chartUpdate).not.toHaveBeenCalled()
|
||||||
|
expect(trackUpdate).not.toHaveBeenCalled()
|
||||||
|
expect(seriesLayerUpdate).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
it('renders reference grid styling and an optional frame watermark', async () => {
|
it('renders reference grid styling and an optional frame watermark', async () => {
|
||||||
const wrapper = await mountSizedChart(
|
const wrapper = await mountSizedChart(
|
||||||
{
|
{
|
||||||
@@ -2329,6 +2491,17 @@ describe('WaveformChart', () => {
|
|||||||
expect(wrapper.get('.waveform-chart__plot-frame').attributes('stroke-width')).toBe('1')
|
expect(wrapper.get('.waveform-chart__plot-frame').attributes('stroke-width')).toBe('1')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('renders a dotted frame with rounded dots', async () => {
|
||||||
|
const wrapper = await mountSizedChart(gridSeries(1), {
|
||||||
|
frameStyle: { borderStyle: 'dotted' },
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(wrapper.get('.waveform-chart__plot-frame').attributes()).toMatchObject({
|
||||||
|
'stroke-dasharray': '1 3',
|
||||||
|
'stroke-linecap': 'round',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('continues minor x-grid lines beyond the final major tick to the exact endpoint', async () => {
|
it('continues minor x-grid lines beyond the final major tick to the exact endpoint', async () => {
|
||||||
const wrapper = await mountSizedChart({
|
const wrapper = await mountSizedChart({
|
||||||
kind: 'points',
|
kind: 'points',
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
onBeforeUnmount,
|
onBeforeUnmount,
|
||||||
onMounted,
|
onMounted,
|
||||||
ref,
|
ref,
|
||||||
|
shallowReactive,
|
||||||
shallowRef,
|
shallowRef,
|
||||||
watch,
|
watch,
|
||||||
type CSSProperties,
|
type CSSProperties,
|
||||||
@@ -28,6 +29,7 @@ import {
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
type WaveformAnnotation,
|
type WaveformAnnotation,
|
||||||
|
type WaveformAxesOptions,
|
||||||
type WaveformData,
|
type WaveformData,
|
||||||
type WaveformDisplayMode,
|
type WaveformDisplayMode,
|
||||||
type WaveformFrameStyle,
|
type WaveformFrameStyle,
|
||||||
@@ -57,8 +59,8 @@ import {
|
|||||||
type AnnotationSeriesInfo,
|
type AnnotationSeriesInfo,
|
||||||
type AnnotationTrackLayout,
|
type AnnotationTrackLayout,
|
||||||
} from './annotation'
|
} from './annotation'
|
||||||
import { WaveformTooltip } from './interaction'
|
import { WaveformHoverHost } from './interaction'
|
||||||
import { WaveformLegend, WaveformTrack } from './rendering'
|
import { WaveformHoverLayer, WaveformLegend, WaveformTrack } from './rendering'
|
||||||
import {
|
import {
|
||||||
channelColors,
|
channelColors,
|
||||||
margin as chartMargin,
|
margin as chartMargin,
|
||||||
@@ -87,7 +89,13 @@ import {
|
|||||||
X_AXIS_BAND,
|
X_AXIS_BAND,
|
||||||
type WaveformGridOptions,
|
type WaveformGridOptions,
|
||||||
} from './core/grid'
|
} from './core/grid'
|
||||||
import type { DisplaySeries, DisplayTrack, HoveredSeriesPoint, TrackLayout } from './core/types'
|
import type {
|
||||||
|
DisplaySeries,
|
||||||
|
DisplayTrack,
|
||||||
|
HoveredSeriesPoint,
|
||||||
|
TrackLayout,
|
||||||
|
WaveformHoverState,
|
||||||
|
} from './core/types'
|
||||||
import {
|
import {
|
||||||
buildTrackLayouts,
|
buildTrackLayouts,
|
||||||
findClosestTrackAtPointer,
|
findClosestTrackAtPointer,
|
||||||
@@ -121,6 +129,7 @@ const props = withDefaults(
|
|||||||
timeUnit?: 's' | 'ms'
|
timeUnit?: 's' | 'ms'
|
||||||
frameNumber?: string | number
|
frameNumber?: string | number
|
||||||
frameStyle?: WaveformFrameStyle
|
frameStyle?: WaveformFrameStyle
|
||||||
|
axes?: WaveformAxesOptions
|
||||||
annotations?: WaveformAnnotation[]
|
annotations?: WaveformAnnotation[]
|
||||||
annotationsVisible?: boolean
|
annotationsVisible?: boolean
|
||||||
interactionMode?: WaveformInteractionMode
|
interactionMode?: WaveformInteractionMode
|
||||||
@@ -190,9 +199,11 @@ const sharedTransform = shallowRef<ZoomTransform>(zoomIdentity)
|
|||||||
const independentTransforms = shallowRef<ZoomTransform[]>([])
|
const independentTransforms = shallowRef<ZoomTransform[]>([])
|
||||||
const sharedYDomains = ref<Record<string, [number, number]>>({})
|
const sharedYDomains = ref<Record<string, [number, number]>>({})
|
||||||
const independentYDomains = ref<Record<number, [number, number]>>({})
|
const independentYDomains = ref<Record<number, [number, number]>>({})
|
||||||
const hoveredSeriesPoints = ref<HoveredSeriesPoint[]>([])
|
const hoverState = shallowReactive<WaveformHoverState>({
|
||||||
const hoveredTrackIndex = ref<number | null>(null)
|
points: [],
|
||||||
const hoverPosition = ref({ x: 0, y: 0 })
|
trackIndex: null,
|
||||||
|
position: { x: 0, y: 0 },
|
||||||
|
})
|
||||||
const suppressHoverUntilMove = ref(false)
|
const suppressHoverUntilMove = ref(false)
|
||||||
const currentPage = ref(1)
|
const currentPage = ref(1)
|
||||||
const resizeObserver = shallowRef<ResizeObserver>()
|
const resizeObserver = shallowRef<ResizeObserver>()
|
||||||
@@ -251,7 +262,9 @@ function handleInteractionKeyDown(event: KeyboardEvent) {
|
|||||||
const target = event.target
|
const target = event.target
|
||||||
if (
|
if (
|
||||||
target instanceof Element &&
|
target instanceof Element &&
|
||||||
target.closest('button, input, select, textarea, [contenteditable]:not([contenteditable="false"])')
|
target.closest(
|
||||||
|
'button, input, select, textarea, [contenteditable]:not([contenteditable="false"])',
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -265,15 +278,6 @@ function handleInteractionKeyUp(event: KeyboardEvent) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用于传递给 WaveformTooltip 的接口
|
|
||||||
interface TooltipSeriesPoint {
|
|
||||||
trackIndex: number
|
|
||||||
name: string
|
|
||||||
color: string
|
|
||||||
unit?: string
|
|
||||||
point: WaveformPoint
|
|
||||||
}
|
|
||||||
|
|
||||||
const fixedWidth = computed(() =>
|
const fixedWidth = computed(() =>
|
||||||
Number.isFinite(props.width) ? Math.max(0, props.width ?? 0) : undefined,
|
Number.isFinite(props.width) ? Math.max(0, props.width ?? 0) : undefined,
|
||||||
)
|
)
|
||||||
@@ -290,14 +294,16 @@ const containerStyle = computed(() => ({
|
|||||||
width: fixedWidth.value === undefined ? '100%' : `${fixedWidth.value}px`,
|
width: fixedWidth.value === undefined ? '100%' : `${fixedWidth.value}px`,
|
||||||
height: fixedHeight.value === undefined ? '100%' : `${fixedHeight.value}px`,
|
height: fixedHeight.value === undefined ? '100%' : `${fixedHeight.value}px`,
|
||||||
}))
|
}))
|
||||||
const legendPosition = computed<WaveformLegendPosition>(() => props.legend?.position ?? 'top-right')
|
|
||||||
const isCleanView = computed(() => props.cleanView === true)
|
const isCleanView = computed(() => props.cleanView === true)
|
||||||
const resolvedZeroLine = computed(() => {
|
const resolvedZeroLine = computed(() => {
|
||||||
const width = props.zeroLine?.width
|
const width = props.zeroLine?.width
|
||||||
return {
|
return {
|
||||||
visible: props.zeroLine?.visible === true,
|
visible: props.zeroLine?.visible === true,
|
||||||
color: props.zeroLine?.color || ZERO_LINE_DEFAULTS.COLOR,
|
color: props.zeroLine?.color || ZERO_LINE_DEFAULTS.COLOR,
|
||||||
width: typeof width === 'number' && Number.isFinite(width) && width > 0 ? width : ZERO_LINE_DEFAULTS.WIDTH,
|
width:
|
||||||
|
typeof width === 'number' && Number.isFinite(width) && width > 0
|
||||||
|
? width
|
||||||
|
: ZERO_LINE_DEFAULTS.WIDTH,
|
||||||
dash: props.zeroLine?.dash ?? ZERO_LINE_DEFAULTS.DASH,
|
dash: props.zeroLine?.dash ?? ZERO_LINE_DEFAULTS.DASH,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -311,13 +317,17 @@ const hiddenSeriesIdSet = computed(() =>
|
|||||||
: new Set(props.hiddenSeriesIds),
|
: new Set(props.hiddenSeriesIds),
|
||||||
)
|
)
|
||||||
const resolvedHiddenSeriesIds = computed(() => Array.from(hiddenSeriesIdSet.value))
|
const resolvedHiddenSeriesIds = computed(() => Array.from(hiddenSeriesIdSet.value))
|
||||||
const legendOrientation = computed<Exclude<WaveformLegendOrientation, 'auto'>>(() => {
|
function resolveLegendPosition(trackId: string): WaveformLegendPosition {
|
||||||
|
return props.legend?.trackPositions?.[trackId] ?? props.legend?.position ?? 'top-right'
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveLegendOrientation(
|
||||||
|
position: WaveformLegendPosition,
|
||||||
|
): Exclude<WaveformLegendOrientation, 'auto'> {
|
||||||
const orientation = props.legend?.orientation ?? 'auto'
|
const orientation = props.legend?.orientation ?? 'auto'
|
||||||
if (orientation !== 'auto') return orientation
|
if (orientation !== 'auto') return orientation
|
||||||
return legendPosition.value === 'top' || legendPosition.value === 'bottom'
|
return position === 'top' || position === 'bottom' ? 'horizontal' : 'vertical'
|
||||||
? 'horizontal'
|
}
|
||||||
: 'vertical'
|
|
||||||
})
|
|
||||||
const resolvedTitleText = computed(() => props.title?.text.trim() ?? '')
|
const resolvedTitleText = computed(() => props.title?.text.trim() ?? '')
|
||||||
const titleAreaReserved = computed(
|
const titleAreaReserved = computed(
|
||||||
() =>
|
() =>
|
||||||
@@ -326,7 +336,9 @@ const titleAreaReserved = computed(
|
|||||||
const titleVisible = computed(() => titleAreaReserved.value && !isCleanView.value)
|
const titleVisible = computed(() => titleAreaReserved.value && !isCleanView.value)
|
||||||
const titleFontSize = computed(() => {
|
const titleFontSize = computed(() => {
|
||||||
const fontSize = props.title?.textStyle?.fontSize
|
const fontSize = props.title?.textStyle?.fontSize
|
||||||
return Number.isFinite(fontSize) && (fontSize ?? 0) > 0 ? (fontSize as number) : TITLE_DEFAULT_FONT_SIZE
|
return Number.isFinite(fontSize) && (fontSize ?? 0) > 0
|
||||||
|
? (fontSize as number)
|
||||||
|
: TITLE_DEFAULT_FONT_SIZE
|
||||||
})
|
})
|
||||||
const titleRotation = computed(() => {
|
const titleRotation = computed(() => {
|
||||||
const rotation = props.title?.textStyle?.rotation
|
const rotation = props.title?.textStyle?.rotation
|
||||||
@@ -351,7 +363,10 @@ const estimatedTitleWidth = computed(() => {
|
|||||||
const spacingWidth = Number.isFinite(letterSpacing)
|
const spacingWidth = Number.isFinite(letterSpacing)
|
||||||
? Math.max(0, resolvedTitleText.value.length - 1) * letterSpacing
|
? Math.max(0, resolvedTitleText.value.length - 1) * letterSpacing
|
||||||
: 0
|
: 0
|
||||||
return Math.max(1, resolvedTitleText.value.length * titleFontSize.value * TITLE_CHAR_WIDTH_RATIO + spacingWidth)
|
return Math.max(
|
||||||
|
1,
|
||||||
|
resolvedTitleText.value.length * titleFontSize.value * TITLE_CHAR_WIDTH_RATIO + spacingWidth,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
const titleAvailableWidth = computed(() => {
|
const titleAvailableWidth = computed(() => {
|
||||||
const measuredAvailableWidth = chartWidth.value - TITLE_AREA_HORIZONTAL_PADDING * 2
|
const measuredAvailableWidth = chartWidth.value - TITLE_AREA_HORIZONTAL_PADDING * 2
|
||||||
@@ -554,7 +569,6 @@ const yAxisLayout = computed(() => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
const hasWaveformData = computed(() => chartSeries.value.length > 0)
|
const hasWaveformData = computed(() => chartSeries.value.length > 0)
|
||||||
const hoveredPoint = computed(() => hoveredSeriesPoints.value[0]?.point ?? null)
|
|
||||||
const hasChartArea = computed(() => innerWidth.value > 0 && innerHeight.value > 0)
|
const hasChartArea = computed(() => innerWidth.value > 0 && innerHeight.value > 0)
|
||||||
const resolvedXLabel = computed(() => props.xLabel ?? `时间(${props.timeUnit})`)
|
const resolvedXLabel = computed(() => props.xLabel ?? `时间(${props.timeUnit})`)
|
||||||
const activeInteractionMode = computed(() => props.interactionMode)
|
const activeInteractionMode = computed(() => props.interactionMode)
|
||||||
@@ -563,17 +577,6 @@ const isZoomMode = computed(
|
|||||||
() => activeInteractionMode.value === 'zoom' || activeInteractionMode.value === undefined,
|
() => activeInteractionMode.value === 'zoom' || activeInteractionMode.value === undefined,
|
||||||
)
|
)
|
||||||
|
|
||||||
// 转换为 Tooltip 组件需要的格式
|
|
||||||
const tooltipSeriesPoints = computed<TooltipSeriesPoint[]>(() => {
|
|
||||||
return hoveredSeriesPoints.value.map((item) => ({
|
|
||||||
trackIndex: item.trackIndex,
|
|
||||||
name: item.name,
|
|
||||||
color: item.color,
|
|
||||||
unit: item.unit,
|
|
||||||
point: item.point,
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
|
|
||||||
const sharedXDomain = computed(() => {
|
const sharedXDomain = computed(() => {
|
||||||
const values: number[] = []
|
const values: number[] = []
|
||||||
chartTracks.value.forEach((track) => {
|
chartTracks.value.forEach((track) => {
|
||||||
@@ -863,10 +866,14 @@ function clearZoomBindings() {
|
|||||||
|
|
||||||
function resolveMaximumZoomScale(domain: [number, number]): number {
|
function resolveMaximumZoomScale(domain: [number, number]): number {
|
||||||
const minZoomSpan = props.minZoomSpan
|
const minZoomSpan = props.minZoomSpan
|
||||||
if (!Number.isFinite(minZoomSpan) || (minZoomSpan ?? 0) <= 0) return ZOOM_CONSTRAINTS.DEFAULT_MAX_SCALE
|
if (!Number.isFinite(minZoomSpan) || (minZoomSpan ?? 0) <= 0)
|
||||||
|
return ZOOM_CONSTRAINTS.DEFAULT_MAX_SCALE
|
||||||
const domainSpan = Math.abs(domain[1] - domain[0])
|
const domainSpan = Math.abs(domain[1] - domain[0])
|
||||||
if (!Number.isFinite(domainSpan) || domainSpan <= 0) return ZOOM_CONSTRAINTS.MIN_SCALE
|
if (!Number.isFinite(domainSpan) || domainSpan <= 0) return ZOOM_CONSTRAINTS.MIN_SCALE
|
||||||
return Math.min(ZOOM_CONSTRAINTS.DEFAULT_MAX_SCALE, Math.max(ZOOM_CONSTRAINTS.MIN_SCALE, domainSpan / (minZoomSpan ?? domainSpan)))
|
return Math.min(
|
||||||
|
ZOOM_CONSTRAINTS.DEFAULT_MAX_SCALE,
|
||||||
|
Math.max(ZOOM_CONSTRAINTS.MIN_SCALE, domainSpan / (minZoomSpan ?? domainSpan)),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function canZoomTrack(track: TrackLayout): boolean {
|
function canZoomTrack(track: TrackLayout): boolean {
|
||||||
@@ -967,9 +974,9 @@ function scheduleHover(update: () => void) {
|
|||||||
|
|
||||||
function hoveredPointsMatch(nextPoints: HoveredSeriesPoint[]): boolean {
|
function hoveredPointsMatch(nextPoints: HoveredSeriesPoint[]): boolean {
|
||||||
return (
|
return (
|
||||||
hoveredSeriesPoints.value.length === nextPoints.length &&
|
hoverState.points.length === nextPoints.length &&
|
||||||
nextPoints.every((point, index) => {
|
nextPoints.every((point, index) => {
|
||||||
const current = hoveredSeriesPoints.value[index]
|
const current = hoverState.points[index]
|
||||||
return (
|
return (
|
||||||
current?.id === point.id &&
|
current?.id === point.id &&
|
||||||
current.trackIndex === point.trackIndex &&
|
current.trackIndex === point.trackIndex &&
|
||||||
@@ -984,20 +991,34 @@ function commitHover(
|
|||||||
trackIndex: number | null,
|
trackIndex: number | null,
|
||||||
position: { x: number; y: number },
|
position: { x: number; y: number },
|
||||||
) {
|
) {
|
||||||
if (!hoveredPointsMatch(nextPoints)) hoveredSeriesPoints.value = nextPoints
|
if (!hoveredPointsMatch(nextPoints)) hoverState.points = nextPoints
|
||||||
hoveredTrackIndex.value = trackIndex
|
hoverState.trackIndex = trackIndex
|
||||||
hoverPosition.value = position
|
hoverState.position = position
|
||||||
// Emit using the updated hoveredSeriesPoints to avoid race condition
|
emit('point-hover', hoverState.points[0]?.point ?? null)
|
||||||
emit('point-hover', hoveredSeriesPoints.value[0]?.point ?? null)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearHover() {
|
function clearHover() {
|
||||||
cancelPendingHover()
|
cancelPendingHover()
|
||||||
hoveredSeriesPoints.value = []
|
hoverState.points = []
|
||||||
hoveredTrackIndex.value = null
|
hoverState.trackIndex = null
|
||||||
emit('point-hover', null)
|
emit('point-hover', null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createHoveredSeriesPoint(
|
||||||
|
series: DisplaySeries,
|
||||||
|
trackIndex: number,
|
||||||
|
point: WaveformPoint,
|
||||||
|
): HoveredSeriesPoint {
|
||||||
|
return {
|
||||||
|
id: series.id,
|
||||||
|
name: series.name,
|
||||||
|
color: series.color,
|
||||||
|
unit: series.unit,
|
||||||
|
trackIndex,
|
||||||
|
point,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function beginAnnotationDrag() {
|
function beginAnnotationDrag() {
|
||||||
suppressHoverUntilMove.value = true
|
suppressHoverUntilMove.value = true
|
||||||
clearHover()
|
clearHover()
|
||||||
@@ -1315,7 +1336,7 @@ function handleIndependentPointerMove(event: PointerEvent, trackIndex: number) {
|
|||||||
const xValue = track.xScale.invert(Math.max(0, Math.min(innerWidth.value, pointerX)))
|
const xValue = track.xScale.invert(Math.max(0, Math.min(innerWidth.value, pointerX)))
|
||||||
const nextPoints = track.seriesList.flatMap((series) => {
|
const nextPoints = track.seriesList.flatMap((series) => {
|
||||||
const point = nearestPoint(series, xValue)
|
const point = nearestPoint(series, xValue)
|
||||||
return point ? [{ ...series, trackIndex, point }] : []
|
return point ? [createHoveredSeriesPoint(series, trackIndex, point)] : []
|
||||||
})
|
})
|
||||||
commitHover(nextPoints, trackIndex, {
|
commitHover(nextPoints, trackIndex, {
|
||||||
x: resolvedChartLeftMargin.value + track.left + pointerX,
|
x: resolvedChartLeftMargin.value + track.left + pointerX,
|
||||||
@@ -1345,7 +1366,7 @@ function handleSharedPointerMove(event: PointerEvent) {
|
|||||||
const nextPoints = trackLayouts.value.flatMap((track) =>
|
const nextPoints = trackLayouts.value.flatMap((track) =>
|
||||||
track.seriesList.flatMap((series) => {
|
track.seriesList.flatMap((series) => {
|
||||||
const point = nearestPoint(series, xValue)
|
const point = nearestPoint(series, xValue)
|
||||||
return point ? [{ ...series, trackIndex: track.index, point }] : []
|
return point ? [createHoveredSeriesPoint(series, track.index, point)] : []
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
commitHover(nextPoints, null, {
|
commitHover(nextPoints, null, {
|
||||||
@@ -1920,17 +1941,16 @@ onBeforeUnmount(() => {
|
|||||||
:track="track"
|
:track="track"
|
||||||
:clip-path-id="clipPathId"
|
:clip-path-id="clipPathId"
|
||||||
:inner-width="innerWidth"
|
:inner-width="innerWidth"
|
||||||
:show-tooltip="showTooltip"
|
|
||||||
:zoomable="zoomable"
|
:zoomable="zoomable"
|
||||||
:display-mode="displayMode"
|
:display-mode="displayMode"
|
||||||
:interaction-mode="activeInteractionMode"
|
:interaction-mode="activeInteractionMode"
|
||||||
:frame-number="resolveFrameNumber(track.index)"
|
:frame-number="resolveFrameNumber(track.index)"
|
||||||
:frame-style="frameStyle"
|
:frame-style="frameStyle"
|
||||||
|
:axes="axes"
|
||||||
:clean-view="isCleanView"
|
:clean-view="isCleanView"
|
||||||
:zero-line="resolvedZeroLine"
|
:zero-line="resolvedZeroLine"
|
||||||
:time-unit="timeUnit"
|
:time-unit="timeUnit"
|
||||||
:y-label="yLabel"
|
:y-label="yLabel"
|
||||||
:hovered-point="hoveredSeriesPoints.find((p) => p.trackIndex === track.index)"
|
|
||||||
@pointer-move="handleIndependentPointerMove($event, track.index)"
|
@pointer-move="handleIndependentPointerMove($event, track.index)"
|
||||||
@pointer-down="beginViewportDrag($event, track.index, true)"
|
@pointer-down="beginViewportDrag($event, track.index, true)"
|
||||||
@pointer-up="finishViewportDrag"
|
@pointer-up="finishViewportDrag"
|
||||||
@@ -1940,6 +1960,13 @@ onBeforeUnmount(() => {
|
|||||||
@contextmenu="handleAnnotationContextMenu($event, track.index)"
|
@contextmenu="handleAnnotationContextMenu($event, track.index)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<WaveformHoverLayer
|
||||||
|
:state="hoverState"
|
||||||
|
:tracks="trackLayouts"
|
||||||
|
:clip-path-id="clipPathId"
|
||||||
|
:visible="showTooltip"
|
||||||
|
/>
|
||||||
|
|
||||||
<rect
|
<rect
|
||||||
v-if="selectionBox && selection?.mode === 'box'"
|
v-if="selectionBox && selection?.mode === 'box'"
|
||||||
class="waveform-chart__zoom-selection"
|
class="waveform-chart__zoom-selection"
|
||||||
@@ -1966,13 +1993,14 @@ onBeforeUnmount(() => {
|
|||||||
:key="`legend-${track.index}-${track.series.name}`"
|
:key="`legend-${track.index}-${track.series.name}`"
|
||||||
class="waveform-chart__legend-track"
|
class="waveform-chart__legend-track"
|
||||||
:data-legend-track-index="track.index"
|
:data-legend-track-index="track.index"
|
||||||
|
:data-legend-track-id="track.id"
|
||||||
:transform="`translate(${track.left}, ${track.top})`"
|
:transform="`translate(${track.left}, ${track.top})`"
|
||||||
>
|
>
|
||||||
<WaveformLegend
|
<WaveformLegend
|
||||||
v-if="!track.isEmpty && track.legendSeries.length > 1"
|
v-if="!track.isEmpty && track.legendSeries.length > 1"
|
||||||
:series="track.legendSeries"
|
:series="track.legendSeries"
|
||||||
:position="legendPosition"
|
:position="resolveLegendPosition(track.id)"
|
||||||
:orientation="legendOrientation"
|
:orientation="resolveLegendOrientation(resolveLegendPosition(track.id))"
|
||||||
:background-color="legendBackgroundColor"
|
:background-color="legendBackgroundColor"
|
||||||
:interactive="legendInteractive"
|
:interactive="legendInteractive"
|
||||||
:hidden-series-ids="resolvedHiddenSeriesIds"
|
:hidden-series-ids="resolvedHiddenSeriesIds"
|
||||||
@@ -2040,13 +2068,10 @@ onBeforeUnmount(() => {
|
|||||||
@close="annotationInteraction.closeContextMenu"
|
@close="annotationInteraction.closeContextMenu"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Tooltip -->
|
<WaveformHoverHost
|
||||||
<WaveformTooltip
|
:state="hoverState"
|
||||||
:visible="showTooltip && hoveredPoint !== null"
|
:visible="showTooltip"
|
||||||
:position="hoverPosition"
|
|
||||||
:time-unit="timeUnit"
|
:time-unit="timeUnit"
|
||||||
:hovered-point="hoveredPoint"
|
|
||||||
:series-points="tooltipSeriesPoints"
|
|
||||||
:container-width="chartWidth"
|
:container-width="chartWidth"
|
||||||
:container-height="chartHeight"
|
:container-height="chartHeight"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -371,6 +371,7 @@ export function buildTrackLayouts(options: BuildTrackLayoutsOptions): TrackLayou
|
|||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
id: displayTrack.id,
|
||||||
index,
|
index,
|
||||||
series,
|
series,
|
||||||
seriesList: displayTrack.visibleSeries,
|
seriesList: displayTrack.visibleSeries,
|
||||||
|
|||||||
@@ -63,15 +63,27 @@ export interface WaveformYAxisLayout {
|
|||||||
/**
|
/**
|
||||||
* 悬浮的系列点
|
* 悬浮的系列点
|
||||||
*/
|
*/
|
||||||
export interface HoveredSeriesPoint extends DisplaySeries {
|
export interface HoveredSeriesPoint {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
unit?: string
|
||||||
|
color: string
|
||||||
trackIndex: number
|
trackIndex: number
|
||||||
point: WaveformPoint
|
point: WaveformPoint
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface WaveformHoverState {
|
||||||
|
points: HoveredSeriesPoint[]
|
||||||
|
trackIndex: number | null
|
||||||
|
position: { x: number; y: number }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 轨道布局
|
* 轨道布局
|
||||||
*/
|
*/
|
||||||
export interface TrackLayout {
|
export interface TrackLayout {
|
||||||
|
/** Stable track key derived from trackId, or from the series id when trackId is omitted. */
|
||||||
|
id: string
|
||||||
index: number
|
index: number
|
||||||
series: DisplaySeries
|
series: DisplaySeries
|
||||||
/** Visible series used by rendering and interaction code. */
|
/** Visible series used by rendering and interaction code. */
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export type {
|
|||||||
WaveformLegendOrientation,
|
WaveformLegendOrientation,
|
||||||
WaveformLegendOptions,
|
WaveformLegendOptions,
|
||||||
WaveformFrameStyle,
|
WaveformFrameStyle,
|
||||||
|
WaveformAxesOptions,
|
||||||
WaveformZeroLineOptions,
|
WaveformZeroLineOptions,
|
||||||
SingleWaveformData,
|
SingleWaveformData,
|
||||||
WaveformLineType,
|
WaveformLineType,
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ export type {
|
|||||||
WaveformLegendOrientation,
|
WaveformLegendOrientation,
|
||||||
WaveformLegendOptions,
|
WaveformLegendOptions,
|
||||||
WaveformFrameStyle,
|
WaveformFrameStyle,
|
||||||
|
WaveformAxesOptions,
|
||||||
WaveformZeroLineOptions,
|
WaveformZeroLineOptions,
|
||||||
WaveformPoint,
|
WaveformPoint,
|
||||||
WaveformSeries,
|
WaveformSeries,
|
||||||
|
|||||||
28
src/components/interaction/WaveformHoverHost.vue
Normal file
28
src/components/interaction/WaveformHoverHost.vue
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
import type { WaveformHoverState } from '../core/types'
|
||||||
|
import WaveformTooltip from './WaveformTooltip.vue'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
state: WaveformHoverState
|
||||||
|
visible: boolean
|
||||||
|
timeUnit: 's' | 'ms'
|
||||||
|
containerWidth: number
|
||||||
|
containerHeight: number
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const hoveredPoint = computed(() => props.state.points[0]?.point ?? null)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<WaveformTooltip
|
||||||
|
:visible="visible && hoveredPoint !== null"
|
||||||
|
:position="state.position"
|
||||||
|
:time-unit="timeUnit"
|
||||||
|
:hovered-point="hoveredPoint"
|
||||||
|
:series-points="state.points"
|
||||||
|
:container-width="containerWidth"
|
||||||
|
:container-height="containerHeight"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
@@ -66,6 +66,31 @@ describe('WaveformTooltip', () => {
|
|||||||
expect(wrapper.get('.waveform-tooltip__series small').text()).toBe('(+2 / -1)')
|
expect(wrapper.get('.waveform-tooltip__series small').text()).toBe('(+2 / -1)')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('keeps a formatted value and its unit in one value container', () => {
|
||||||
|
const hoveredPoint = { x: 1, y: -1405.4932 }
|
||||||
|
const wrapper = mount(WaveformTooltip, {
|
||||||
|
props: {
|
||||||
|
visible: true,
|
||||||
|
position: { x: 10, y: 10 },
|
||||||
|
timeUnit: 'ms',
|
||||||
|
hoveredPoint,
|
||||||
|
seriesPoints: [
|
||||||
|
{
|
||||||
|
trackIndex: 0,
|
||||||
|
name: 'ENG8KJXAc(10001)',
|
||||||
|
color: '#ffb43b',
|
||||||
|
unit: 'A',
|
||||||
|
point: hoveredPoint,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
containerWidth: 400,
|
||||||
|
containerHeight: 300,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(wrapper.get('.waveform-tooltip__value').text()).toBe('-1,405.4932 A')
|
||||||
|
})
|
||||||
|
|
||||||
it('omits the error label when both resolved errors are zero', () => {
|
it('omits the error label when both resolved errors are zero', () => {
|
||||||
const point = { x: 1, y: 12 }
|
const point = { x: 1, y: 12 }
|
||||||
const wrapper = mount(WaveformTooltip, {
|
const wrapper = mount(WaveformTooltip, {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ function formatError(point: WaveformPoint): string | null {
|
|||||||
>
|
>
|
||||||
<i :style="{ backgroundColor: seriesPoint.color }" />
|
<i :style="{ backgroundColor: seriesPoint.color }" />
|
||||||
<strong v-if="seriesPoint.name">{{ seriesPoint.name }}:</strong>
|
<strong v-if="seriesPoint.name">{{ seriesPoint.name }}:</strong>
|
||||||
<span>
|
<span class="waveform-tooltip__value">
|
||||||
{{ formatTooltipNumber(seriesPoint.point.y)
|
{{ formatTooltipNumber(seriesPoint.point.y)
|
||||||
}}{{ seriesPoint.unit ? ` ${seriesPoint.unit}` : '' }}
|
}}{{ seriesPoint.unit ? ` ${seriesPoint.unit}` : '' }}
|
||||||
<small v-if="formatError(seriesPoint.point)">{{ formatError(seriesPoint.point) }}</small>
|
<small v-if="formatError(seriesPoint.point)">{{ formatError(seriesPoint.point) }}</small>
|
||||||
@@ -116,7 +116,7 @@ function formatError(point: WaveformPoint): string | null {
|
|||||||
|
|
||||||
.waveform-tooltip__series {
|
.waveform-tooltip__series {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 8px auto minmax(0, 1fr);
|
grid-template-columns: 8px minmax(0, 1fr) auto;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
@@ -134,6 +134,10 @@ function formatError(point: WaveformPoint): string | null {
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.waveform-tooltip__value {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
.waveform-tooltip__series small {
|
.waveform-tooltip__series small {
|
||||||
color: #667085;
|
color: #667085;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
export { default as WaveformTooltip } from './WaveformTooltip.vue'
|
export { default as WaveformTooltip } from './WaveformTooltip.vue'
|
||||||
|
export { default as WaveformHoverHost } from './WaveformHoverHost.vue'
|
||||||
|
|||||||
60
src/components/rendering/WaveformHoverLayer.vue
Normal file
60
src/components/rendering/WaveformHoverLayer.vue
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
import type { HoveredSeriesPoint, TrackLayout, WaveformHoverState } from '../core/types'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
state: WaveformHoverState
|
||||||
|
tracks: TrackLayout[]
|
||||||
|
clipPathId: string
|
||||||
|
visible: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
|
interface Crosshair {
|
||||||
|
point: HoveredSeriesPoint
|
||||||
|
track: TrackLayout
|
||||||
|
x: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const crosshairs = computed<Crosshair[]>(() => {
|
||||||
|
if (!props.visible) return []
|
||||||
|
|
||||||
|
const pointByTrack = new Map<number, HoveredSeriesPoint>()
|
||||||
|
props.state.points.forEach((point) => {
|
||||||
|
if (!pointByTrack.has(point.trackIndex)) pointByTrack.set(point.trackIndex, point)
|
||||||
|
})
|
||||||
|
|
||||||
|
return props.tracks.flatMap((track) => {
|
||||||
|
const point = pointByTrack.get(track.index)
|
||||||
|
return point && !track.isEmpty && track.hasVisibleSeries
|
||||||
|
? [{ point, track, x: track.xScale(point.point.x) }]
|
||||||
|
: []
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<g class="waveform-chart__hover-layer" pointer-events="none" aria-hidden="true">
|
||||||
|
<g
|
||||||
|
v-for="crosshair in crosshairs"
|
||||||
|
:key="crosshair.track.index"
|
||||||
|
class="waveform-track__crosshair waveform-chart__crosshair"
|
||||||
|
:clip-path="`url(#${clipPathId}-${crosshair.track.index})`"
|
||||||
|
:transform="`translate(${crosshair.track.left ?? 0}, ${crosshair.track.top})`"
|
||||||
|
>
|
||||||
|
<line :x1="crosshair.x" :x2="crosshair.x" y1="0" :y2="crosshair.track.height" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.waveform-track__crosshair {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.waveform-track__crosshair line {
|
||||||
|
stroke: #57617b;
|
||||||
|
stroke-width: 1;
|
||||||
|
stroke-dasharray: 4 3;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -2,14 +2,9 @@
|
|||||||
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
||||||
import { axisBottom, axisLeft, axisRight, select } from 'd3'
|
import { axisBottom, axisLeft, axisRight, select } from 'd3'
|
||||||
import { formatAxisTime, formatScientificAxisLabel } from '../../utils'
|
import { formatAxisTime, formatScientificAxisLabel } from '../../utils'
|
||||||
import type { WaveformFrameStyle, WaveformZeroLineOptions } from '../../types'
|
import type { WaveformAxesOptions, WaveformFrameStyle, WaveformZeroLineOptions } from '../../types'
|
||||||
import type { WaveformDisplayMode, WaveformInteractionMode } from '../data/types'
|
import type { WaveformDisplayMode, WaveformInteractionMode } from '../data/types'
|
||||||
import type {
|
import type { DisplaySeries, TrackLayout, WaveformYAxisLayout } from '../core/types'
|
||||||
DisplaySeries,
|
|
||||||
HoveredSeriesPoint,
|
|
||||||
TrackLayout,
|
|
||||||
WaveformYAxisLayout,
|
|
||||||
} from '../core/types'
|
|
||||||
import WaveformSeriesLayer from './WaveformSeriesLayer.vue'
|
import WaveformSeriesLayer from './WaveformSeriesLayer.vue'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -19,8 +14,6 @@ interface Props {
|
|||||||
clipPathId: string
|
clipPathId: string
|
||||||
/** 内部宽度 */
|
/** 内部宽度 */
|
||||||
innerWidth: number
|
innerWidth: number
|
||||||
/** 是否显示 tooltip */
|
|
||||||
showTooltip: boolean
|
|
||||||
/** 是否可缩放 */
|
/** 是否可缩放 */
|
||||||
zoomable: boolean
|
zoomable: boolean
|
||||||
/** 显示模式 */
|
/** 显示模式 */
|
||||||
@@ -31,10 +24,10 @@ interface Props {
|
|||||||
frameNumber?: string | number
|
frameNumber?: string | number
|
||||||
/** 图框样式 */
|
/** 图框样式 */
|
||||||
frameStyle?: WaveformFrameStyle
|
frameStyle?: WaveformFrameStyle
|
||||||
|
/** 坐标轴线显示选项 */
|
||||||
|
axes?: WaveformAxesOptions
|
||||||
/** 时间单位 */
|
/** 时间单位 */
|
||||||
timeUnit: 's' | 'ms'
|
timeUnit: 's' | 'ms'
|
||||||
/** 悬浮点(用于显示十字线) */
|
|
||||||
hoveredPoint?: HoveredSeriesPoint
|
|
||||||
/** Y 轴标签回退值 */
|
/** Y 轴标签回退值 */
|
||||||
yLabel?: string
|
yLabel?: string
|
||||||
/** Hide visual aids while keeping chart interaction active. */
|
/** Hide visual aids while keeping chart interaction active. */
|
||||||
@@ -72,7 +65,10 @@ const resolvedFrameStyle = computed(() => {
|
|||||||
typeof borderWidth === 'number' && Number.isFinite(borderWidth) && borderWidth >= 0
|
typeof borderWidth === 'number' && Number.isFinite(borderWidth) && borderWidth >= 0
|
||||||
? borderWidth
|
? borderWidth
|
||||||
: 1,
|
: 1,
|
||||||
borderStyle: props.frameStyle?.borderStyle === 'dashed' ? 'dashed' : 'solid',
|
borderStyle:
|
||||||
|
props.frameStyle?.borderStyle === 'dashed' || props.frameStyle?.borderStyle === 'dotted'
|
||||||
|
? props.frameStyle.borderStyle
|
||||||
|
: 'solid',
|
||||||
backgroundColor: props.frameStyle?.backgroundColor || 'transparent',
|
backgroundColor: props.frameStyle?.backgroundColor || 'transparent',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -105,20 +101,6 @@ function shouldShowYAxisLabel(trackHeight: number, trackIndex: number): boolean
|
|||||||
return trackIndex % labelSpacing === 0
|
return trackIndex % labelSpacing === 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function crosshairX(): number {
|
|
||||||
return props.hoveredPoint && props.hoveredPoint.trackIndex === props.track.index
|
|
||||||
? props.track.xScale(props.hoveredPoint.point.x)
|
|
||||||
: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasCrosshair(): boolean {
|
|
||||||
return (
|
|
||||||
props.showTooltip &&
|
|
||||||
props.hoveredPoint !== undefined &&
|
|
||||||
props.hoveredPoint.trackIndex === props.track.index
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
function zeroLineY(axis: WaveformYAxisLayout): number | null {
|
function zeroLineY(axis: WaveformYAxisLayout): number | null {
|
||||||
const [minimum, maximum] = axis.scale.domain()
|
const [minimum, maximum] = axis.scale.domain()
|
||||||
if (!props.zeroLine.visible || minimum > 0 || maximum < 0) return null
|
if (!props.zeroLine.visible || minimum > 0 || maximum < 0) return null
|
||||||
@@ -138,11 +120,16 @@ function renderAxes() {
|
|||||||
|
|
||||||
yAxis.tickValues(axis.tickValues)
|
yAxis.tickValues(axis.tickValues)
|
||||||
|
|
||||||
select(element).call(yAxis)
|
const selection = select(element)
|
||||||
|
selection.call(yAxis)
|
||||||
|
selection
|
||||||
|
.selectAll('path.domain')
|
||||||
|
.attr('display', props.axes?.y?.lineVisible === false ? 'none' : null)
|
||||||
})
|
})
|
||||||
|
|
||||||
if (xAxisElement.value) {
|
if (xAxisElement.value) {
|
||||||
select(xAxisElement.value).call(
|
const selection = select(xAxisElement.value)
|
||||||
|
selection.call(
|
||||||
axisBottom(props.track.xScale)
|
axisBottom(props.track.xScale)
|
||||||
.tickValues(props.track.xAxisTickValues)
|
.tickValues(props.track.xAxisTickValues)
|
||||||
.tickFormat((value) =>
|
.tickFormat((value) =>
|
||||||
@@ -156,6 +143,9 @@ function renderAxes() {
|
|||||||
.tickPadding(7)
|
.tickPadding(7)
|
||||||
.tickSizeOuter(0),
|
.tickSizeOuter(0),
|
||||||
)
|
)
|
||||||
|
selection
|
||||||
|
.selectAll('path.domain')
|
||||||
|
.attr('display', props.axes?.x?.lineVisible === false ? 'none' : null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,6 +161,8 @@ watch(
|
|||||||
() => props.track.xAxisTickValues,
|
() => props.track.xAxisTickValues,
|
||||||
() => props.track.yAxisTickValues,
|
() => props.track.yAxisTickValues,
|
||||||
() => props.timeUnit,
|
() => props.timeUnit,
|
||||||
|
() => props.axes?.x?.lineVisible,
|
||||||
|
() => props.axes?.y?.lineVisible,
|
||||||
],
|
],
|
||||||
async () => {
|
async () => {
|
||||||
await nextTick()
|
await nextTick()
|
||||||
@@ -307,6 +299,7 @@ watch(
|
|||||||
v-if="track.showXAxis && !cleanView"
|
v-if="track.showXAxis && !cleanView"
|
||||||
ref="xAxisElement"
|
ref="xAxisElement"
|
||||||
class="waveform-track__axis waveform-track__axis--x waveform-chart__axis waveform-chart__axis--x"
|
class="waveform-track__axis waveform-track__axis--x waveform-chart__axis waveform-chart__axis--x"
|
||||||
|
:class="{ 'waveform-track__axis--line-hidden': axes?.x?.lineVisible === false }"
|
||||||
:transform="`translate(0, ${track.height})`"
|
:transform="`translate(0, ${track.height})`"
|
||||||
/>
|
/>
|
||||||
<g
|
<g
|
||||||
@@ -353,7 +346,10 @@ watch(
|
|||||||
:key="`y-axis-${track.index}-${axis.index}`"
|
:key="`y-axis-${track.index}-${axis.index}`"
|
||||||
:ref="(element) => setYAxisElement(element, axis.index)"
|
:ref="(element) => setYAxisElement(element, axis.index)"
|
||||||
class="waveform-track__axis waveform-track__axis--y waveform-chart__axis waveform-chart__axis--y"
|
class="waveform-track__axis waveform-track__axis--y waveform-chart__axis waveform-chart__axis--y"
|
||||||
:class="`waveform-track__axis--${axis.side}`"
|
:class="[
|
||||||
|
`waveform-track__axis--${axis.side}`,
|
||||||
|
{ 'waveform-track__axis--line-hidden': axes?.y?.lineVisible === false },
|
||||||
|
]"
|
||||||
:data-y-axis-index="axis.index"
|
:data-y-axis-index="axis.index"
|
||||||
:data-y-axis-side="axis.side"
|
:data-y-axis-side="axis.side"
|
||||||
:transform="`translate(${axis.x}, 0)`"
|
:transform="`translate(${axis.x}, 0)`"
|
||||||
@@ -439,22 +435,20 @@ watch(
|
|||||||
fill="none"
|
fill="none"
|
||||||
:stroke="resolvedFrameStyle.borderColor"
|
:stroke="resolvedFrameStyle.borderColor"
|
||||||
:stroke-width="resolvedFrameStyle.borderWidth"
|
:stroke-width="resolvedFrameStyle.borderWidth"
|
||||||
:stroke-dasharray="resolvedFrameStyle.borderStyle === 'dashed' ? '6 4' : undefined"
|
:stroke-dasharray="
|
||||||
|
resolvedFrameStyle.borderStyle === 'dashed'
|
||||||
|
? '6 4'
|
||||||
|
: resolvedFrameStyle.borderStyle === 'dotted'
|
||||||
|
? '1 3'
|
||||||
|
: undefined
|
||||||
|
"
|
||||||
|
:stroke-linecap="resolvedFrameStyle.borderStyle === 'dotted' ? 'round' : undefined"
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 波形系列隔离在静态子组件中,避免 hover 更新遍历大量 SVG 节点。 -->
|
<!-- 波形系列隔离在静态子组件中,避免 hover 更新遍历大量 SVG 节点。 -->
|
||||||
<WaveformSeriesLayer :track="track" :clip-path-id="clipPathId" />
|
<WaveformSeriesLayer :track="track" :clip-path-id="clipPathId" />
|
||||||
|
|
||||||
<!-- 十字线 -->
|
|
||||||
<g
|
|
||||||
v-if="!track.isEmpty && track.hasVisibleSeries && hasCrosshair()"
|
|
||||||
class="waveform-track__crosshair waveform-chart__crosshair"
|
|
||||||
:clip-path="`url(#${clipPathId}-${track.index})`"
|
|
||||||
>
|
|
||||||
<line :x1="crosshairX()" :x2="crosshairX()" y1="0" :y2="track.height" />
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- 交互覆盖层(仅在独立模式下) -->
|
<!-- 交互覆盖层(仅在独立模式下) -->
|
||||||
<rect
|
<rect
|
||||||
v-if="!track.isEmpty && track.hasVisibleSeries && displayMode === 'independent'"
|
v-if="!track.isEmpty && track.hasVisibleSeries && displayMode === 'independent'"
|
||||||
@@ -561,16 +555,6 @@ watch(
|
|||||||
cursor: crosshair;
|
cursor: crosshair;
|
||||||
}
|
}
|
||||||
|
|
||||||
.waveform-track__crosshair {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.waveform-track__crosshair line {
|
|
||||||
stroke: #57617b;
|
|
||||||
stroke-width: 1;
|
|
||||||
stroke-dasharray: 4 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.waveform-track__zero-line {
|
.waveform-track__zero-line {
|
||||||
fill: none;
|
fill: none;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
export { default as WaveformTrack } from './WaveformTrack.vue'
|
export { default as WaveformTrack } from './WaveformTrack.vue'
|
||||||
export { default as WaveformLegend } from './WaveformLegend.vue'
|
export { default as WaveformLegend } from './WaveformLegend.vue'
|
||||||
|
export { default as WaveformHoverLayer } from './WaveformHoverLayer.vue'
|
||||||
export { waveformPointSymbolPath } from './seriesStyle'
|
export { waveformPointSymbolPath } from './seriesStyle'
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
31
src/data/simulatedWaveforms.test.ts
Normal file
31
src/data/simulatedWaveforms.test.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { describe, expect, it } from 'vitest'
|
||||||
|
|
||||||
|
import { createSimulatedWaveformData } from './simulatedWaveforms'
|
||||||
|
|
||||||
|
describe('simulated waveform data', () => {
|
||||||
|
it('creates deterministic, finite six-channel data', () => {
|
||||||
|
const first = createSimulatedWaveformData()
|
||||||
|
const second = createSimulatedWaveformData()
|
||||||
|
|
||||||
|
expect(first).toEqual(second)
|
||||||
|
expect(first.kind).toBe('series')
|
||||||
|
if (first.kind !== 'series') return
|
||||||
|
|
||||||
|
expect(first.series).toHaveLength(6)
|
||||||
|
expect(new Set(first.series.map((series) => series.id)).size).toBe(6)
|
||||||
|
first.series.forEach((series) => {
|
||||||
|
expect(series.data.kind).toBe('points')
|
||||||
|
if (series.data.kind !== 'points') return
|
||||||
|
expect(series.data.points).toHaveLength(1_000)
|
||||||
|
expect(series.data.points[0]?.x).toBe(-5)
|
||||||
|
expect(series.data.points.at(-1)?.x).toBe(5)
|
||||||
|
series.data.points.forEach((point) => {
|
||||||
|
expect(Number.isFinite(point.x)).toBe(true)
|
||||||
|
expect(Number.isFinite(point.y)).toBe(true)
|
||||||
|
if (point.error !== undefined) expect(point.error).toBeGreaterThanOrEqual(0)
|
||||||
|
if (point.lowerError !== undefined) expect(point.lowerError).toBeGreaterThanOrEqual(0)
|
||||||
|
if (point.upperError !== undefined) expect(point.upperError).toBeGreaterThanOrEqual(0)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
121
src/data/simulatedWaveforms.ts
Normal file
121
src/data/simulatedWaveforms.ts
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
import type { WaveformData, WaveformPoint, WaveformSeries } from '../types'
|
||||||
|
|
||||||
|
const POINT_COUNT = 1_000
|
||||||
|
const START_TIME = -5
|
||||||
|
const END_TIME = 5
|
||||||
|
const TWO_PI = Math.PI * 2
|
||||||
|
|
||||||
|
type SignalGenerator = (time: number, noise: number) => number
|
||||||
|
type ErrorGenerator = (time: number, value: number) => Pick<
|
||||||
|
WaveformPoint,
|
||||||
|
'error' | 'lowerError' | 'upperError'
|
||||||
|
>
|
||||||
|
|
||||||
|
interface SimulatedSeriesDefinition
|
||||||
|
extends Pick<
|
||||||
|
WaveformSeries,
|
||||||
|
'id' | 'name' | 'unit' | 'lineType' | 'pointType' | 'errorBar'
|
||||||
|
> {
|
||||||
|
signal: SignalGenerator
|
||||||
|
errors?: ErrorGenerator
|
||||||
|
}
|
||||||
|
|
||||||
|
function createSeededNoise(seed: number) {
|
||||||
|
let state = seed >>> 0
|
||||||
|
return () => {
|
||||||
|
state = (Math.imul(state, 1_664_525) + 1_013_904_223) >>> 0
|
||||||
|
return state / 0x1_0000_0000 - 0.5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createPoints(
|
||||||
|
signal: SignalGenerator,
|
||||||
|
noise: () => number,
|
||||||
|
errors?: ErrorGenerator,
|
||||||
|
): WaveformPoint[] {
|
||||||
|
return Array.from({ length: POINT_COUNT }, (_, index) => {
|
||||||
|
const time = START_TIME + (index * (END_TIME - START_TIME)) / (POINT_COUNT - 1)
|
||||||
|
const value = signal(time, noise())
|
||||||
|
return {
|
||||||
|
x: time,
|
||||||
|
y: value,
|
||||||
|
...(errors?.(time, value) ?? {}),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const seriesDefinitions: SimulatedSeriesDefinition[] = [
|
||||||
|
{
|
||||||
|
id: 'simulated-sine',
|
||||||
|
name: '正弦基波',
|
||||||
|
unit: 'V',
|
||||||
|
lineType: 'none',
|
||||||
|
pointType: 'triangle',
|
||||||
|
errorBar: { visible: true },
|
||||||
|
signal: (time) => 1.2 * Math.sin(TWO_PI * 0.8 * time),
|
||||||
|
errors: (time) => ({
|
||||||
|
lowerError: 0.06 + 0.015 * Math.abs(Math.sin(time)),
|
||||||
|
upperError: 0.08 + 0.02 * Math.abs(Math.cos(time)),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'simulated-harmonic',
|
||||||
|
name: '谐波扰动',
|
||||||
|
unit: 'V',
|
||||||
|
lineType: 'linear',
|
||||||
|
pointType: 'none',
|
||||||
|
signal: (time) =>
|
||||||
|
0.9 * Math.sin(TWO_PI * 0.55 * time) + 0.28 * Math.sin(TWO_PI * 2.2 * time + 0.4),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'simulated-damped',
|
||||||
|
name: '阻尼振荡',
|
||||||
|
unit: 'A',
|
||||||
|
lineType: 'linear',
|
||||||
|
pointType: 'none',
|
||||||
|
signal: (time) => {
|
||||||
|
const elapsed = time + 5
|
||||||
|
return 2.4 * Math.exp(-elapsed * 0.28) * Math.sin(TWO_PI * 1.25 * elapsed)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'simulated-step',
|
||||||
|
name: '阶跃响应',
|
||||||
|
unit: 'V',
|
||||||
|
lineType: 'linear',
|
||||||
|
pointType: 'none',
|
||||||
|
signal: (time) => (time < 0 ? 0 : 1 - Math.exp(-time * 2.4)),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'simulated-pulse',
|
||||||
|
name: '脉冲响应',
|
||||||
|
unit: 'V',
|
||||||
|
lineType: 'linear',
|
||||||
|
pointType: 'none',
|
||||||
|
signal: (time) => 1.8 * Math.exp(-((time - 0.75) ** 2) / 0.12),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'simulated-noise',
|
||||||
|
name: '带噪信号',
|
||||||
|
unit: 'A',
|
||||||
|
lineType: 'linear',
|
||||||
|
pointType: 'diamond',
|
||||||
|
errorBar: { visible: true },
|
||||||
|
signal: (time, noise) => 0.7 * Math.sin(TWO_PI * 0.45 * time) + noise * 0.36,
|
||||||
|
errors: () => ({ error: 0.12 }),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export function createSimulatedWaveformData(): WaveformData {
|
||||||
|
const noise = createSeededNoise(0x5eed1234)
|
||||||
|
return {
|
||||||
|
kind: 'series',
|
||||||
|
series: seriesDefinitions.map(({ signal, errors, ...series }) => ({
|
||||||
|
...series,
|
||||||
|
data: {
|
||||||
|
kind: 'points',
|
||||||
|
points: createPoints(signal, noise, errors),
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,813 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"chnl": "BT2_2M",
|
|
||||||
"chnl_id": 4742,
|
|
||||||
"dat_unit": "T",
|
|
||||||
"data": [
|
|
||||||
0.00037805046304129064, -0.0007567321881651878, -0.00037805046304129064,
|
|
||||||
-0.00037805046304129064, -6.31265379524848e-7, -6.31265379524848e-7, -6.31265379524848e-7,
|
|
||||||
-6.31265379524848e-7, -6.31265379524848e-7, -6.31265379524848e-7, -6.31265379524848e-7,
|
|
||||||
-6.31265379524848e-7, -6.31265379524848e-7, -6.31265379524848e-7, -6.31265379524848e-7,
|
|
||||||
-6.31265379524848e-7, -0.00037805046304129064, -6.31265379524848e-7, -6.31265379524848e-7,
|
|
||||||
-0.00037931298720650375, -0.00037805046304129064, -6.31265379524848e-7,
|
|
||||||
-0.00037805046304129064, -0.00037805046304129064, -0.00037805046304129064,
|
|
||||||
-0.00037805046304129064, -0.0007567321881651878, -6.31265379524848e-7,
|
|
||||||
-0.00037805046304129064, -0.00037805046304129064, -6.31265379524848e-7, -6.31265379524848e-7,
|
|
||||||
-0.00037805046304129064, -0.00037805046304129064, -0.00037805046304129064,
|
|
||||||
-0.0007567321881651878, -6.31265379524848e-7, -6.31265379524848e-7, -6.31265379524848e-7,
|
|
||||||
-0.00037805046304129064, -0.00037931298720650375, -0.0007567321881651878,
|
|
||||||
-0.00037931298720650375, -0.00037931298720650375, -0.00037805046304129064,
|
|
||||||
-0.00037931298720650375, -6.31265379524848e-7, -0.00037805046304129064,
|
|
||||||
-0.00037805046304129064, -6.31265379524848e-7, -0.0007567321881651878,
|
|
||||||
-0.00037805046304129064, -0.00037805046304129064, -0.00037805046304129064,
|
|
||||||
-0.00037805046304129064, -0.00037805046304129064, -0.00037805046304129064,
|
|
||||||
-0.00037805046304129064, -0.00037805046304129064, -0.00037931298720650375,
|
|
||||||
-6.31265379524848e-7, -6.31265379524848e-7, -0.00037805046304129064, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.00037805046304129064, -0.00037931298720650375,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037805046304129064,
|
|
||||||
-0.0007567321881651878, -0.00037805046304129064, -0.00037805046304129064,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.00037931298720650375, -0.00037805046304129064, -0.00037931298720650375,
|
|
||||||
-0.00037805046304129064, -0.0007567321881651878, -0.0007567321881651878, -6.31265379524848e-7,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037805046304129064,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037931298720650375,
|
|
||||||
-0.00037931298720650375, -6.31265379524848e-7, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-6.31265379524848e-7, -0.00037931298720650375, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-6.31265379524848e-7, -0.00037931298720650375, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037805046304129064,
|
|
||||||
-0.00037805046304129064, -0.00037931298720650375, -0.0007567321881651878,
|
|
||||||
-6.31265379524848e-7, -0.0007567321881651878, -0.00037805046304129064, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.00037931298720650375, -0.00037931298720650375, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037805046304129064, -6.31265379524848e-7,
|
|
||||||
-0.0007567321881651878, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037805046304129064,
|
|
||||||
-0.0011354138841852546, -0.00037931298720650375, -0.00037931298720650375,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -6.31265379524848e-7, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.00037931298720650375, -0.0007567321881651878,
|
|
||||||
-0.00037931298720650375, -0.00037931298720650375, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.00037805046304129064,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007554696639999747, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0007567321881651878, -0.0011341513600200415,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0011354138841852546, -0.0007567321881651878, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.0011354138841852546, -0.00037931298720650375,
|
|
||||||
-0.0007567321881651878, -0.00151283317245543, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011341513600200415,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011341513600200415,
|
|
||||||
-0.0011354138841852546, -0.00151283317245543, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.0007567321881651878, -0.00151283317245543, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0007567321881651878, -0.0007567321881651878,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0011341513600200415, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.0007567321881651878, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0007567321881651878, -0.00151283317245543,
|
|
||||||
-0.0011354138841852546, -0.0011341513600200415, -0.0007567321881651878, -0.00151283317245543,
|
|
||||||
-0.00151283317245543, -0.00151283317245543, -0.0011354138841852546, -0.0007567321881651878,
|
|
||||||
-0.00151283317245543, -0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.00151283317245543, -0.0011341513600200415, -0.0011341513600200415, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.00151283317245543, -0.00151283317245543, -0.0011354138841852546,
|
|
||||||
-0.00151283317245543, -0.00151283317245543, -0.0015140956966206431, -0.00151283317245543,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011341513600200415,
|
|
||||||
-0.0011354138841852546, -0.0011341513600200415, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0011354138841852546, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.0015140956966206431, -0.0011354138841852546, -0.00151283317245543,
|
|
||||||
-0.00151283317245543, -0.0011354138841852546, -0.0011354138841852546, -0.00151283317245543,
|
|
||||||
-0.0007567321881651878, -0.0011354138841852546, -0.0011354138841852546,
|
|
||||||
-0.0007567321881651878, -0.00037931298720650375, -6.31265379524848e-7, 0.00037678793887607753,
|
|
||||||
0.0011328888358548284, 0.0022676715161651373, 0.0030237725004553795, 0.004535974469035864,
|
|
||||||
0.00566949462518096, 0.007181696128100157, 0.00831521674990654, 0.009828681126236916,
|
|
||||||
0.010962201282382011, 0.012474402785301208, 0.013986604288220406, 0.015876226127147675,
|
|
||||||
0.018144529312849045, 0.019656730815768242, 0.021925034001469612, 0.024193335324525833,
|
|
||||||
0.026839058846235275, 0.028729941695928574, 0.030998244881629944, 0.03591226786375046,
|
|
||||||
0.0385579913854599, 0.041582394391298294, 0.043850697576999664, 0.04725378379225731,
|
|
||||||
0.04989950358867645, 0.05292264744639397, 0.05594705045223236, 0.058972716331481934,
|
|
||||||
0.0623745396733284, 0.06577636301517487, 0.06917944550514221, 0.07258126884698868,
|
|
||||||
0.07598309218883514, 0.07976359874010086, 0.08354410529136658, 0.0873246043920517,
|
|
||||||
0.09110511094331741, 0.09488435089588165, 0.09904354065656662, 0.10358014702796936,
|
|
||||||
0.10736065357923508, 0.11113989353179932, 0.11529907584190369, 0.11983442306518555,
|
|
||||||
0.12437102943658829, 0.12853021919727325, 0.1330668181180954, 0.13722474873065948,
|
|
||||||
0.14251744747161865, 0.14743147790431976, 0.15158939361572266, 0.15688210725784302,
|
|
||||||
0.16141870617866516, 0.16671141982078552, 0.17162543535232544, 0.17653946578502655,
|
|
||||||
0.1818321794271469, 0.18712487816810608, 0.1920389086008072, 0.19733160734176636,
|
|
||||||
0.20338042080402374, 0.2086731195449829, 0.21358714997768402, 0.2196359634399414,
|
|
||||||
0.22492866218090057, 0.23097620904445648, 0.23626892268657684, 0.24193903803825378,
|
|
||||||
0.24836653470993042, 0.25403666496276855, 0.25932934880256653, 0.2653781771659851,
|
|
||||||
0.271425724029541, 0.27785319089889526, 0.28390201926231384, 0.289572149515152,
|
|
||||||
0.29599836468696594, 0.3024258613586426, 0.3084734082221985, 0.31490087509155273,
|
|
||||||
0.3220832049846649, 0.32850944995880127, 0.33493566513061523, 0.3413618803024292,
|
|
||||||
0.34778937697410583, 0.35459303855895996, 0.3610205054283142, 0.36782416701316833,
|
|
||||||
0.3742503821849823, 0.38143399357795715, 0.38861632347106934, 0.3950425386428833,
|
|
||||||
0.40260353684425354, 0.40940719842910767, 0.41659078001976013, 0.4230169951915741,
|
|
||||||
0.4305780231952667, 0.4377603530883789, 0.4449426829814911, 0.45250368118286133,
|
|
||||||
0.46006467938423157, 0.4668683409690857, 0.47442933917045593, 0.4816129505634308,
|
|
||||||
0.48917269706726074, 0.496733695268631, 0.5042946934700012, 0.5114770531654358,
|
|
||||||
0.5190380215644836, 0.526976466178894, 0.5341587662696838, 0.5424758791923523,
|
|
||||||
0.5496582388877869, 0.5579753518104553, 0.565536379814148, 0.5734747648239136,
|
|
||||||
0.581413209438324, 0.5889742374420166, 0.5969126224517822, 0.6048510670661926,
|
|
||||||
0.6131681799888611, 0.6207292079925537, 0.6290450692176819, 0.6366060376167297,
|
|
||||||
0.645300567150116, 0.6536176800727844, 0.660800039768219, 0.6698732376098633,
|
|
||||||
0.6774329543113708, 0.6857500672340393, 0.7020056247711182, 0.7099440693855286,
|
|
||||||
0.7186398506164551, 0.7265782952308655, 0.7345166802406311, 0.7428337931632996,
|
|
||||||
0.7515283226966858, 0.7598454356193542, 0.7677838802337646, 0.7768570780754089,
|
|
||||||
0.7847955226898193, 0.7934900522232056, 0.801428496837616, 0.8101230263710022,
|
|
||||||
0.8188175559043884, 0.8263785243034363, 0.8346956372261047, 0.843390166759491,
|
|
||||||
0.8513286113739014, 0.8600231409072876, 0.868340253829956, 0.8759012818336487,
|
|
||||||
0.8845958113670349, 0.8929129242897034, 0.9012300372123718, 0.9087897539138794,
|
|
||||||
0.9178629517555237, 0.9258013963699341, 0.9329850077629089, 0.9416795372962952,
|
|
||||||
0.9496179223060608, 0.9568015336990356, 0.9651173949241638, 0.9722996950149536,
|
|
||||||
0.9802393913269043, 0.9878004193305969, 0.9949827194213867, 1.0021663904190063,
|
|
||||||
1.0097260475158691, 1.0169097185134888, 1.0237133502960205, 1.0308955907821655,
|
|
||||||
1.037321925163269, 1.0433707237243652, 1.0497969388961792, 1.0558457374572754,
|
|
||||||
1.0615158081054688, 1.0679420232772827, 1.0732347965240479, 1.079283595085144,
|
|
||||||
1.0845762491226196, 1.0898690223693848, 1.094783067703247, 1.0996969938278198,
|
|
||||||
1.1053683757781982, 1.1102824211120605, 1.1151964664459229, 1.1193556785583496,
|
|
||||||
1.124269723892212, 1.1284288167953491, 1.1325868368148804, 1.1375008821487427,
|
|
||||||
1.1420373916625977, 1.1458178758621216, 1.1503545045852661, 1.15413498878479,
|
|
||||||
1.1582930088043213, 1.1620746850967407, 1.1666101217269897, 1.1707680225372314,
|
|
||||||
1.1749272346496582, 1.1790851354599, 1.1832430362701416, 1.1870235204696655,
|
|
||||||
1.1908040046691895, 1.1949632167816162, 1.199121117591858, 1.2032791376113892,
|
|
||||||
1.207059621810913, 1.210840106010437, 1.214620590209961, 1.2187784910202026,
|
|
||||||
1.2221803665161133, 1.226338267326355, 1.2304974794387817, 1.2338992357254028,
|
|
||||||
1.237302303314209, 1.2414603233337402, 1.2452408075332642, 1.249021291732788,
|
|
||||||
1.2524243593215942, 1.2562048435211182, 1.2599841356277466, 1.2633872032165527,
|
|
||||||
1.2671676874160767, 1.2713255882263184, 1.2743500471115112, 1.2777519226074219,
|
|
||||||
1.281153678894043, 1.2845567464828491, 1.2879586219787598, 1.2917391061782837,
|
|
||||||
1.2947635650634766, 1.2985440492630005, 1.3019458055496216, 1.3049702644348145,
|
|
||||||
1.3083733320236206, 1.3117750883102417, 1.3147995471954346, 1.3178240060806274,
|
|
||||||
1.3219819068908691, 1.3276519775390625, 1.3306764364242554, 1.3337007761001587,
|
|
||||||
1.3371026515960693, 1.3401269912719727, 1.3431514501571655, 1.3461757898330688,
|
|
||||||
1.3488215208053589, 1.3522247076034546, 1.354870319366455, 1.3575160503387451,
|
|
||||||
1.360540509223938, 1.363186240196228, 1.3658331632614136, 1.369613766670227,
|
|
||||||
1.371504545211792, 1.3745276927947998, 1.377174735069275, 1.3794430494308472,
|
|
||||||
1.3820887804031372, 1.3847345113754272, 1.3870028257369995, 1.3900271654129028,
|
|
||||||
1.392674207687378, 1.395319938659668, 1.3975881338119507, 1.4002338647842407,
|
|
||||||
1.4021247625350952, 1.4047704935073853, 1.4070388078689575, 1.4093071222305298,
|
|
||||||
1.411575436592102, 1.4138437509536743, 1.4164894819259644, 1.4183803796768188,
|
|
||||||
1.4206485748291016, 1.4225382804870605, 1.4248065948486328, 1.4266961812973022,
|
|
||||||
1.4297205209732056, 1.4312328100204468, 1.4331237077713013, 1.4350132942199707,
|
|
||||||
1.4365254640579224, 1.4387937784194946, 1.441062092781067, 1.4425742626190186,
|
|
||||||
1.4444639682769775, 1.4459761381149292, 1.4482444524765015, 1.450135350227356,
|
|
||||||
1.4516475200653076, 1.453537106513977, 1.4550492763519287, 1.45656156539917,
|
|
||||||
1.4584511518478394, 1.459963321685791, 1.4614756107330322, 1.4629877805709839,
|
|
||||||
1.4648773670196533, 1.4660121202468872, 1.4671469926834106, 1.4690377712249756,
|
|
||||||
1.4705500602722168, 1.4716835021972656, 1.4735743999481201, 1.4747079610824585,
|
|
||||||
1.475464105606079, 1.4773536920547485, 1.4781097173690796, 1.4796220064163208,
|
|
||||||
1.4803780317306519, 1.4815115928649902, 1.4826463460922241, 1.4841586351394653,
|
|
||||||
1.4849146604537964, 1.485670804977417, 1.4868042469024658, 1.4879378080368042,
|
|
||||||
1.488316535949707, 1.489451289176941, 1.4902074337005615, 1.4909634590148926,
|
|
||||||
1.4913408756256104, 1.4924744367599487, 1.4932305812835693, 1.4939866065979004,
|
|
||||||
1.4947439432144165, 1.495498776435852, 1.4958775043487549, 1.4966336488723755,
|
|
||||||
1.4973896741867065, 1.4977670907974243, 1.498523235321045, 1.4992793798446655,
|
|
||||||
1.4989006519317627, 1.4992793798446655, 1.5004128217697144, 1.5004128217697144,
|
|
||||||
1.5007915496826172, 1.5015476942062378, 1.5023037195205688, 1.5015476942062378,
|
|
||||||
1.5023037195205688, 1.5026824474334717, 1.5023037195205688, 1.503061056137085,
|
|
||||||
1.5034384727478027, 1.5034372806549072, 1.5030598640441895, 1.5030598640441895,
|
|
||||||
1.5038158893585205, 1.5038158893585205, 1.5038158893585205, 1.5045720338821411,
|
|
||||||
1.5034384727478027, 1.5041946172714233, 1.5038158893585205, 1.5038158893585205,
|
|
||||||
1.5038158893585205, 1.5038158893585205, 1.5034372806549072, 1.5034384727478027,
|
|
||||||
1.5030598640441895, 1.5030598640441895, 1.5026824474334717, 1.5026824474334717,
|
|
||||||
1.5023037195205688, 1.5023037195205688, 1.5015476942062378, 1.50117027759552,
|
|
||||||
1.5015476942062378, 1.5007915496826172, 1.5004141330718994, 1.5000367164611816,
|
|
||||||
1.4996579885482788, 1.4989019632339478, 1.498523235321045, 1.4981458187103271,
|
|
||||||
1.4977684020996094, 1.4973896741867065, 1.4966336488723755, 1.4958775043487549,
|
|
||||||
1.4958775043487549, 1.4951213598251343, 1.4951213598251343, 1.4939879179000854,
|
|
||||||
1.4939879179000854, 1.4932317733764648, 1.492097020149231, 1.4917196035385132,
|
|
||||||
1.4909634590148926, 1.4905848503112793, 1.4898287057876587, 1.4890738725662231,
|
|
||||||
1.488316535949707, 1.4871829748153687, 1.4871829748153687, 1.486426830291748,
|
|
||||||
1.4860494136810303, 1.4849146604537964, 1.4841586351394653, 1.4837812185287476,
|
|
||||||
1.4826463460922241, 1.481890320777893, 1.4815129041671753, 1.480000615119934,
|
|
||||||
1.479244589805603, 1.4788658618927002, 1.4777323007583618, 1.4769762754440308,
|
|
||||||
1.4762201309204102, 1.475464105606079, 1.4747079610824585, 1.473951816558838,
|
|
||||||
1.4731957912445068, 1.4724396467208862, 1.4709274768829346, 1.4705500602722168,
|
|
||||||
1.4697939157485962, 1.4686591625213623, 1.467525601387024, 1.4667695760726929,
|
|
||||||
1.4656360149383545, 1.4648798704147339, 1.4648798704147339, 1.4633677005767822,
|
|
||||||
1.4626115560531616, 1.4626115560531616, 1.46109938621521, 1.4607206583023071,
|
|
||||||
1.4595859050750732, 1.4588298797607422, 1.4580737352371216, 1.4569401741027832,
|
|
||||||
1.4558054208755493, 1.454671859741211, 1.453537106513977, 1.4524036645889282,
|
|
||||||
1.4520249366760254, 1.4508901834487915, 1.450135350227356, 1.4493792057037354,
|
|
||||||
1.4482444524765015, 1.4474883079528809, 1.4463547468185425, 1.4459773302078247,
|
|
||||||
1.4448425769805908, 1.4440877437591553, 1.4429529905319214, 1.4421968460083008,
|
|
||||||
1.441063404083252, 1.4399298429489136, 1.4395511150360107, 1.438417673110962,
|
|
||||||
1.4376615285873413, 1.4369053840637207, 1.435393214225769, 1.4342596530914307,
|
|
||||||
1.4338810443878174, 1.4327462911605835, 1.432747483253479, 1.4301005601882935,
|
|
||||||
1.4293444156646729, 1.4278322458267212, 1.4266986846923828, 1.4259425401687622,
|
|
||||||
1.4244303703308105, 1.4229182004928589, 1.4206498861312866, 1.419137716293335,
|
|
||||||
1.4176255464553833, 1.415357232093811, 1.413467526435852, 1.4111992120742798,
|
|
||||||
1.4081748723983765, 1.4055278301239014, 1.403638243675232, 1.4006139039993286,
|
|
||||||
1.3975894451141357, 1.3949437141418457, 1.3919193744659424, 1.3892723321914673,
|
|
||||||
1.3866266012191772, 1.383602261543274, 1.381712555885315, 1.3783107995986938,
|
|
||||||
1.3756637573242188, 1.3730180263519287, 1.3707497119903564, 1.3677253723144531,
|
|
||||||
1.365078330039978, 1.362432599067688, 1.3597856760025024, 1.3571399450302124,
|
|
||||||
1.3541154861450195, 1.3518472909927368, 1.3492015600204468, 1.346177101135254,
|
|
||||||
1.3439087867736816, 1.3416404724121094, 1.338616132736206, 1.3363478183746338,
|
|
||||||
1.3337020874023438, 1.3310550451278687, 1.3284093141555786, 1.3257637023925781,
|
|
||||||
1.3234953880310059, 1.3208483457565308, 1.3182026147842407, 1.3159343004226685,
|
|
||||||
1.3129099607467651, 1.3106416463851929, 1.3083733320236206, 1.3061050176620483,
|
|
||||||
1.3034592866897583, 1.3008123636245728, 1.2981666326522827, 1.2958983182907104,
|
|
||||||
1.2936300039291382, 1.2906055450439453, 1.2887159585952759, 1.2868250608444214,
|
|
||||||
1.2841793298721313, 1.281154990196228, 1.2788866758346558, 1.2766183614730835,
|
|
||||||
1.2739713191986084, 1.2717043161392212, 1.2690573930740356, 1.2671676874160767,
|
|
||||||
1.2645207643508911, 1.261875033378601, 1.2596067190170288, 1.2573384046554565,
|
|
||||||
1.2546913623809814, 1.252801775932312, 1.250156044960022, 1.2478877305984497,
|
|
||||||
1.2459968328475952, 1.2433512210845947, 1.2410829067230225, 1.2388145923614502,
|
|
||||||
1.2361688613891602, 1.233900547027588, 1.2316322326660156, 1.2293639183044434,
|
|
||||||
1.2267169952392578, 1.224449872970581, 1.2221815586090088, 1.2202907800674438,
|
|
||||||
1.2176450490951538, 1.2157541513442993, 1.2138644456863403, 1.2112187147140503,
|
|
||||||
1.2093279361724854, 1.2066822052001953, 1.2040351629257202, 1.2021455764770508,
|
|
||||||
1.2002546787261963, 1.1972302198410034, 1.195340633392334, 1.1930723190307617,
|
|
||||||
1.1908040046691895, 1.1885356903076172, 1.1862674951553345, 1.1839991807937622,
|
|
||||||
1.18173086643219, 1.179841160774231, 1.1779515743255615, 1.1756820678710938,
|
|
||||||
1.1730363368988037, 1.1707680225372314, 1.1666101217269897, 1.1647192239761353,
|
|
||||||
1.1620734930038452, 1.159805178642273, 1.1579155921936035, 1.1564033031463623,
|
|
||||||
1.1537563800811768, 1.1518667936325073, 1.149598479270935, 1.14695143699646,
|
|
||||||
1.1450618505477905, 1.1427935361862183, 1.1412813663482666, 1.1390130519866943,
|
|
||||||
1.136744737625122, 1.134099006652832, 1.1322081089019775, 1.130318522453308,
|
|
||||||
1.1280502080917358, 1.1265380382537842, 1.1238923072814941, 1.1216239929199219,
|
|
||||||
1.1201118230819702, 1.1182209253311157, 1.1159526109695435, 1.1140629053115845,
|
|
||||||
1.1117947101593018, 1.1099050045013428, 1.107635498046875, 1.105745792388916,
|
|
||||||
1.1034775972366333, 1.1015878915786743, 1.099319577217102, 1.0978074073791504,
|
|
||||||
1.0951604843139648, 1.0932707786560059, 1.0917586088180542, 1.089490294456482,
|
|
||||||
1.0872219800949097, 1.0853310823440552, 1.083064079284668, 1.0815519094467163,
|
|
||||||
1.0789048671722412, 1.0777714252471924, 1.0755031108856201, 1.0732347965240479,
|
|
||||||
1.0709664821624756, 1.069454312324524, 1.0671859979629517, 1.0656737089157104,
|
|
||||||
1.0634055137634277, 1.0607597827911377, 1.0592474937438965, 1.0577353239059448,
|
|
||||||
1.0554670095443726, 1.053954839706421, 1.0516865253448486, 1.0494182109832764,
|
|
||||||
1.048284649848938, 1.0452589988708496, 1.043748140335083, 1.0422358512878418,
|
|
||||||
1.0403449535369873, 1.0380767583847046, 1.0365644693374634, 1.0342961549758911,
|
|
||||||
1.0320279598236084, 1.0301382541656494, 1.0286260843276978, 1.0263577699661255,
|
|
||||||
1.0248456001281738, 1.0229547023773193, 1.02106511592865, 1.019175410270691,
|
|
||||||
1.0172845125198364, 1.0153937339782715, 1.0135040283203125, 1.0119918584823608,
|
|
||||||
1.0097248554229736, 1.0078339576721191, 1.0063217878341675, 1.0040534734725952,
|
|
||||||
1.0021637678146362, 1.0006515979766846, 0.9983832836151123, 0.9968711137771606,
|
|
||||||
0.9949802160263062, 0.9930905699729919, 0.9911997318267822, 0.9900661706924438,
|
|
||||||
0.9874204993247986, 0.9855296015739441, 0.9840173721313477, 0.9817490577697754,
|
|
||||||
0.9802368879318237, 0.9783472418785095, 0.9768350720405579, 0.9745667576789856,
|
|
||||||
0.9730545282363892, 0.9715423583984375, 0.9692740440368652, 0.9681405425071716,
|
|
||||||
0.9658722281455994, 0.9647374153137207, 0.9620917439460754, 0.960579514503479,
|
|
||||||
0.9590673446655273, 0.9567990303039551, 0.9549093842506409, 0.9533972144126892,
|
|
||||||
0.9515063166618347
|
|
||||||
],
|
|
||||||
"dev": 4,
|
|
||||||
"shot": 4712,
|
|
||||||
"time": [
|
|
||||||
-8000, -7987.099999999999, -7974.2, -7961.299999999999, -7948.400000000001, -7935.5, -7922.6,
|
|
||||||
-7909.7, -7896.8, -7883.9, -7871, -7858.1, -7845.2, -7832.3, -7819.4, -7806.5,
|
|
||||||
-7793.599999999999, -7780.700000000001, -7767.8, -7754.900000000001, -7742,
|
|
||||||
-7729.099999999999, -7716.2, -7703.299999999999, -7690.400000000001, -7677.5, -7664.6,
|
|
||||||
-7651.7, -7638.8, -7625.9, -7613, -7600.1, -7587.2, -7574.3, -7561.4, -7548.5,
|
|
||||||
-7535.599999999999, -7522.700000000001, -7509.8, -7496.900000000001, -7484,
|
|
||||||
-7471.099999999999, -7458.2, -7445.299999999999, -7432.400000000001, -7419.5, -7406.6,
|
|
||||||
-7393.7, -7380.8, -7367.9, -7355, -7342.1, -7329.2, -7316.3, -7303.4, -7290.5,
|
|
||||||
-7277.599999999999, -7264.700000000001, -7251.8, -7238.900000000001, -7226,
|
|
||||||
-7213.099999999999, -7200.2, -7187.299999999999, -7174.400000000001, -7161.5, -7148.6,
|
|
||||||
-7135.7, -7122.8, -7109.9, -7097, -7084.1, -7071.2, -7058.3, -7045.4, -7032.5,
|
|
||||||
-7019.599999999999, -7006.700000000001, -6993.8, -6980.900000000001, -6968,
|
|
||||||
-6955.099999999999, -6942.2, -6929.299999999999, -6916.400000000001, -6903.5, -6890.6,
|
|
||||||
-6877.7, -6864.8, -6851.9, -6839, -6826.1, -6813.2, -6800.3, -6787.4, -6774.5,
|
|
||||||
-6761.599999999999, -6748.700000000001, -6735.8, -6722.900000000001, -6710,
|
|
||||||
-6697.099999999999, -6684.2, -6671.299999999999, -6658.400000000001, -6645.5, -6632.6,
|
|
||||||
-6619.7, -6606.8, -6593.9, -6581, -6568.1, -6542.3, -6529.4, -6516.5, -6503.599999999999,
|
|
||||||
-6490.700000000001, -6477.8, -6464.9, -6452, -6439.099999999999, -6426.2, -6413.299999999999,
|
|
||||||
-6400.400000000001, -6387.5, -6374.6, -6361.7, -6348.8, -6335.9, -6323, -6310.1, -6297.2,
|
|
||||||
-6284.3, -6271.4, -6258.5, -6245.599999999999, -6232.700000000001, -6219.8, -6206.9, -6194,
|
|
||||||
-6181.099999999999, -6168.2, -6155.3, -6142.400000000001, -6129.5, -6116.6, -6103.7, -6090.8,
|
|
||||||
-6077.9, -6065, -6052.1, -6039.2, -6026.3, -6013.4, -6000.5, -5987.599999999999,
|
|
||||||
-5974.700000000001, -5961.8, -5948.9, -5936, -5923.099999999999, -5910.2, -5897.3,
|
|
||||||
-5884.400000000001, -5871.5, -5858.6, -5845.7, -5832.8, -5819.9, -5807, -5794.1, -5781.2,
|
|
||||||
-5768.3, -5755.4, -5742.5, -5729.599999999999, -5716.700000000001, -5703.8, -5690.9, -5678,
|
|
||||||
-5665.099999999999, -5652.2, -5639.3, -5626.400000000001, -5613.5, -5600.6, -5587.7, -5574.8,
|
|
||||||
-5561.9, -5549, -5536.1, -5523.2, -5510.3, -5497.4, -5484.5, -5471.599999999999,
|
|
||||||
-5458.700000000001, -5445.8, -5432.9, -5420, -5407.099999999999, -5394.2, -5381.3,
|
|
||||||
-5368.400000000001, -5355.5, -5342.6, -5329.7, -5316.8, -5303.9, -5291, -5278.1, -5265.2,
|
|
||||||
-5252.3, -5239.4, -5226.5, -5213.599999999999, -5200.700000000001, -5187.8, -5174.9, -5162,
|
|
||||||
-5149.099999999999, -5136.2, -5123.3, -5097.5, -5084.6, -5071.7, -5058.8, -5045.9, -5033,
|
|
||||||
-5020.1, -5007.2, -4994.3, -4981.4, -4968.5, -4955.599999999999, -4942.700000000001, -4929.8,
|
|
||||||
-4916.9, -4904, -4891.099999999999, -4878.2, -4865.3, -4852.400000000001, -4839.5, -4826.6,
|
|
||||||
-4813.7, -4800.8, -4787.9, -4775, -4762.1, -4749.2, -4736.3, -4723.4, -4710.5, -4697.6,
|
|
||||||
-4684.700000000001, -4671.8, -4658.9, -4646, -4633.099999999999, -4620.2, -4607.3,
|
|
||||||
-4594.400000000001, -4581.5, -4568.6, -4555.7, -4542.799999999999, -4529.9, -4517, -4504.1,
|
|
||||||
-4491.2, -4478.3, -4465.4, -4452.5, -4439.6, -4426.700000000001, -4413.8, -4400.9, -4388,
|
|
||||||
-4375.099999999999, -4362.2, -4349.3, -4336.400000000001, -4323.5, -4310.6, -4297.7,
|
|
||||||
-4284.799999999999, -4271.9, -4259, -4246.1, -4233.2, -4220.3, -4207.4, -4194.5, -4181.6,
|
|
||||||
-4168.700000000001, -4155.8, -4142.9, -4130, -4117.099999999999, -4104.2, -4091.3, -4078.4,
|
|
||||||
-4065.5, -4052.6, -4039.7, -4026.7999999999997, -4013.8999999999996, -4001.0000000000005,
|
|
||||||
-3988.1000000000004, -3975.2000000000003, -3962.2999999999997, -3949.3999999999996, -3936.5,
|
|
||||||
-3923.6, -3910.7, -3897.8, -3884.9, -3872, -3859.1000000000004, -3846.2000000000003,
|
|
||||||
-3833.2999999999997, -3820.3999999999996, -3807.5, -3794.6, -3781.7, -3768.8, -3755.9, -3743,
|
|
||||||
-3730.1000000000004, -3717.2000000000003, -3704.2999999999997, -3691.3999999999996, -3678.5,
|
|
||||||
-3652.7, -3639.8, -3626.9, -3614, -3601.1000000000004, -3588.2000000000003,
|
|
||||||
-3575.2999999999997, -3562.3999999999996, -3549.5, -3536.6, -3523.7, -3510.8, -3497.9, -3485,
|
|
||||||
-3472.1000000000004, -3459.2000000000003, -3446.2999999999997, -3433.3999999999996, -3420.5,
|
|
||||||
-3407.6, -3394.7, -3381.8, -3368.9, -3356, -3343.1000000000004, -3330.2000000000003,
|
|
||||||
-3317.2999999999997, -3304.3999999999996, -3291.5, -3278.6, -3265.7, -3252.8, -3239.9, -3227,
|
|
||||||
-3214.1000000000004, -3201.2, -3188.2999999999997, -3175.3999999999996, -3162.5, -3149.6,
|
|
||||||
-3136.7, -3123.8, -3110.9, -3098, -3085.1000000000004, -3072.2, -3059.2999999999997, -3046.4,
|
|
||||||
-3033.5, -3020.6, -3007.7, -2994.8, -2981.9, -2969, -2956.1000000000004, -2943.2,
|
|
||||||
-2930.2999999999997, -2917.4, -2904.5, -2891.6, -2878.7, -2865.8, -2852.9, -2840,
|
|
||||||
-2827.1000000000004, -2814.2, -2801.2999999999997, -2788.4, -2775.5, -2762.6, -2749.7,
|
|
||||||
-2736.8, -2723.9, -2711, -2698.1000000000004, -2685.2, -2672.2999999999997, -2659.4, -2646.5,
|
|
||||||
-2633.6, -2620.7, -2607.8, -2594.9, -2582, -2569.1000000000004, -2556.2, -2543.2999999999997,
|
|
||||||
-2530.4, -2517.5, -2504.6, -2491.7, -2478.8, -2465.9, -2453, -2440.1000000000004, -2427.2,
|
|
||||||
-2414.2999999999997, -2401.4, -2388.5, -2375.6, -2362.7, -2349.8, -2336.9, -2324,
|
|
||||||
-2311.1000000000004, -2298.2, -2285.2999999999997, -2272.4, -2259.5, -2246.6, -2233.7,
|
|
||||||
-2207.9, -2195, -2182.1000000000004, -2169.2, -2156.2999999999997, -2143.4, -2130.5, -2117.6,
|
|
||||||
-2104.7, -2091.8, -2078.9, -2066, -2053.1000000000004, -2040.2, -2027.3, -2014.4, -2001.5,
|
|
||||||
-1988.6, -1975.7, -1962.8000000000002, -1949.8999999999999, -1937, -1924.1, -1911.2,
|
|
||||||
-1898.3000000000002, -1885.3999999999999, -1872.5, -1859.6, -1846.7, -1833.8000000000002,
|
|
||||||
-1820.8999999999999, -1808, -1795.1, -1782.2, -1769.3000000000002, -1756.3999999999999,
|
|
||||||
-1743.5, -1730.6, -1717.7, -1704.8000000000002, -1691.8999999999999, -1679, -1666.1, -1653.2,
|
|
||||||
-1640.3000000000002, -1627.3999999999999, -1614.5, -1601.6, -1588.7, -1575.8000000000002,
|
|
||||||
-1562.8999999999999, -1550, -1537.1, -1524.2, -1511.3000000000002, -1498.3999999999999,
|
|
||||||
-1485.5, -1472.6, -1459.7, -1446.8000000000002, -1433.8999999999999, -1421, -1408.1, -1395.2,
|
|
||||||
-1382.3000000000002, -1369.3999999999999, -1356.5, -1343.6, -1330.7, -1317.8000000000002,
|
|
||||||
-1304.8999999999999, -1292, -1279.1, -1266.2, -1253.3000000000002, -1240.3999999999999,
|
|
||||||
-1227.5, -1214.6, -1201.7, -1188.8000000000002, -1175.8999999999999, -1163, -1150.1, -1137.2,
|
|
||||||
-1124.3000000000002, -1111.3999999999999, -1098.5, -1085.6, -1072.7, -1059.8000000000002,
|
|
||||||
-1046.8999999999999, -1034, -1021.0999999999999, -1008.1999999999999, -995.3,
|
|
||||||
-982.4000000000001, -969.5, -956.6, -943.6999999999999, -930.8, -917.9000000000001, -905,
|
|
||||||
-892.1, -879.1999999999999, -866.3, -853.4000000000001, -840.5, -827.6, -814.6999999999999,
|
|
||||||
-801.8, -788.9000000000001, -763.1, -750.1999999999999, -737.3, -724.4000000000001, -711.5,
|
|
||||||
-698.6, -685.6999999999999, -672.8, -659.9000000000001, -647, -634.1, -621.1999999999999,
|
|
||||||
-608.3, -595.4000000000001, -582.5, -569.6, -556.6999999999999, -543.8, -530.9000000000001,
|
|
||||||
-518, -505.09999999999997, -492.20000000000005, -479.3, -466.4, -453.5, -440.59999999999997,
|
|
||||||
-427.70000000000005, -414.8, -401.9, -389, -376.09999999999997, -363.20000000000005, -350.3,
|
|
||||||
-337.4, -324.5, -311.59999999999997, -298.70000000000005, -285.8, -272.9, -260, -247.1,
|
|
||||||
-234.2, -221.29999999999998, -208.4, -195.5, -182.60000000000002, -169.7, -156.79999999999998,
|
|
||||||
-143.9, -131, -118.1, -105.2, -92.3, -79.39999999999999, -66.5, -53.6, -40.7,
|
|
||||||
-27.799999999999997, -14.9, -2, 10.9, 23.8, 36.7, 49.6, 62.5, 75.39999999999999, 88.3, 101.2,
|
|
||||||
114.1, 127, 139.9, 152.79999999999998, 165.7, 178.60000000000002, 191.5, 204.4,
|
|
||||||
217.29999999999998, 230.2, 243.10000000000002, 256, 268.9, 281.8, 294.70000000000005,
|
|
||||||
307.59999999999997, 320.5, 333.4, 346.3, 359.20000000000005, 372.09999999999997, 385, 397.9,
|
|
||||||
410.8, 423.70000000000005, 436.59999999999997, 449.5, 462.4, 475.3, 488.20000000000005,
|
|
||||||
501.09999999999997, 514, 526.9000000000001, 539.8, 552.6999999999999, 565.6, 578.5,
|
|
||||||
591.4000000000001, 604.3, 617.1999999999999, 630.1, 643, 655.9000000000001, 681.6999999999999,
|
|
||||||
694.6, 707.5, 720.4000000000001, 733.3, 746.1999999999999, 759.1, 772, 784.9000000000001,
|
|
||||||
797.8, 810.6999999999999, 823.6, 836.5, 849.4000000000001, 862.3, 875.1999999999999, 888.1,
|
|
||||||
901, 913.9000000000001, 926.8, 939.6999999999999, 952.6, 965.5, 978.4000000000001, 991.3,
|
|
||||||
1004.1999999999999, 1017.0999999999999, 1030, 1042.8999999999999, 1055.8000000000002, 1068.7,
|
|
||||||
1081.6, 1094.5, 1107.3999999999999, 1120.3000000000002, 1133.2, 1146.1, 1159,
|
|
||||||
1171.8999999999999, 1184.8000000000002, 1197.7, 1210.6, 1223.5, 1236.3999999999999,
|
|
||||||
1249.3000000000002, 1262.2, 1275.1, 1288, 1300.8999999999999, 1313.8000000000002, 1326.7,
|
|
||||||
1339.6, 1352.5, 1365.3999999999999, 1378.3000000000002, 1391.2, 1404.1, 1417,
|
|
||||||
1429.8999999999999, 1442.8000000000002, 1455.7, 1468.6, 1481.5, 1494.3999999999999,
|
|
||||||
1507.3000000000002, 1520.2, 1533.1, 1546, 1558.8999999999999, 1571.8000000000002, 1584.7,
|
|
||||||
1597.6, 1610.5, 1623.3999999999999, 1636.3000000000002, 1649.2, 1662.1, 1675,
|
|
||||||
1687.8999999999999, 1700.8000000000002, 1713.7, 1726.6, 1739.5, 1752.3999999999999,
|
|
||||||
1765.3000000000002, 1778.2, 1791.1, 1804, 1816.8999999999999, 1829.8000000000002, 1842.7,
|
|
||||||
1855.6, 1868.5, 1881.3999999999999, 1894.3000000000002, 1907.2, 1920.1, 1933,
|
|
||||||
1945.8999999999999, 1958.8000000000002, 1971.7, 1984.6, 1997.5, 2010.4, 2023.3, 2036.2,
|
|
||||||
2049.1000000000004, 2062, 2074.9, 2087.8, 2100.7, 2126.5, 2139.4, 2152.2999999999997, 2165.2,
|
|
||||||
2178.1000000000004, 2191, 2203.9, 2216.8, 2229.7, 2242.6, 2255.5, 2268.4, 2281.2999999999997,
|
|
||||||
2294.2, 2307.1000000000004, 2320, 2332.9, 2345.8, 2358.7, 2371.6, 2384.5, 2397.4,
|
|
||||||
2410.2999999999997, 2423.2, 2436.1000000000004, 2449, 2461.9, 2474.8, 2487.7, 2500.6, 2513.5,
|
|
||||||
2526.4, 2539.2999999999997, 2552.2, 2565.1000000000004, 2578, 2590.9, 2603.8, 2616.7, 2629.6,
|
|
||||||
2642.5, 2655.4, 2668.2999999999997, 2681.2, 2694.1000000000004, 2707, 2719.9, 2732.8, 2745.7,
|
|
||||||
2758.6, 2771.5, 2784.4, 2797.2999999999997, 2810.2, 2823.1000000000004, 2836, 2848.9, 2861.8,
|
|
||||||
2874.7, 2887.6, 2900.5, 2913.4, 2926.2999999999997, 2939.2, 2952.1000000000004, 2965, 2977.9,
|
|
||||||
2990.8, 3003.7, 3016.6, 3029.5, 3042.4, 3055.2999999999997, 3068.2, 3081.1000000000004, 3094,
|
|
||||||
3106.9, 3119.8, 3132.7, 3145.6, 3158.5, 3171.4, 3184.2999999999997, 3197.2,
|
|
||||||
3210.1000000000004, 3223, 3235.9, 3248.8, 3261.7, 3274.6, 3287.5, 3300.3999999999996,
|
|
||||||
3313.2999999999997, 3326.2, 3339.1000000000004, 3352, 3364.9, 3377.8, 3390.7, 3403.6, 3416.5,
|
|
||||||
3429.3999999999996, 3442.2999999999997, 3455.2000000000003, 3468.1000000000004, 3481, 3493.9,
|
|
||||||
3506.8, 3519.7, 3532.6, 3545.5, 3571.2999999999997, 3584.2000000000003, 3597.1000000000004,
|
|
||||||
3610, 3622.9, 3635.8, 3648.7, 3661.6, 3674.5, 3687.3999999999996, 3700.2999999999997,
|
|
||||||
3713.2000000000003, 3726.1000000000004, 3739, 3751.9, 3764.8, 3777.7, 3790.6, 3803.5,
|
|
||||||
3816.3999999999996, 3829.2999999999997, 3842.2000000000003, 3855.1000000000004, 3868, 3880.9,
|
|
||||||
3893.8, 3906.7, 3919.6, 3932.5, 3945.3999999999996, 3958.2999999999997, 3971.2000000000003,
|
|
||||||
3984.1000000000004, 3997, 4009.9, 4022.8, 4035.7000000000003, 4048.6000000000004,
|
|
||||||
4061.4999999999995, 4074.3999999999996, 4087.2999999999997, 4100.2, 4113.1, 4126, 4138.9,
|
|
||||||
4151.799999999999, 4164.7, 4177.6, 4190.5, 4203.400000000001, 4216.3, 4229.2,
|
|
||||||
4242.099999999999, 4255, 4267.9, 4280.8, 4293.700000000001, 4306.6, 4319.5, 4332.4, 4345.3,
|
|
||||||
4358.2, 4371.1, 4384, 4396.9, 4409.799999999999, 4422.7, 4435.6, 4448.5, 4461.400000000001,
|
|
||||||
4474.3, 4487.2, 4500.099999999999, 4513, 4525.9, 4538.8, 4551.700000000001, 4564.6, 4577.5,
|
|
||||||
4590.4, 4603.3, 4616.2, 4629.1, 4642, 4654.9, 4667.799999999999, 4680.7, 4693.6, 4706.5,
|
|
||||||
4719.400000000001, 4732.3, 4745.2, 4758.099999999999, 4771, 4783.9, 4796.8, 4809.700000000001,
|
|
||||||
4822.6, 4835.5, 4848.4, 4861.3, 4874.2, 4887.1, 4900, 4912.9, 4925.8, 4938.7, 4951.6, 4964.5,
|
|
||||||
4977.400000000001, 4990.3
|
|
||||||
],
|
|
||||||
"time_unit": "ms"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"chnl": "BT1_2M",
|
|
||||||
"chnl_id": 4741,
|
|
||||||
"dat_unit": "T",
|
|
||||||
"data": [
|
|
||||||
0.0003748245071619749, -0.00037091693957336247, 9.768938298293506e-7, -0.0003728707379195839,
|
|
||||||
-0.00037091693957336247, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 9.768938298293506e-7, -0.00037091693957336247, -0.00037091693957336247,
|
|
||||||
-0.00037091693957336247, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 9.768938298293506e-7, -0.00037091693957336247, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, -0.0003728707379195839, -0.00037091693957336247,
|
|
||||||
-0.00037091693957336247, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7, -0.0003728707379195839,
|
|
||||||
9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
-0.00037091693957336247, 9.768938298293506e-7, -0.0003728707379195839,
|
|
||||||
-0.00037091693957336247, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
0.000002930681375801214, 0.0003748245071619749, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 0.0003748245071619749, -0.00037091693957336247, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7, 0.0003728707379195839,
|
|
||||||
9.768938298293506e-7, -0.0003728707379195839, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
0.0003748245071619749, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 0.0003748245071619749, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
-0.00037091693957336247, 0.0003748245071619749, 0.0003728707379195839,
|
|
||||||
-0.00037091693957336247, 9.768938298293506e-7, 0.0003748245071619749, 0.0003748245071619749,
|
|
||||||
0.0003748245071619749, 0.0003728707379195839, 0.0003748245071619749, 0.0003748245071619749,
|
|
||||||
0.0003748245071619749, 0.0003748245071619749, 9.768938298293506e-7, 0.0003748245071619749,
|
|
||||||
0.0003728707379195839, 9.768938298293506e-7, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
9.768938298293506e-7, 0.0003728707379195839, 9.768938298293506e-7, 9.768938298293506e-7,
|
|
||||||
0.0003748245071619749, 9.768938298293506e-7, 0.0003748245071619749, 0.0003748245071619749,
|
|
||||||
0.0003748245071619749, 9.768938298293506e-7, 0.0003748245071619749, 9.768938298293506e-7,
|
|
||||||
0.0007467183750122786, 0.0003748245071619749, 0.0003728707379195839, 0.0007467183750122786,
|
|
||||||
9.768938298293506e-7, 0.0007467183750122786, 9.768938298293506e-7, 0.0007467183750122786,
|
|
||||||
9.768938298293506e-7, 0.0007467183750122786, 9.768938298293506e-7, 0.0007467183750122786,
|
|
||||||
0.0003748245071619749, 0.0007467183750122786, 0.0007467183750122786, 9.768938298293506e-7,
|
|
||||||
0.0003728707379195839, 0.0011205659247934818, 9.768938298293506e-7, 0.0003748245071619749,
|
|
||||||
0.0007467183750122786, 0.0003748245071619749, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0003748245071619749, 0.0007467183750122786, 9.768938298293506e-7,
|
|
||||||
0.0003748245071619749, 9.768938298293506e-7, 9.768938298293506e-7, 0.0003748245071619749,
|
|
||||||
0.0003748245071619749, 0.0007467183750122786, 0.0007467183750122786, 0.0003748245071619749,
|
|
||||||
9.768938298293506e-7, 0.0003748245071619749, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0003748245071619749, 0.0003748245071619749, 0.0003748245071619749, 9.768938298293506e-7,
|
|
||||||
0.0003748245071619749, 0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0003748245071619749, 0.0003728707379195839, 0.0003748245071619749, 0.0003748245071619749,
|
|
||||||
0.0007467183750122786, 0.0011205659247934818, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0003748245071619749,
|
|
||||||
0.0007467183750122786, 0.0003748245071619749, 0.0003748245071619749, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0003748245071619749,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0003748245071619749,
|
|
||||||
0.0003748245071619749, 0.0007467183750122786, 0.0007467183750122786, 0.0003748245071619749,
|
|
||||||
0.0007467183750122786, 0.0003748245071619749, 0.0003748245071619749, 0.0007467183750122786,
|
|
||||||
0.0011205659247934818, 0.0003748245071619749, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0011205659247934818, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0011205659247934818, 0.0003748245071619749, 0.0007467183750122786,
|
|
||||||
0.0007486721151508391, 0.0007467183750122786, 0.0007467183750122786, 0.0011205659247934818,
|
|
||||||
0.0003748245071619749, 0.0007467183750122786, 0.0003748245071619749, 0.0007486721151508391,
|
|
||||||
0.0003748245071619749, 0.0007467183750122786, 0.0007467183750122786, 0.0003748245071619749,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0014924597926437855,
|
|
||||||
0.0011186121264472604, 0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0011205659247934818, 0.0007467183750122786, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0011205659247934818, 0.0011205659247934818,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0014924597926437855, 0.0011205659247934818,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0014924597926437855, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0014924597926437855, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0007467183750122786, 0.0011205659247934818, 0.0011205659247934818, 0.0014924597926437855,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0007467183750122786, 0.0011186121264472604,
|
|
||||||
0.0011186121264472604, 0.0011186121264472604, 0.0014924597926437855, 0.0011205659247934818,
|
|
||||||
0.0011205659247934818, 0.0007467183750122786, 0.0011205659247934818, 0.0011186121264472604,
|
|
||||||
0.0007467183750122786, 0.0011205659247934818, 0.0014924597926437855, 0.0011205659247934818,
|
|
||||||
0.0011186121264472604, 0.0007467183750122786, 0.0011205659247934818, 0.0011186121264472604,
|
|
||||||
0.0011205659247934818, 0.0011205659247934818, 0.0011205659247934818, 0.0011186121264472604,
|
|
||||||
0.0007467183750122786, 0.0011186121264472604, 0.0014924597926437855, 0.0014924597926437855,
|
|
||||||
0.0007467183750122786, 0.0007467183750122786, 0.0011205659247934818, 0.0014924597926437855,
|
|
||||||
0.0011205659247934818, 0.0014924597926437855, 0.0011205659247934818, 0.0007467183750122786,
|
|
||||||
0.0011186121264472604, 0.0014924597926437855, 0.0007467183750122786, 0.0011186121264472604,
|
|
||||||
0.0011205659247934818, 0.0018663074588403106, 0.0007467183750122786, 0.0014924597926437855,
|
|
||||||
0.0011186121264472604, 0.0011186121264472604, 0.0014924597926437855, 0.0011205659247934818,
|
|
||||||
0.0014924597926437855, 0.0014924597926437855, 0.0007467183750122786, 0.0014924597926437855,
|
|
||||||
0.0011205659247934818, 0.0011186121264472604, 0.0014924597926437855, 0.0011186121264472604,
|
|
||||||
0.0014924597926437855, 0.0018663074588403106, 0.0022382012102752924, 0.0022382012102752924,
|
|
||||||
0.0029839426279067993, 0.00372968427836895, 0.0041015781462192535, 0.005221167113631964,
|
|
||||||
0.005966908764094114, 0.0070864977315068245, 0.008204133249819279, 0.009695615619421005,
|
|
||||||
0.010815205052495003, 0.01230668742209673, 0.01379817072302103, 0.01566154696047306,
|
|
||||||
0.01752687804400921, 0.01901836134493351, 0.02050984464585781, 0.022747067734599113,
|
|
||||||
0.024984292685985565, 0.026849623769521713, 0.029086846858263016, 0.03132406994700432,
|
|
||||||
0.03356129676103592, 0.03915337845683098, 0.04139255732297897, 0.044375523924827576,
|
|
||||||
0.04735849052667618, 0.05034145712852478, 0.05295252799987793, 0.05593549460172653,
|
|
||||||
0.05929035320878029, 0.06190142408013344, 0.06563013046979904, 0.06935884058475494,
|
|
||||||
0.0727156549692154, 0.075698621571064, 0.0794273242354393, 0.08278413861989975,
|
|
||||||
0.08651284873485565, 0.0906153991818428, 0.0943441092967987, 0.09844470769166946,
|
|
||||||
0.10217536985874176, 0.10590407997369766, 0.11037852615118027, 0.11485297977924347,
|
|
||||||
0.11858168244361877, 0.12268424034118652, 0.12790443003177643, 0.13200698792934418,
|
|
||||||
0.13648143410682678, 0.1409558802843094, 0.14580418169498444, 0.15027862787246704,
|
|
||||||
0.15549881756305695, 0.160347118973732, 0.1648215651512146, 0.1700417548418045,
|
|
||||||
0.17489004135131836, 0.18011023104190826, 0.18533042073249817, 0.19092446565628052,
|
|
||||||
0.19539891183376312, 0.20099295675754547, 0.20695888996124268, 0.21217907965183258,
|
|
||||||
0.21777310967445374, 0.22336715459823608, 0.22896118462085724, 0.2345532774925232,
|
|
||||||
0.2397734671831131, 0.24536749720573425, 0.25133344531059265, 0.2576732039451599,
|
|
||||||
0.2636391520500183, 0.2696050703525543, 0.27594485878944397, 0.2815389037132263,
|
|
||||||
0.28750482201576233, 0.29421648383140564, 0.30018436908721924, 0.3065222203731537,
|
|
||||||
0.3124881386756897, 0.31957367062568665, 0.3259134292602539, 0.3326251208782196,
|
|
||||||
0.3385910391807556, 0.3453027307987213, 0.3516424894332886, 0.3591018617153168,
|
|
||||||
0.36506780982017517, 0.3725252151489258, 0.3792368769645691, 0.38557666540145874,
|
|
||||||
0.39228832721710205, 0.39974576234817505, 0.40645939111709595, 0.4135448932647705,
|
|
||||||
0.42062845826148987, 0.4277139902114868, 0.4347994923591614, 0.4422569274902344,
|
|
||||||
0.4497162997722626, 0.45679986476898193, 0.4638834297657013, 0.47097089886665344,
|
|
||||||
0.4788002073764801, 0.4862595796585083, 0.49334314465522766, 0.5011743903160095,
|
|
||||||
0.5086318254470825, 0.5164631009101868, 0.5235486030578613, 0.5317517518997192,
|
|
||||||
0.5392091870307922, 0.5470404624938965, 0.5544978380203247, 0.562329113483429,
|
|
||||||
0.569786548614502, 0.5779896974563599, 0.5861948132514954, 0.5936521887779236,
|
|
||||||
0.6014834642410278, 0.6096866130828857, 0.6178917288780212, 0.6253491640090942,
|
|
||||||
0.6335523128509521, 0.6413835883140564, 0.6495867371559143, 0.6577898859977722,
|
|
||||||
0.6659930348396301, 0.673826277256012, 0.6824012994766235, 0.690606415271759,
|
|
||||||
0.7066388726234436, 0.7152158617973328, 0.723047137260437, 0.7316241264343262,
|
|
||||||
0.7394554018974304, 0.748404324054718, 0.7562355399131775, 0.7648125886917114,
|
|
||||||
0.7730157375335693, 0.7815927267074585, 0.7897958755493164, 0.7983728647232056,
|
|
||||||
0.8065779805183411, 0.814781129360199, 0.8233581781387329, 0.8315613269805908,
|
|
||||||
0.8397644758224487, 0.8490872383117676, 0.856918454170227, 0.865495502948761,
|
|
||||||
0.8733248114585876, 0.8819018006324768, 0.889733076095581, 0.8983080983161926,
|
|
||||||
0.9065132141113281, 0.9143444895744324, 0.9225456714630127, 0.9307507872581482,
|
|
||||||
0.9378362894058228, 0.9467852115631104, 0.9546164870262146, 0.9620738625526428,
|
|
||||||
0.9702770113945007, 0.978108286857605, 0.985565721988678, 0.9933969974517822,
|
|
||||||
1.0008543729782104, 1.0079379081726074, 1.0150234699249268, 1.0221070051193237,
|
|
||||||
1.029192566871643, 1.0355323553085327, 1.0422459840774536, 1.0489577054977417,
|
|
||||||
1.0549235343933105, 1.0612633228302002, 1.0672292709350586, 1.0731971263885498,
|
|
||||||
1.0791630744934082, 1.084383249282837, 1.0907230377197266, 1.095569372177124,
|
|
||||||
1.1004177331924438, 1.1056379079818726, 1.1112319231033325, 1.115706443786621,
|
|
||||||
1.1205546855926514, 1.1250290870666504, 1.129503607749939, 1.133978009223938,
|
|
||||||
1.1384525299072266, 1.1429269313812256, 1.1466556787490845, 1.1515039205551147,
|
|
||||||
1.1556065082550049, 1.160080909729004, 1.1638096570968628, 1.1682840585708618,
|
|
||||||
1.1720128059387207, 1.1761153936386108, 1.1809617280960083, 1.1843185424804688,
|
|
||||||
1.1884210109710693, 1.192895531654358, 1.1966242790222168, 1.2007248401641846,
|
|
||||||
1.2044554948806763, 1.208556056022644, 1.2126586437225342, 1.2167612314224243,
|
|
||||||
1.2204898595809937, 1.224590539932251, 1.2286930084228516, 1.2320479154586792,
|
|
||||||
1.2365243434906006, 1.2398791313171387, 1.2436078786849976, 1.2477104663848877,
|
|
||||||
1.2510672807693481, 1.255167841911316, 1.2585246562957764, 1.2626252174377441,
|
|
||||||
1.2656102180480957, 1.2697107791900635, 1.2726937532424927, 1.2767963409423828,
|
|
||||||
1.2801531553268433, 1.2838817834854126, 1.2876105308532715, 1.290967345237732,
|
|
||||||
1.2946960926055908, 1.298050880432129, 1.301033854484558, 1.3043906688690186,
|
|
||||||
1.3081194162368774, 1.3107304573059082, 1.3148311376571655, 1.3178139925003052,
|
|
||||||
1.3207969665527344, 1.324527621269226, 1.3275105953216553, 1.3342223167419434,
|
|
||||||
1.3372052907943726, 1.3398163318634033, 1.3431731462478638, 1.3465280532836914,
|
|
||||||
1.3491390943527222, 1.3521220684051514, 1.3554788827896118, 1.3580880165100098,
|
|
||||||
1.3606990575790405, 1.3636820316314697, 1.3674107789993286, 1.3692760467529297,
|
|
||||||
1.3722590208053589, 1.375241994857788, 1.3774791955947876, 1.3804621696472168,
|
|
||||||
1.383445143699646, 1.3860561847686768, 1.3882935047149658, 1.391276478767395,
|
|
||||||
1.3938875198364258, 1.3964966535568237, 1.3987338542938232, 1.4009710550308228,
|
|
||||||
1.4039559364318848, 1.4061912298202515, 1.4088022708892822, 1.4110395908355713,
|
|
||||||
1.413650631904602, 1.4155139923095703, 1.418125033378601, 1.420734167098999,
|
|
||||||
1.4225995540618896, 1.4248367547988892, 1.4270739555358887, 1.4289393424987793,
|
|
||||||
1.4311745166778564, 1.4334137439727783, 1.4352771043777466, 1.437514305114746,
|
|
||||||
1.4393796920776367, 1.4416168928146362, 1.4434822797775269, 1.4457194805145264,
|
|
||||||
1.4475828409194946, 1.4494481086730957, 1.450939655303955, 1.4531768560409546,
|
|
||||||
1.454668402671814, 1.456533670425415, 1.4583970308303833, 1.460262417793274,
|
|
||||||
1.4613800048828125, 1.4628715515136719, 1.4651087522506714, 1.4666022062301636,
|
|
||||||
1.4680936336517334, 1.4695851802825928, 1.471448540687561, 1.4721941947937012,
|
|
||||||
1.4736857414245605, 1.4755491018295288, 1.4766687154769897, 1.4777863025665283,
|
|
||||||
1.479651689529419, 1.4807692766189575, 1.4818888902664185, 1.4833803176879883,
|
|
||||||
1.4844999313354492, 1.4859914779663086, 1.4867371320724487, 1.4878548383712769,
|
|
||||||
1.4893462657928467, 1.4900920391082764, 1.490837812423706, 1.4923292398452759,
|
|
||||||
1.4930750131607056, 1.4941946268081665, 1.4949404001235962, 1.4956860542297363,
|
|
||||||
1.4968056678771973, 1.4975494146347046, 1.4982951879501343, 1.4986690282821655,
|
|
||||||
1.500160574913025, 1.500160574913025, 1.5012800693511963, 1.502025842666626,
|
|
||||||
1.5027716159820557, 1.503143548965454, 1.5038892030715942, 1.5042630434036255,
|
|
||||||
1.5046368837356567, 1.5053826570510864, 1.5057545900344849, 1.5065003633499146,
|
|
||||||
1.5065003633499146, 1.5072460174560547, 1.5072460174560547, 1.5079917907714844,
|
|
||||||
1.5079917907714844, 1.5079917907714844, 1.508737564086914, 1.5091114044189453,
|
|
||||||
1.5094833374023438, 1.5094833374023438, 1.5094833374023438, 1.509857177734375,
|
|
||||||
1.5102289915084839, 1.5106009244918823, 1.5102289915084839, 1.5106009244918823,
|
|
||||||
1.5102289915084839, 1.5106009244918823, 1.5106028318405151, 1.5106009244918823,
|
|
||||||
1.5106009244918823, 1.5106009244918823, 1.5102289915084839, 1.5102289915084839,
|
|
||||||
1.5102289915084839, 1.5102289915084839, 1.5098551511764526, 1.5094833374023438,
|
|
||||||
1.5094833374023438, 1.5094833374023438, 1.509109377861023, 1.5083637237548828,
|
|
||||||
1.5079917907714844, 1.5079917907714844, 1.507619857788086, 1.5072460174560547,
|
|
||||||
1.5068721771240234, 1.5068721771240234, 1.5065003633499146, 1.5061265230178833,
|
|
||||||
1.5050069093704224, 1.5046368837356567, 1.5038892030715942, 1.5042630434036255,
|
|
||||||
1.5035173892974854, 1.5027716159820557, 1.5023977756500244, 1.5016520023345947,
|
|
||||||
1.5012800693511963, 1.5005344152450562, 1.4997867345809937, 1.4994148015975952,
|
|
||||||
1.4990428686141968, 1.4982951879501343, 1.4979232549667358, 1.4971776008605957,
|
|
||||||
1.4960579872131348, 1.4960579872131348, 1.4949404001235962, 1.4941946268081665,
|
|
||||||
1.4938207864761353, 1.4927011728286743, 1.4923292398452759, 1.4915835857391357,
|
|
||||||
1.490837812423706, 1.4900920391082764, 1.4893462657928467, 1.488228678703308,
|
|
||||||
1.4878548383712769, 1.4863632917404175, 1.4859914779663086, 1.4856176376342773,
|
|
||||||
1.4848718643188477, 1.4833803176879883, 1.4833803176879883, 1.482260823249817,
|
|
||||||
1.4811431169509888, 1.4803974628448486, 1.4792778491973877, 1.4789040088653564,
|
|
||||||
1.4777863025665283, 1.4770406484603882, 1.4762948751449585, 1.4755491018295288,
|
|
||||||
1.4744294881820679, 1.474057674407959, 1.4725642204284668, 1.47182035446167,
|
|
||||||
1.4714465141296387, 1.4699550867080688, 1.4692093133926392, 1.4695812463760376,
|
|
||||||
1.4680917263031006, 1.4669721126556396, 1.4666001796722412, 1.4654825925827026,
|
|
||||||
1.4643629789352417, 1.463617205619812, 1.4624996185302734, 1.4621257781982422,
|
|
||||||
1.4606342315673828, 1.4595166444778442, 1.459142804145813, 1.458023190498352,
|
|
||||||
1.4569056034088135, 1.4569056034088135, 1.455414056777954, 1.4542945623397827,
|
|
||||||
1.4531749486923218, 1.4520572423934937, 1.4513115882873535, 1.4505658149719238,
|
|
||||||
1.4501919746398926, 1.4490723609924316, 1.4475809335708618, 1.4468351602554321,
|
|
||||||
1.4464632272720337, 1.4449697732925415, 1.4442260265350342, 1.4434783458709717,
|
|
||||||
1.4423606395721436, 1.4416149854660034, 1.4412411451339722, 1.4393776655197144,
|
|
||||||
1.439003825187683, 1.4371404647827148, 1.4363948106765747, 1.4349013566970825,
|
|
||||||
1.4337836503982544, 1.4326660633087158, 1.4315464496612549, 1.4293092489242554,
|
|
||||||
1.427817702293396, 1.425952434539795, 1.4240890741348267, 1.422223687171936,
|
|
||||||
1.4203603267669678, 1.417749285697937, 1.4155120849609375, 1.4125291109085083,
|
|
||||||
1.409917950630188, 1.4069350957870483, 1.4046977758407593, 1.4013429880142212,
|
|
||||||
1.3987318277359009, 1.3961207866668701, 1.3935116529464722, 1.390528678894043,
|
|
||||||
1.3879176378250122, 1.3853065967559814, 1.382325530052185, 1.3797144889831543,
|
|
||||||
1.3774772882461548, 1.3741204738616943, 1.3715113401412964, 1.3692741394042969,
|
|
||||||
1.3662911653518677, 1.363680124282837, 1.3614428043365479, 1.3580859899520874,
|
|
||||||
1.355848789215088, 1.35323965549469, 1.3506286144256592, 1.3483914136886597,
|
|
||||||
1.3457822799682617, 1.343171238899231, 1.3405601978302002, 1.337577223777771,
|
|
||||||
1.335339903831482, 1.3331027030944824, 1.3301197290420532, 1.3278825283050537,
|
|
||||||
1.325271487236023, 1.3222885131835938, 1.3204251527786255, 1.3178139925003052,
|
|
||||||
1.3152029514312744, 1.312965750694275, 1.310356616973877, 1.3077455759048462,
|
|
||||||
1.3055083751678467, 1.3025254011154175, 1.3006620407104492, 1.298050880432129,
|
|
||||||
1.2954398393630981, 1.2928307056427002, 1.2909654378890991, 1.2883563041687012,
|
|
||||||
1.2857471704483032, 1.28313410282135, 1.2805249691009521, 1.2782877683639526,
|
|
||||||
1.2760505676269531, 1.2738133668899536, 1.2708303928375244, 1.268593192100525,
|
|
||||||
1.2663559913635254, 1.263744831085205, 1.2615076303482056, 1.259270429611206,
|
|
||||||
1.2574050426483154, 1.2547959089279175, 1.2518130540847778, 1.2499476671218872,
|
|
||||||
1.2477104663848877, 1.2454732656478882, 1.2428621053695679, 1.2406249046325684,
|
|
||||||
1.2387615442276, 1.2365243434906006, 1.2339133024215698, 1.2316759824752808, 1.22906494140625,
|
|
||||||
1.2272015810012817, 1.2249643802642822, 1.2223533391952515, 1.2201160192489624,
|
|
||||||
1.217878818511963, 1.2156416177749634, 1.2134044170379639, 1.2111672163009644,
|
|
||||||
1.2089298963546753, 1.2066926956176758, 1.2044554948806763, 1.2022182941436768,
|
|
||||||
1.1996071338653564, 1.1981157064437866, 1.194760799407959, 1.192895531654358,
|
|
||||||
1.1914039850234985, 1.1884210109710693, 1.1865557432174683, 1.1843185424804688,
|
|
||||||
1.1817094087600708, 1.1798440217971802, 1.1776068210601807, 1.1731324195861816,
|
|
||||||
1.171267032623291, 1.1697756052017212, 1.1667945384979248, 1.1645554304122925,
|
|
||||||
1.163063883781433, 1.1608266830444336, 1.158589482307434, 1.1563522815704346,
|
|
||||||
1.1541149616241455, 1.1522496938705444, 1.1503863334655762, 1.147403359413147,
|
|
||||||
1.1459099054336548, 1.1433007717132568, 1.1410635709762573, 1.139200210571289,
|
|
||||||
1.1373348236083984, 1.135097622871399, 1.133606195449829, 1.13136887550354,
|
|
||||||
1.1287578344345093, 1.1265206336975098, 1.1246552467346191, 1.1220461130142212,
|
|
||||||
1.1209285259246826, 1.1186892986297607, 1.115706443786621, 1.114588737487793,
|
|
||||||
1.1123496294021606, 1.1104861497879028, 1.1082489490509033, 1.1060117483139038,
|
|
||||||
1.104520320892334, 1.101911187171936, 1.099673867225647, 1.0985543727874756,
|
|
||||||
1.0959432125091553, 1.0944517850875854, 1.092214584350586, 1.0903512239456177,
|
|
||||||
1.0877400636672974, 1.0858747959136963, 1.084011435508728, 1.0821460485458374,
|
|
||||||
1.0802826881408691, 1.0780454874038696, 1.0758082866668701, 1.0739428997039795,
|
|
||||||
1.0720795392990112, 1.0702141523361206, 1.067976951599121, 1.0664855241775513,
|
|
||||||
1.064622163772583, 1.062384843826294, 1.0605195760726929, 1.0586562156677246,
|
|
||||||
1.056790828704834, 1.0545536279678345, 1.0526883602142334, 1.0508248805999756,
|
|
||||||
1.0489596128463745, 1.046722412109375, 1.0448590517044067, 1.0429936647415161,
|
|
||||||
1.0411303043365479, 1.0392649173736572, 1.0373996496200562, 1.035536289215088,
|
|
||||||
1.0332990884780884, 1.0314356088638306, 1.0295703411102295, 1.0280787944793701,
|
|
||||||
1.026213526725769, 1.0243501663208008, 1.0221129655838013, 1.0202475786209106,
|
|
||||||
1.0187561511993408, 1.0165188312530518, 1.015027403831482, 1.0127902030944824,
|
|
||||||
1.011298656463623, 1.0090614557266235, 1.006824254989624, 1.0053327083587646,
|
|
||||||
1.0038412809371948, 1.0016040802001953, 1.000112533569336, 0.9978753328323364,
|
|
||||||
0.9956381320953369, 0.994518518447876, 0.9922813177108765, 0.9900440573692322,
|
|
||||||
0.9885525703430176, 0.987061083316803, 0.9851957559585571, 0.9833323955535889,
|
|
||||||
0.981467068195343, 0.9799755811691284, 0.9777383804321289, 0.9762468934059143,
|
|
||||||
0.9743815660476685, 0.9728900790214539, 0.9710266590118408, 0.969535231590271,
|
|
||||||
0.9672979712486267, 0.9654326438903809, 0.9635692834854126, 0.9617039561271667,
|
|
||||||
0.9602124691009521, 0.9583491086959839
|
|
||||||
],
|
|
||||||
"dev": 4,
|
|
||||||
"shot": 4712,
|
|
||||||
"time": [
|
|
||||||
-8000, -7987.099999999999, -7974.2, -7961.299999999999, -7948.400000000001, -7935.5, -7922.6,
|
|
||||||
-7909.7, -7896.8, -7883.9, -7871, -7858.1, -7845.2, -7832.3, -7819.4, -7806.5,
|
|
||||||
-7793.599999999999, -7780.700000000001, -7767.8, -7754.900000000001, -7742,
|
|
||||||
-7729.099999999999, -7716.2, -7703.299999999999, -7690.400000000001, -7677.5, -7664.6,
|
|
||||||
-7651.7, -7638.8, -7625.9, -7613, -7600.1, -7587.2, -7574.3, -7561.4, -7548.5,
|
|
||||||
-7535.599999999999, -7522.700000000001, -7509.8, -7496.900000000001, -7484,
|
|
||||||
-7471.099999999999, -7458.2, -7445.299999999999, -7432.400000000001, -7419.5, -7406.6,
|
|
||||||
-7393.7, -7380.8, -7367.9, -7355, -7342.1, -7329.2, -7316.3, -7303.4, -7290.5,
|
|
||||||
-7277.599999999999, -7264.700000000001, -7251.8, -7238.900000000001, -7226,
|
|
||||||
-7213.099999999999, -7200.2, -7187.299999999999, -7174.400000000001, -7161.5, -7148.6,
|
|
||||||
-7135.7, -7122.8, -7109.9, -7097, -7084.1, -7071.2, -7058.3, -7045.4, -7032.5,
|
|
||||||
-7019.599999999999, -7006.700000000001, -6993.8, -6980.900000000001, -6968,
|
|
||||||
-6955.099999999999, -6942.2, -6929.299999999999, -6916.400000000001, -6903.5, -6890.6,
|
|
||||||
-6877.7, -6864.8, -6851.9, -6839, -6826.1, -6813.2, -6800.3, -6787.4, -6774.5,
|
|
||||||
-6761.599999999999, -6748.700000000001, -6735.8, -6722.900000000001, -6710,
|
|
||||||
-6697.099999999999, -6684.2, -6671.299999999999, -6658.400000000001, -6645.5, -6632.6,
|
|
||||||
-6619.7, -6606.8, -6593.9, -6581, -6568.1, -6542.3, -6529.4, -6516.5, -6503.599999999999,
|
|
||||||
-6490.700000000001, -6477.8, -6464.9, -6452, -6439.099999999999, -6426.2, -6413.299999999999,
|
|
||||||
-6400.400000000001, -6387.5, -6374.6, -6361.7, -6348.8, -6335.9, -6323, -6310.1, -6297.2,
|
|
||||||
-6284.3, -6271.4, -6258.5, -6245.599999999999, -6232.700000000001, -6219.8, -6206.9, -6194,
|
|
||||||
-6181.099999999999, -6168.2, -6155.3, -6142.400000000001, -6129.5, -6116.6, -6103.7, -6090.8,
|
|
||||||
-6077.9, -6065, -6052.1, -6039.2, -6026.3, -6013.4, -6000.5, -5987.599999999999,
|
|
||||||
-5974.700000000001, -5961.8, -5948.9, -5936, -5923.099999999999, -5910.2, -5897.3,
|
|
||||||
-5884.400000000001, -5871.5, -5858.6, -5845.7, -5832.8, -5819.9, -5807, -5794.1, -5781.2,
|
|
||||||
-5768.3, -5755.4, -5742.5, -5729.599999999999, -5716.700000000001, -5703.8, -5690.9, -5678,
|
|
||||||
-5665.099999999999, -5652.2, -5639.3, -5626.400000000001, -5613.5, -5600.6, -5587.7, -5574.8,
|
|
||||||
-5561.9, -5549, -5536.1, -5523.2, -5510.3, -5497.4, -5484.5, -5471.599999999999,
|
|
||||||
-5458.700000000001, -5445.8, -5432.9, -5420, -5407.099999999999, -5394.2, -5381.3,
|
|
||||||
-5368.400000000001, -5355.5, -5342.6, -5329.7, -5316.8, -5303.9, -5291, -5278.1, -5265.2,
|
|
||||||
-5252.3, -5239.4, -5226.5, -5213.599999999999, -5200.700000000001, -5187.8, -5174.9, -5162,
|
|
||||||
-5149.099999999999, -5136.2, -5123.3, -5097.5, -5084.6, -5071.7, -5058.8, -5045.9, -5033,
|
|
||||||
-5020.1, -5007.2, -4994.3, -4981.4, -4968.5, -4955.599999999999, -4942.700000000001, -4929.8,
|
|
||||||
-4916.9, -4904, -4891.099999999999, -4878.2, -4865.3, -4852.400000000001, -4839.5, -4826.6,
|
|
||||||
-4813.7, -4800.8, -4787.9, -4775, -4762.1, -4749.2, -4736.3, -4723.4, -4710.5, -4697.6,
|
|
||||||
-4684.700000000001, -4671.8, -4658.9, -4646, -4633.099999999999, -4620.2, -4607.3,
|
|
||||||
-4594.400000000001, -4581.5, -4568.6, -4555.7, -4542.799999999999, -4529.9, -4517, -4504.1,
|
|
||||||
-4491.2, -4478.3, -4465.4, -4452.5, -4439.6, -4426.700000000001, -4413.8, -4400.9, -4388,
|
|
||||||
-4375.099999999999, -4362.2, -4349.3, -4336.400000000001, -4323.5, -4310.6, -4297.7,
|
|
||||||
-4284.799999999999, -4271.9, -4259, -4246.1, -4233.2, -4220.3, -4207.4, -4194.5, -4181.6,
|
|
||||||
-4168.700000000001, -4155.8, -4142.9, -4130, -4117.099999999999, -4104.2, -4091.3, -4078.4,
|
|
||||||
-4065.5, -4052.6, -4039.7, -4026.7999999999997, -4013.8999999999996, -4001.0000000000005,
|
|
||||||
-3988.1000000000004, -3975.2000000000003, -3962.2999999999997, -3949.3999999999996, -3936.5,
|
|
||||||
-3923.6, -3910.7, -3897.8, -3884.9, -3872, -3859.1000000000004, -3846.2000000000003,
|
|
||||||
-3833.2999999999997, -3820.3999999999996, -3807.5, -3794.6, -3781.7, -3768.8, -3755.9, -3743,
|
|
||||||
-3730.1000000000004, -3717.2000000000003, -3704.2999999999997, -3691.3999999999996, -3678.5,
|
|
||||||
-3652.7, -3639.8, -3626.9, -3614, -3601.1000000000004, -3588.2000000000003,
|
|
||||||
-3575.2999999999997, -3562.3999999999996, -3549.5, -3536.6, -3523.7, -3510.8, -3497.9, -3485,
|
|
||||||
-3472.1000000000004, -3459.2000000000003, -3446.2999999999997, -3433.3999999999996, -3420.5,
|
|
||||||
-3407.6, -3394.7, -3381.8, -3368.9, -3356, -3343.1000000000004, -3330.2000000000003,
|
|
||||||
-3317.2999999999997, -3304.3999999999996, -3291.5, -3278.6, -3265.7, -3252.8, -3239.9, -3227,
|
|
||||||
-3214.1000000000004, -3201.2, -3188.2999999999997, -3175.3999999999996, -3162.5, -3149.6,
|
|
||||||
-3136.7, -3123.8, -3110.9, -3098, -3085.1000000000004, -3072.2, -3059.2999999999997, -3046.4,
|
|
||||||
-3033.5, -3020.6, -3007.7, -2994.8, -2981.9, -2969, -2956.1000000000004, -2943.2,
|
|
||||||
-2930.2999999999997, -2917.4, -2904.5, -2891.6, -2878.7, -2865.8, -2852.9, -2840,
|
|
||||||
-2827.1000000000004, -2814.2, -2801.2999999999997, -2788.4, -2775.5, -2762.6, -2749.7,
|
|
||||||
-2736.8, -2723.9, -2711, -2698.1000000000004, -2685.2, -2672.2999999999997, -2659.4, -2646.5,
|
|
||||||
-2633.6, -2620.7, -2607.8, -2594.9, -2582, -2569.1000000000004, -2556.2, -2543.2999999999997,
|
|
||||||
-2530.4, -2517.5, -2504.6, -2491.7, -2478.8, -2465.9, -2453, -2440.1000000000004, -2427.2,
|
|
||||||
-2414.2999999999997, -2401.4, -2388.5, -2375.6, -2362.7, -2349.8, -2336.9, -2324,
|
|
||||||
-2311.1000000000004, -2298.2, -2285.2999999999997, -2272.4, -2259.5, -2246.6, -2233.7,
|
|
||||||
-2207.9, -2195, -2182.1000000000004, -2169.2, -2156.2999999999997, -2143.4, -2130.5, -2117.6,
|
|
||||||
-2104.7, -2091.8, -2078.9, -2066, -2053.1000000000004, -2040.2, -2027.3, -2014.4, -2001.5,
|
|
||||||
-1988.6, -1975.7, -1962.8000000000002, -1949.8999999999999, -1937, -1924.1, -1911.2,
|
|
||||||
-1898.3000000000002, -1885.3999999999999, -1872.5, -1859.6, -1846.7, -1833.8000000000002,
|
|
||||||
-1820.8999999999999, -1808, -1795.1, -1782.2, -1769.3000000000002, -1756.3999999999999,
|
|
||||||
-1743.5, -1730.6, -1717.7, -1704.8000000000002, -1691.8999999999999, -1679, -1666.1, -1653.2,
|
|
||||||
-1640.3000000000002, -1627.3999999999999, -1614.5, -1601.6, -1588.7, -1575.8000000000002,
|
|
||||||
-1562.8999999999999, -1550, -1537.1, -1524.2, -1511.3000000000002, -1498.3999999999999,
|
|
||||||
-1485.5, -1472.6, -1459.7, -1446.8000000000002, -1433.8999999999999, -1421, -1408.1, -1395.2,
|
|
||||||
-1382.3000000000002, -1369.3999999999999, -1356.5, -1343.6, -1330.7, -1317.8000000000002,
|
|
||||||
-1304.8999999999999, -1292, -1279.1, -1266.2, -1253.3000000000002, -1240.3999999999999,
|
|
||||||
-1227.5, -1214.6, -1201.7, -1188.8000000000002, -1175.8999999999999, -1163, -1150.1, -1137.2,
|
|
||||||
-1124.3000000000002, -1111.3999999999999, -1098.5, -1085.6, -1072.7, -1059.8000000000002,
|
|
||||||
-1046.8999999999999, -1034, -1021.0999999999999, -1008.1999999999999, -995.3,
|
|
||||||
-982.4000000000001, -969.5, -956.6, -943.6999999999999, -930.8, -917.9000000000001, -905,
|
|
||||||
-892.1, -879.1999999999999, -866.3, -853.4000000000001, -840.5, -827.6, -814.6999999999999,
|
|
||||||
-801.8, -788.9000000000001, -763.1, -750.1999999999999, -737.3, -724.4000000000001, -711.5,
|
|
||||||
-698.6, -685.6999999999999, -672.8, -659.9000000000001, -647, -634.1, -621.1999999999999,
|
|
||||||
-608.3, -595.4000000000001, -582.5, -569.6, -556.6999999999999, -543.8, -530.9000000000001,
|
|
||||||
-518, -505.09999999999997, -492.20000000000005, -479.3, -466.4, -453.5, -440.59999999999997,
|
|
||||||
-427.70000000000005, -414.8, -401.9, -389, -376.09999999999997, -363.20000000000005, -350.3,
|
|
||||||
-337.4, -324.5, -311.59999999999997, -298.70000000000005, -285.8, -272.9, -260, -247.1,
|
|
||||||
-234.2, -221.29999999999998, -208.4, -195.5, -182.60000000000002, -169.7, -156.79999999999998,
|
|
||||||
-143.9, -131, -118.1, -105.2, -92.3, -79.39999999999999, -66.5, -53.6, -40.7,
|
|
||||||
-27.799999999999997, -14.9, -2, 10.9, 23.8, 36.7, 49.6, 62.5, 75.39999999999999, 88.3, 101.2,
|
|
||||||
114.1, 127, 139.9, 152.79999999999998, 165.7, 178.60000000000002, 191.5, 204.4,
|
|
||||||
217.29999999999998, 230.2, 243.10000000000002, 256, 268.9, 281.8, 294.70000000000005,
|
|
||||||
307.59999999999997, 320.5, 333.4, 346.3, 359.20000000000005, 372.09999999999997, 385, 397.9,
|
|
||||||
410.8, 423.70000000000005, 436.59999999999997, 449.5, 462.4, 475.3, 488.20000000000005,
|
|
||||||
501.09999999999997, 514, 526.9000000000001, 539.8, 552.6999999999999, 565.6, 578.5,
|
|
||||||
591.4000000000001, 604.3, 617.1999999999999, 630.1, 643, 655.9000000000001, 681.6999999999999,
|
|
||||||
694.6, 707.5, 720.4000000000001, 733.3, 746.1999999999999, 759.1, 772, 784.9000000000001,
|
|
||||||
797.8, 810.6999999999999, 823.6, 836.5, 849.4000000000001, 862.3, 875.1999999999999, 888.1,
|
|
||||||
901, 913.9000000000001, 926.8, 939.6999999999999, 952.6, 965.5, 978.4000000000001, 991.3,
|
|
||||||
1004.1999999999999, 1017.0999999999999, 1030, 1042.8999999999999, 1055.8000000000002, 1068.7,
|
|
||||||
1081.6, 1094.5, 1107.3999999999999, 1120.3000000000002, 1133.2, 1146.1, 1159,
|
|
||||||
1171.8999999999999, 1184.8000000000002, 1197.7, 1210.6, 1223.5, 1236.3999999999999,
|
|
||||||
1249.3000000000002, 1262.2, 1275.1, 1288, 1300.8999999999999, 1313.8000000000002, 1326.7,
|
|
||||||
1339.6, 1352.5, 1365.3999999999999, 1378.3000000000002, 1391.2, 1404.1, 1417,
|
|
||||||
1429.8999999999999, 1442.8000000000002, 1455.7, 1468.6, 1481.5, 1494.3999999999999,
|
|
||||||
1507.3000000000002, 1520.2, 1533.1, 1546, 1558.8999999999999, 1571.8000000000002, 1584.7,
|
|
||||||
1597.6, 1610.5, 1623.3999999999999, 1636.3000000000002, 1649.2, 1662.1, 1675,
|
|
||||||
1687.8999999999999, 1700.8000000000002, 1713.7, 1726.6, 1739.5, 1752.3999999999999,
|
|
||||||
1765.3000000000002, 1778.2, 1791.1, 1804, 1816.8999999999999, 1829.8000000000002, 1842.7,
|
|
||||||
1855.6, 1868.5, 1881.3999999999999, 1894.3000000000002, 1907.2, 1920.1, 1933,
|
|
||||||
1945.8999999999999, 1958.8000000000002, 1971.7, 1984.6, 1997.5, 2010.4, 2023.3, 2036.2,
|
|
||||||
2049.1000000000004, 2062, 2074.9, 2087.8, 2100.7, 2126.5, 2139.4, 2152.2999999999997, 2165.2,
|
|
||||||
2178.1000000000004, 2191, 2203.9, 2216.8, 2229.7, 2242.6, 2255.5, 2268.4, 2281.2999999999997,
|
|
||||||
2294.2, 2307.1000000000004, 2320, 2332.9, 2345.8, 2358.7, 2371.6, 2384.5, 2397.4,
|
|
||||||
2410.2999999999997, 2423.2, 2436.1000000000004, 2449, 2461.9, 2474.8, 2487.7, 2500.6, 2513.5,
|
|
||||||
2526.4, 2539.2999999999997, 2552.2, 2565.1000000000004, 2578, 2590.9, 2603.8, 2616.7, 2629.6,
|
|
||||||
2642.5, 2655.4, 2668.2999999999997, 2681.2, 2694.1000000000004, 2707, 2719.9, 2732.8, 2745.7,
|
|
||||||
2758.6, 2771.5, 2784.4, 2797.2999999999997, 2810.2, 2823.1000000000004, 2836, 2848.9, 2861.8,
|
|
||||||
2874.7, 2887.6, 2900.5, 2913.4, 2926.2999999999997, 2939.2, 2952.1000000000004, 2965, 2977.9,
|
|
||||||
2990.8, 3003.7, 3016.6, 3029.5, 3042.4, 3055.2999999999997, 3068.2, 3081.1000000000004, 3094,
|
|
||||||
3106.9, 3119.8, 3132.7, 3145.6, 3158.5, 3171.4, 3184.2999999999997, 3197.2,
|
|
||||||
3210.1000000000004, 3223, 3235.9, 3248.8, 3261.7, 3274.6, 3287.5, 3300.3999999999996,
|
|
||||||
3313.2999999999997, 3326.2, 3339.1000000000004, 3352, 3364.9, 3377.8, 3390.7, 3403.6, 3416.5,
|
|
||||||
3429.3999999999996, 3442.2999999999997, 3455.2000000000003, 3468.1000000000004, 3481, 3493.9,
|
|
||||||
3506.8, 3519.7, 3532.6, 3545.5, 3571.2999999999997, 3584.2000000000003, 3597.1000000000004,
|
|
||||||
3610, 3622.9, 3635.8, 3648.7, 3661.6, 3674.5, 3687.3999999999996, 3700.2999999999997,
|
|
||||||
3713.2000000000003, 3726.1000000000004, 3739, 3751.9, 3764.8, 3777.7, 3790.6, 3803.5,
|
|
||||||
3816.3999999999996, 3829.2999999999997, 3842.2000000000003, 3855.1000000000004, 3868, 3880.9,
|
|
||||||
3893.8, 3906.7, 3919.6, 3932.5, 3945.3999999999996, 3958.2999999999997, 3971.2000000000003,
|
|
||||||
3984.1000000000004, 3997, 4009.9, 4022.8, 4035.7000000000003, 4048.6000000000004,
|
|
||||||
4061.4999999999995, 4074.3999999999996, 4087.2999999999997, 4100.2, 4113.1, 4126, 4138.9,
|
|
||||||
4151.799999999999, 4164.7, 4177.6, 4190.5, 4203.400000000001, 4216.3, 4229.2,
|
|
||||||
4242.099999999999, 4255, 4267.9, 4280.8, 4293.700000000001, 4306.6, 4319.5, 4332.4, 4345.3,
|
|
||||||
4358.2, 4371.1, 4384, 4396.9, 4409.799999999999, 4422.7, 4435.6, 4448.5, 4461.400000000001,
|
|
||||||
4474.3, 4487.2, 4500.099999999999, 4513, 4525.9, 4538.8, 4551.700000000001, 4564.6, 4577.5,
|
|
||||||
4590.4, 4603.3, 4616.2, 4629.1, 4642, 4654.9, 4667.799999999999, 4680.7, 4693.6, 4706.5,
|
|
||||||
4719.400000000001, 4732.3, 4745.2, 4758.099999999999, 4771, 4783.9, 4796.8, 4809.700000000001,
|
|
||||||
4822.6, 4835.5, 4848.4, 4861.3, 4874.2, 4887.1, 4900, 4912.9, 4925.8, 4938.7, 4951.6, 4964.5,
|
|
||||||
4977.400000000001, 4990.3
|
|
||||||
],
|
|
||||||
"time_unit": "ms"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -23,6 +23,7 @@ export type {
|
|||||||
WaveformLegendOrientation,
|
WaveformLegendOrientation,
|
||||||
WaveformLegendOptions,
|
WaveformLegendOptions,
|
||||||
WaveformFrameStyle,
|
WaveformFrameStyle,
|
||||||
|
WaveformAxesOptions,
|
||||||
WaveformZeroLineOptions,
|
WaveformZeroLineOptions,
|
||||||
// 数据类型
|
// 数据类型
|
||||||
SingleWaveformData,
|
SingleWaveformData,
|
||||||
|
|||||||
@@ -130,6 +130,10 @@ body {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grid-line-control--switch-only {
|
||||||
|
grid-template-columns: minmax(0, 1fr) auto;
|
||||||
|
}
|
||||||
|
|
||||||
.grid-line-color-picker,
|
.grid-line-color-picker,
|
||||||
.grid-line-color-picker .vc-color-wrap {
|
.grid-line-color-picker .vc-color-wrap {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ export type WaveformLegendOrientation = 'auto' | 'horizontal' | 'vertical'
|
|||||||
/** Options shared by legends in every multi-series track. */
|
/** Options shared by legends in every multi-series track. */
|
||||||
export interface WaveformLegendOptions {
|
export interface WaveformLegendOptions {
|
||||||
position?: WaveformLegendPosition
|
position?: WaveformLegendPosition
|
||||||
|
/** Per-track position overrides keyed by trackId, or by series id when trackId is omitted. */
|
||||||
|
trackPositions?: Record<string, WaveformLegendPosition>
|
||||||
orientation?: WaveformLegendOrientation
|
orientation?: WaveformLegendOrientation
|
||||||
/** CSS color used by the legend panel; alpha controls background transparency. */
|
/** CSS color used by the legend panel; alpha controls background transparency. */
|
||||||
backgroundColor?: string
|
backgroundColor?: string
|
||||||
@@ -115,10 +117,20 @@ export interface WaveformLegendOptions {
|
|||||||
export interface WaveformFrameStyle {
|
export interface WaveformFrameStyle {
|
||||||
borderColor?: string
|
borderColor?: string
|
||||||
borderWidth?: number
|
borderWidth?: number
|
||||||
borderStyle?: 'solid' | 'dashed'
|
borderStyle?: 'solid' | 'dashed' | 'dotted'
|
||||||
backgroundColor?: string
|
backgroundColor?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Controls axis baseline visibility while preserving tick marks and axis text. */
|
||||||
|
export interface WaveformAxesOptions {
|
||||||
|
x?: {
|
||||||
|
lineVisible?: boolean
|
||||||
|
}
|
||||||
|
y?: {
|
||||||
|
lineVisible?: boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Styling and visibility options for the horizontal zero-value reference line. */
|
/** Styling and visibility options for the horizontal zero-value reference line. */
|
||||||
export interface WaveformZeroLineOptions {
|
export interface WaveformZeroLineOptions {
|
||||||
visible?: boolean
|
visible?: boolean
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ export type {
|
|||||||
WaveformLegendOrientation,
|
WaveformLegendOrientation,
|
||||||
WaveformLegendOptions,
|
WaveformLegendOptions,
|
||||||
WaveformFrameStyle,
|
WaveformFrameStyle,
|
||||||
|
WaveformAxesOptions,
|
||||||
WaveformZeroLineOptions,
|
WaveformZeroLineOptions,
|
||||||
} from './chart'
|
} from './chart'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user