waveform-analysis 0.1.75 → 0.1.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +183 -42
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/components/animation/context.d.ts +1 -0
- package/dist/types/components/animation/paginationPresentation.d.ts +7 -7
- package/dist/types/components/animation/useWaveformAnimations.d.ts +1 -18
- package/dist/types/components/core/amplitudeLimits.d.ts +6 -0
- package/dist/types/components/core/layout.d.ts +6 -9
- package/dist/types/components/core/trackLayoutBuilder.d.ts +3 -1
- package/dist/types/components/core/useWaveformChartController.d.ts +2 -19
- package/dist/types/components/core/useWaveformData.d.ts +2 -2
- package/dist/types/components/core/useWaveformMeasurements.d.ts +4 -1
- package/dist/types/components/core/waveformChartTypes.d.ts +4 -2
- package/dist/types/components/core/xAxisTicks.d.ts +2 -0
- package/dist/types/components/core/yAxisLayoutMetrics.d.ts +2 -1
- package/dist/types/components/core/yAxisTicks.d.ts +6 -0
- package/dist/types/components/data/types.d.ts +1 -1
- package/dist/types/components/interaction/integerZoom.d.ts +3 -3
- package/dist/types/components/interaction/stepZoom.d.ts +5 -0
- package/dist/types/components/interaction/useWaveformViewport.d.ts +0 -3
- package/dist/types/components/interaction/useWaveformZoom.d.ts +0 -2
- package/dist/types/components/rendering/WaveformSeriesLayer.vue.d.ts +0 -1
- package/dist/types/components/rendering/WaveformTrack.vue.d.ts +0 -1
- package/dist/types/core/data.d.ts +1 -1
- package/dist/types/demo/DemoChartHost.vue.d.ts +1 -1
- package/dist/types/demo/remoteWaveformLoader.d.ts +23 -0
- package/dist/types/demo/types.d.ts +11 -2
- package/dist/types/demo/useRemoteWaveformWindow.d.ts +22 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types/chart.d.ts +8 -1
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/utils/formatters.d.ts +4 -4
- package/dist/types/utils/xAxisNumber.d.ts +2 -0
- package/package.json +1 -1
- package/src/App.vue +34 -100
- package/src/components/WaveformChartView.vue +0 -4
- package/src/components/animation/config.ts +1 -1
- package/src/components/animation/context.ts +9 -1
- package/src/components/animation/paginationPresentation.ts +55 -64
- package/src/components/animation/useWaveformAnimations.ts +36 -13
- package/src/components/controls/useChartCommands.ts +12 -13
- package/src/components/core/amplitudeLimits.ts +44 -0
- package/src/components/core/layout.ts +22 -34
- package/src/components/core/trackLayoutBuilder.ts +12 -5
- package/src/components/core/useWaveformChartController.ts +3 -4
- package/src/components/core/useWaveformChartLifecycle.ts +11 -2
- package/src/components/core/useWaveformData.ts +11 -5
- package/src/components/core/useWaveformLayout.ts +9 -4
- package/src/components/core/useWaveformMeasurements.ts +3 -0
- package/src/components/core/useWaveformYAxisLayout.ts +2 -0
- package/src/components/core/waveformChartTypes.ts +4 -1
- package/src/components/core/xAxisTicks.ts +69 -0
- package/src/components/core/yAxisLayoutMetrics.ts +4 -0
- package/src/components/core/yAxisTicks.ts +39 -0
- package/src/components/data/types.ts +2 -0
- package/src/components/interaction/integerZoom.ts +31 -12
- package/src/components/interaction/remoteViewport.ts +26 -4
- package/src/components/interaction/stepZoom.ts +33 -0
- package/src/components/interaction/useWaveformViewport.ts +3 -26
- package/src/components/interaction/useWaveformZoom.ts +50 -157
- package/src/components/interaction/zoomConstraints.ts +5 -5
- package/src/components/rendering/WaveformSeriesLayer.vue +1 -2
- package/src/components/rendering/WaveformTrack.vue +1 -6
- package/src/core/data.ts +5 -2
- package/src/data/simulatedWaveforms.ts +0 -10
- package/src/demo/DemoChartHost.vue +49 -4
- package/src/demo/remoteWaveformLoader.ts +114 -0
- package/src/demo/types.ts +11 -1
- package/src/demo/useRemoteWaveformWindow.ts +229 -0
- package/src/index.ts +2 -0
- package/src/types/chart.ts +10 -1
- package/src/types/index.ts +2 -0
- package/src/utils/formatters.ts +10 -5
- package/src/utils/xAxisNumber.ts +36 -0
- package/src/views/AnimationDemo.vue +14 -5
- package/dist/types/data/sx2Channel.d.ts +0 -10
- package/src/data/sx2Channel.ts +0 -315
package/README.md
CHANGED
|
@@ -6,26 +6,10 @@
|
|
|
6
6
|
组件使用不可变数据模型:替换 `data` 引用后会重新计算数据域和视口;大数据会按当前可见范围
|
|
7
7
|
和屏幕像素自动保峰降采样,而 tooltip、最近点查询和标注仍使用完整原始数据。
|
|
8
8
|
|
|
9
|
-
## 0.1.75:加入动画系统
|
|
10
|
-
|
|
11
|
-
本版本新增系列入场、数据更新、标注动画和分页淡入,动画默认开启。首次入场默认
|
|
12
|
-
1000ms,多系列交错100ms;数据更新、标注和分页淡入默认300ms,采用`cubicInOut`缓动。
|
|
13
|
-
切页仅淡入新页的波形、点、误差棒和标注,轴与网格立即更新;连续翻页只展示最新页。
|
|
14
|
-
|
|
15
|
-
通过`animation`、`animationUpdate`、`animationAnnotation`分别配置效果、时长、缓动和回调,
|
|
16
|
-
或设置`:animation-enabled="false"`恢复静态展示。支持31种D3缓动及公开动画引擎/预设接口。
|
|
17
|
-
总点数达到默认50,000阈值、系统启用减少动态效果或环境缺少RAF时自动静态展示。
|
|
18
|
-
动画不修改原始数据、秒坐标或受控标注;交互和图片导出先提交最终态。
|
|
19
|
-
|
|
20
|
-
详细用法见下文[动画](#动画),本次变更见[0.1.75发布说明](RELEASE_NOTES.md)。
|
|
21
|
-
|
|
22
9
|
## 在线示例
|
|
23
10
|
|
|
24
11
|
线上 Demo:[波形分析组件在线示例](https://lqycustomsite.online/waveform-analysis/)。
|
|
25
12
|
|
|
26
|
-
综合示例第 11 个图框展示实测电压通道 `SX2_7_01`(炮号 `13300`),保留全部 1,000 个
|
|
27
|
-
原始采样点。默认每页四个图框,在第 3 页查看;原始毫秒时间转换为秒坐标后传入组件。
|
|
28
|
-
|
|
29
13
|
## 特性
|
|
30
14
|
|
|
31
15
|
- Vue 3 Composition API + TypeScript,支持按需导入 `WaveformChart`
|
|
@@ -38,7 +22,7 @@
|
|
|
38
22
|
- 多系列图例、受控显隐、网格分页和最多四根 Y 轴
|
|
39
23
|
- 自动 Y 轴范围,以及全局、按轨道或按系列配置的固定振幅范围
|
|
40
24
|
- 按轨道控制水平/垂直网格线的显隐与颜色
|
|
41
|
-
-
|
|
25
|
+
- 系列入场、数据更新、标注动画及分页/网格入场重播,支持独立配置与静态降级
|
|
42
26
|
- 受控标注、右键编辑、拖拽避让和自定义颜色
|
|
43
27
|
- 标题、图框、坐标轴、零值参考线、净图和渲染参数可配置
|
|
44
28
|
|
|
@@ -124,7 +108,7 @@ const data = ref<WaveformData>({
|
|
|
124
108
|
}"
|
|
125
109
|
:animation-update="{ enabled: true, duration: 300, easing: 'cubicInOut' }"
|
|
126
110
|
:animation-annotation="{ enabled: true, type: 'bounce' }"
|
|
127
|
-
:animation-threshold="
|
|
111
|
+
:animation-threshold="200000"
|
|
128
112
|
/>
|
|
129
113
|
```
|
|
130
114
|
|
|
@@ -133,7 +117,7 @@ const data = ref<WaveformData>({
|
|
|
133
117
|
可显式覆盖。分类 `enabled: false` 只结束该类,恢复不重播;运行中修改时长/效果只影响
|
|
134
118
|
下次任务。`duration: 0` 同步到终态并忽略该阶段的延迟/交错。
|
|
135
119
|
|
|
136
|
-
总有效规范化点数 **>= threshold** 时静态,默认 threshold=
|
|
120
|
+
总有效规范化点数 **>= threshold** 时静态,默认 threshold=200000,0 始终静态。
|
|
137
121
|
计数包括隐藏及非当前页系列,通过 source.length 读取,不按采样点数计算。
|
|
138
122
|
系统减少动态效果、缺少 RAF 或导出期间同样静态。页面后台暂停,返回扣除后台时间。
|
|
139
123
|
|
|
@@ -143,10 +127,15 @@ const data = ref<WaveformData>({
|
|
|
143
127
|
交互、视口命令、布局变化及 PNG/SVG 导出先提交最新最终态;导出不等待无限动画,仍遵守
|
|
144
128
|
原有 busy/stale/cancelled/timeout 错误契约和 5 秒上限。Demo `#/animation` 提供分类和效果控制。
|
|
145
129
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
130
|
+
切换到不同分页或修改网格行列数(包括 1×2)时,目标页重播首次加载的波形绘制动画,
|
|
131
|
+
曲线、散点和误差棒一起逐步出现,标注等待对应系列绘制完成,坐标轴与网格立即更新。
|
|
132
|
+
这些操作复用 `animation` 的开关、方向、缓动、延迟及多系列交错配置
|
|
133
|
+
(默认从左向右、cubicInOut,系列间隔100ms)。分页的单系列绘制时长固定为500ms;
|
|
134
|
+
首次加载与网格调整仍使用 `animation.duration`(默认1000ms)。`animationUpdate` 只控制数据更新。
|
|
135
|
+
关闭入场类别或设置 `duration: 0` 直接显示完整新页;全局静态降级同样生效。
|
|
136
|
+
连续翻页或调整网格只播放最终目标,不重新请求数据、不做跨页形变;返回已访问页也重播,
|
|
137
|
+
同页点击和相同网格尺寸不触发。网格调整引起的页码重置合并为一次重播,其他自动页码重置、
|
|
138
|
+
resize及其他展示设置变化仍静态处理。
|
|
150
139
|
|
|
151
140
|
### 高级数值引擎
|
|
152
141
|
|
|
@@ -311,13 +300,14 @@ controller.destroy() // 仅清理此 owner,不销毁共享 animator
|
|
|
311
300
|
| `pannable` | `boolean` | `false` | 空格拖拽平移开关 |
|
|
312
301
|
| `panXDomain` | `[number, number]` | 未设置 | 远端横向平移边界,使用秒坐标 |
|
|
313
302
|
| `minZoomSpan` | `number` | 未设置 | 最小缩放跨度,使用原始 X 数据单位 |
|
|
314
|
-
| `integerZoom` | `boolean` | `false` |
|
|
303
|
+
| `integerZoom` | `boolean` | `false` | 优先对齐整数,小于一个显示单位时保留小数 |
|
|
315
304
|
| `minVisiblePoints` | `number` | `0` | 缩放后至少保留的不同 X 坐标数 |
|
|
316
305
|
| `maxZoomScale` | `number \| null` | 未设置 | 最大缩放倍数;`null` 表示不限制 |
|
|
317
306
|
| `initialXDomain` | `[number, number]` | 未设置 | 所有图框的初始 X 范围(可超出数据,空白显示) |
|
|
318
307
|
| `initialXDomains` | `Record<string, [number, number]>` | 未设置 | 按 track/series ID 配置初始范围(可超出数据) |
|
|
319
308
|
| `xDomainStrategy` | `WaveformXDomainStrategy` | `{ type: 'integer-ms' }` | 自动 X 轴视口范围策略 |
|
|
320
309
|
| `yDomain` | `[number, number]` | 未设置 | 所有波形的固定 Y 轴范围 |
|
|
310
|
+
| `amplitudeLimits` | `WaveformAmplitudeLimits` | 未设置 | 按 normalized series ID 配置严格幅值边界 |
|
|
321
311
|
| `yDomains` | `Record<string, [number, number]>` | 未设置 | 按 track/series ID 配置固定范围 |
|
|
322
312
|
| `grid` | `WaveformGridOptions` | `{ rowCount: 2, columnCount: 1, showPagination: true, fillIncompleteLastRow: false }` | 网格和分页 |
|
|
323
313
|
| `axes` | `WaveformAxesOptions` | 轴线均显示 | X/Y 轴基线、Y 轴分割数与 X 轴 label 格式化 |
|
|
@@ -461,6 +451,45 @@ import 'waveform-analysis/style.css'
|
|
|
461
451
|
固定范围存在时,对应图框的 Y 轴不会被平移或视口重置覆盖;X 轴缩放、平移和重置保持原有
|
|
462
452
|
行为。运行时更新或移除 `yDomain` / `yDomains` 会立即重新布局,移除后恢复自动范围。
|
|
463
453
|
|
|
454
|
+
### 严格幅值显示上下限
|
|
455
|
+
|
|
456
|
+
`amplitudeLimits?: WaveformAmplitudeLimits` 按稳定的**规范化 series ID** 设置幅值显示边界,
|
|
457
|
+
不是按 `trackId` 配置,也不绘制阈值线。组件导出以下类型:
|
|
458
|
+
|
|
459
|
+
```ts
|
|
460
|
+
import type { WaveformAmplitudeLimit, WaveformAmplitudeLimits } from 'waveform-analysis'
|
|
461
|
+
|
|
462
|
+
// WaveformAmplitudeLimit = { lower?: number; upper?: number }
|
|
463
|
+
const amplitudeLimits: WaveformAmplitudeLimits = {
|
|
464
|
+
voltage: { lower: -73, upper: 86 },
|
|
465
|
+
current: { upper: 0 },
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
```vue
|
|
470
|
+
<WaveformChart :data="chartData" :amplitude-limits="amplitudeLimits" />
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
每边可选,`0` 有效;非有限值视为该边未配置。两个有效边界相等或倒置时,整个系列配置
|
|
474
|
+
停用,恢复原来的 `yDomain` / `yDomains` 或自动范围逻辑。
|
|
475
|
+
|
|
476
|
+
有效限幅优先于旧固定范围和手动 Y 视口:配置侧覆盖自动边界并关闭该侧留白,未配置侧
|
|
477
|
+
继续根据完整数据(含启用的误差棒)计算自动范围、留白和 nice 刻度。默认启用 nice,
|
|
478
|
+
但仅允许未配置侧向外扩展;双边 `[-73, 86]` 始终保持原端点,主刻度在其内部按漂亮步长
|
|
479
|
+
生成,边界不必是主刻度。`axes.y.nice: false` 时仍在最终范围上使用线性等分刻度。
|
|
480
|
+
|
|
481
|
+
单边限幅导致自动侧与配置侧相等或倒置时,只调整自动侧。回退跨度取原自动范围跨度、
|
|
482
|
+
配置值绝对值的 10%、`1` 三者的最大值。缩放、平移、复位、分页和替换 `data` 均不会覆盖
|
|
483
|
+
配置边界;有限幅时未配置侧始终自动计算。替换或移除配置立即生效。
|
|
484
|
+
|
|
485
|
+
共享 Y 轴按可见系列的有效配置合并:下限取最小值,上限取最大值,仅启用存在的边。
|
|
486
|
+
多值轴按各自系列配置;复用同一根轴的系列也按此规则合并。合并后的双边相等或倒置时
|
|
487
|
+
该轴限幅停用。全部系列隐藏时沿用组件按完整系列保留轴范围的规则;空数据沿用原来的
|
|
488
|
+
默认处理,不创建额外坐标轴。
|
|
489
|
+
|
|
490
|
+
越界曲线仅在绘图区裁剪,原始输入、完整规范化数据及数据导出不受影响。标签测量、轴槽
|
|
491
|
+
空间和实际渲染使用同一套范围及刻度规则。未使用有效限幅时,旧 API 的行为保持兼容。
|
|
492
|
+
|
|
464
493
|
### Y 轴自动等分
|
|
465
494
|
|
|
466
495
|
Y 轴默认显示 5 个主刻度(包含上下端点),并使用类似 ECharts 的 `1 / 2 / 5 × 10ⁿ` 漂亮
|
|
@@ -494,9 +523,103 @@ Y 轴会独立计算:
|
|
|
494
523
|
|
|
495
524
|
### 缩放后按可视区间加载数据
|
|
496
525
|
|
|
526
|
+
主 demo 已接入可替换的异步加载器:首次加载、缩放结束、平移结束和重置均通过同一接口
|
|
527
|
+
回填数据。默认模拟延迟为 80ms;加载期间显示状态,失败时显示错误并可重试当前范围。
|
|
528
|
+
请求使用 `AbortController` 取消,并校验请求版本,取消未生效的旧响应也不会覆盖新视口。
|
|
529
|
+
独立图框按稳定 `seriesIds` 分别合并,同次多图框命令可加载所有目标。
|
|
530
|
+
|
|
531
|
+
记录全域通过 `panXDomain` 固定;`initialXDomain` 是首次及重置窗口,可以是全域的一部分。
|
|
532
|
+
它们都不随响应的采样密度、覆盖范围或空结果变化。配置有效 `panXDomain` 时,空系列保留
|
|
533
|
+
身份、图框及交互能力,未加载区域可以继续缩放和平移;本地模式仍使用既有空数据行为。
|
|
534
|
+
公开 `normalizeWaveformSeries` 的空系列过滤行为不变。
|
|
535
|
+
|
|
536
|
+
远程 demo 默认开启整数缩放,使用
|
|
537
|
+
`xDomainStrategy: { type: 'integer-ms', includeExplicit: true }` 在首次显示及重置时向外扩展
|
|
538
|
+
整数毫秒范围;跨度达到一个显示单位时缩放优先对齐整数,小于一个显示单位时保留小数。
|
|
539
|
+
回填和单位切换不会重新对齐当前视口,平移保持窗口跨度。
|
|
540
|
+
Demo 的 `panXDomain` 同样使用扩展后的记录范围,避免尺寸变化或视口恢复将整数端点裁回
|
|
541
|
+
原始采样端点;加载器元数据和采样坐标仍保留原值。
|
|
542
|
+
它还设置 `minVisiblePoints: 2`、`maxZoomScale: null`,在已加载窗口内缩到两个真实采样点后停止放大。
|
|
543
|
+
最小跨度从完整模拟记录的相邻采样间隔固定计算,不会根据回填的点数重新计算;未加载或不足两点的
|
|
544
|
+
远程窗口仍沿用最小跨度限制。真实后端应通过元数据提供最小跨度;等间隔采样若至少需要 N 点,
|
|
545
|
+
可使用 `(N - 1) * sampleIntervalSeconds`。后端抽稀时不宜用返回点数限制原始采样尺度的进一步放大。
|
|
546
|
+
|
|
547
|
+
仓库内的 demo 接入方式如下。以下 composable 和加载器属于 demo 辅助模块,不是包的公开导出:
|
|
548
|
+
|
|
549
|
+
```vue
|
|
550
|
+
<script setup lang="ts">
|
|
551
|
+
import { computed, onMounted, ref, shallowRef } from 'vue'
|
|
552
|
+
import { WaveformChart } from '@/index'
|
|
553
|
+
import { createSimulatedWaveformData } from '@/data/simulatedWaveforms'
|
|
554
|
+
import { createMockWindowLoader } from '@/demo/remoteWaveformLoader'
|
|
555
|
+
import { useRemoteWaveformWindow } from '@/demo/useRemoteWaveformWindow'
|
|
556
|
+
import { applyXDomainStrategy } from '@/components/core/xDomain'
|
|
557
|
+
|
|
558
|
+
const chart = ref<{ resetViewport: (trackIndex?: number) => void }>()
|
|
559
|
+
const record = shallowRef(createSimulatedWaveformData())
|
|
560
|
+
const xDomainStrategy = { type: 'integer-ms' as const, includeExplicit: true }
|
|
561
|
+
const {
|
|
562
|
+
chartData,
|
|
563
|
+
recordDomain,
|
|
564
|
+
initialXDomain,
|
|
565
|
+
minZoomSpan,
|
|
566
|
+
loading,
|
|
567
|
+
errors,
|
|
568
|
+
handleZoomIntent,
|
|
569
|
+
handleZoomChange,
|
|
570
|
+
handleZoomEnd,
|
|
571
|
+
handlePanEnd,
|
|
572
|
+
resetWaveformViewport,
|
|
573
|
+
retry,
|
|
574
|
+
} = useRemoteWaveformWindow(record, {
|
|
575
|
+
loadWindow: createMockWindowLoader(() => record.value, { delayMs: 80 }),
|
|
576
|
+
resetViewport: (index) => chart.value?.resetViewport(index),
|
|
577
|
+
})
|
|
578
|
+
const panXDomain = computed(() => applyXDomainStrategy(recordDomain.value, xDomainStrategy, true))
|
|
579
|
+
onMounted(() => void resetWaveformViewport())
|
|
580
|
+
</script>
|
|
581
|
+
|
|
582
|
+
<template>
|
|
583
|
+
<p v-if="loading" role="status">正在加载当前时间范围…</p>
|
|
584
|
+
<p v-if="errors.length" role="alert">
|
|
585
|
+
{{ errors.join(';') }}
|
|
586
|
+
<button :disabled="loading" @click="retry()">重试</button>
|
|
587
|
+
</p>
|
|
588
|
+
<WaveformChart
|
|
589
|
+
ref="chart"
|
|
590
|
+
:data="chartData"
|
|
591
|
+
:pan-x-domain="panXDomain"
|
|
592
|
+
:initial-x-domain="initialXDomain"
|
|
593
|
+
:min-zoom-span="minZoomSpan"
|
|
594
|
+
:min-visible-points="2"
|
|
595
|
+
:max-zoom-scale="null"
|
|
596
|
+
:integer-zoom="false"
|
|
597
|
+
:x-domain-strategy="xDomainStrategy"
|
|
598
|
+
pannable
|
|
599
|
+
@zoom-intent="handleZoomIntent"
|
|
600
|
+
@zoom-change="handleZoomChange"
|
|
601
|
+
@zoom-end="handleZoomEnd"
|
|
602
|
+
@pan-end="handlePanEnd"
|
|
603
|
+
@zoom-reset="resetWaveformViewport"
|
|
604
|
+
/>
|
|
605
|
+
</template>
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
加载器签名为 `loadWindow({ start, end, seriesIds? }, signal): Promise<WaveformData>`,
|
|
609
|
+
坐标和事件端点始终是秒。模拟加载器还支持 `empty`、`fail` 和 `delayMs`,既可以传固定值,
|
|
610
|
+
也可以传按请求计算的函数,以验证空响应、失败和乱序。
|
|
611
|
+
主 demo 可通过 Vue `provide(remoteWindowLoaderKey, loadWindow)` 注入替代加载器。
|
|
612
|
+
连接真实接口时,在消费页面构造请求并将 `signal` 传给 `fetch`;不要在图表库内写死地址。
|
|
613
|
+
真实后端的记录元数据与原始数据请求应分开,模拟器持有完整记录仅用于生成响应。
|
|
614
|
+
|
|
615
|
+
业务若返回聚合或抽稀点,这些点只代表当前加载精度;需要精确原始点的悬浮查询、标注和
|
|
616
|
+
误差范围应另行加载。前端渲染抽稀仍以完整已加载数据进行查询,不能恢复后端未返回的点。
|
|
617
|
+
|
|
497
618
|
组件支持 Plotly 风格的矩形框选缩放:在 zoom 模式下按住鼠标左键拖拽,松开后同时缩放
|
|
498
619
|
X/Y 轴;设置 `pannable` 后,指针位于图表内时按住空格键拖拽可平移当前视口。
|
|
499
|
-
|
|
620
|
+
鼠标滚轮可放大和缩小,统一通过重置按钮恢复完整视口,双击不再重置。每次有效滚轮事件以鼠标所在的 X 位置为基准,
|
|
621
|
+
向上滚动将 X 范围缩小一半,向下滚动将 X 范围扩大一倍;滚动幅度不影响单次倍率。
|
|
622
|
+
滚轮与放大/缩小按钮共用边界、整数对齐及最小点数约束,按钮以视口中心为基准。
|
|
500
623
|
组件会在真实滚轮或框选确定目标范围时同步触发 `zoom-intent`,可立即取消过时请求并启动
|
|
501
624
|
新请求;缩放结束后仍会触发 `zoom-end`。独立分图模式还会包含 `trackIndex` 和稳定的
|
|
502
625
|
`seriesIds`。
|
|
@@ -542,7 +665,8 @@ X 轴且包含多个轨道时使用按稳定 track ID 索引的 `yRanges`。平
|
|
|
542
665
|
加载期间超出已加载数据的区域显示空白,加载状态和错误提示由业务页面提供。
|
|
543
666
|
|
|
544
667
|
配置远端边界时,滚轮、框选和 `setViewportDomain` 在记录范围内约束,最小缩放跨度及倍率
|
|
545
|
-
|
|
668
|
+
仍基于初始数据域;与已加载数据范围重叠的缩放窗口还会按 `minVisiblePoints` 保留真实采样点,
|
|
669
|
+
避免仅满足时间跨度却缩到一个点后停止。未加载区间没有真实点数,因此不会用点数约束将目标窗口拉回
|
|
546
670
|
已加载数据。回填时保留 X 范围,不重新应用点数约束。取消拖动或范围没有变化不会触发 `pan-end`。
|
|
547
671
|
平移过程中用 `zoom-change` 使旧请求失效,完成后用 `pan-end` 发起请求;对缩放仍使用
|
|
548
672
|
`zoom-intent`。业务页面应使用请求序号或取消机制,避免旧响应覆盖更新的目标窗口。
|
|
@@ -554,16 +678,20 @@ X 轴且包含多个轨道时使用按稳定 track ID 索引的 `yRanges`。平
|
|
|
554
678
|
`initialXDomains` 按 track ID 或 series ID 分别配置。`minZoomSpan` 使用原始 X 数据单位,
|
|
555
679
|
可防止每次区间数据回填后重新累计放大。未配置任何缩放约束时保留既有的 40 倍兜底;设置
|
|
556
680
|
`minVisiblePoints: 2` 可缩放到两个真实采样点,`maxZoomScale: null` 可显式关闭倍率上限。
|
|
681
|
+
最少点数约束检查缩放后的范围;当前已有两个可见点时,滚轮、按钮和框选仍可继续收窄,
|
|
682
|
+
直到达到真实最小范围。视口外用于延续折线的邻点不计入可见点数。
|
|
557
683
|
|
|
558
684
|
设置 `:integer-zoom="true"` 可开启整数缩放,默认关闭。开启后滚轮、框选和
|
|
559
|
-
`setViewportDomain`
|
|
560
|
-
`timeUnit='s'`
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
685
|
+
`setViewportDomain` 优先将开始时间向下取整、结束时间向上取整;`timeUnit='ms'` 时对齐整毫秒,
|
|
686
|
+
`timeUnit='s'` 时对齐整秒。若跨度小于一个显示单位,
|
|
687
|
+
则保留小数范围及小数标签、刻度,例如秒模式下 `1.2~1.8` 和 `1~1.4` 保留小数,
|
|
688
|
+
跨整数的 `1.8~2.2` 也保留原范围;负数采用相同规则。初始范围和重置范围也遵循此规则。
|
|
689
|
+
整数模式不额外限制最小跨度,配置的最小跨度、最大倍率和最少可见点数限制仍然生效。
|
|
690
|
+
平移时保持当前跨度;小数视窗跨越整数边界时仍保留小数。记录边界和最小跨度约束优先。
|
|
691
|
+
动态切换此开关会重置视口;切换时间单位只更新显示,不改变当前原始范围。demo 默认开启此开关。
|
|
564
692
|
原始采样坐标不会被修改,缩放事件仍以秒返回实际对齐后的范围;自定义 formatter 不影响对齐粒度。
|
|
565
693
|
关闭时 `timeUnit` 仍只影响展示,不改变缩放范围。
|
|
566
|
-
|
|
694
|
+
显式设置多种限制时采用最严格的一项。点击工具栏重置按钮会
|
|
567
695
|
重置组件内部缩放并触发 `zoom-reset`;调用方应在事件中取消区间请求并恢复首次完整数据。
|
|
568
696
|
外部重置按钮也可以通过模板引用调用组件公开的 `resetViewport()` 方法,然后执行相同的数据恢复逻辑。
|
|
569
697
|
|
|
@@ -609,9 +737,9 @@ chartRef.value?.setViewportDomain(trackDomain, trackIndex)
|
|
|
609
737
|
显式初始范围仍须通过 `includeExplicit` 开启,原始数据坐标不变。
|
|
610
738
|
|
|
611
739
|
独立坐标模式下,回填响应应只替换 `seriesIds` 对应的系列,并调用
|
|
612
|
-
`resetViewport(trackIndex)
|
|
613
|
-
`zoom-reset` payload 会包含该图框的 `trackIndex` 和 `seriesIds
|
|
614
|
-
|
|
740
|
+
`resetViewport(trackIndex)`;其他图框的数据和缩放状态应保持不变。独立模式下通过工具栏选择目标图框并点击重置,
|
|
741
|
+
`zoom-reset` payload 会包含该图框的 `trackIndex` 和 `seriesIds`;选择当前页全部时按图框分别触发事件。
|
|
742
|
+
共享 X 范围模式表示全局复位。忽略事件参数的既有监听器可以继续使用。
|
|
615
743
|
|
|
616
744
|
多通道数据应为每个 `WaveformSeries` 提供稳定的 `id`。内部时间坐标始终使用秒,
|
|
617
745
|
`timeUnit` 只控制坐标轴和 tooltip 的显示单位。
|
|
@@ -1033,8 +1161,21 @@ scale 定位零线:
|
|
|
1033
1161
|
/>
|
|
1034
1162
|
```
|
|
1035
1163
|
|
|
1036
|
-
X
|
|
1037
|
-
|
|
1164
|
+
X 轴主刻度参考 ECharts 数值轴算法,以当前可视域跨度除以目标分段数,选择
|
|
1165
|
+
`1 / 2 / 3 / 5 / 10 × 10ⁿ` 的漂亮步长。目标分段数按绘图区宽度自动计算
|
|
1166
|
+
(`max(2, floor(width / 100))`),实际数量可能不同。该算法只生成域内刻度,不扩展可视域;
|
|
1167
|
+
自动域、显式域、`xDomainStrategy` 及缩放和平移约束继续决定范围。
|
|
1168
|
+
左右端点标签仍独立显示,附近主刻度会避让;次网格线按完整主刻度间隔三等分生成。
|
|
1169
|
+
整数缩放在整数视口下使用至少一个显示单位的步长,小数视口仍允许小数刻度。
|
|
1170
|
+
极端数值或超出刻度安全上限时回退到 D3 刻度算法。回退结果同样会过滤非有限值、
|
|
1171
|
+
去重并规范化负零;若实际数量超过 3000,会降低目标数量重新生成等距刻度。
|
|
1172
|
+
无法生成有效刻度时只保留独立端点标签,不修改可视域。
|
|
1173
|
+
|
|
1174
|
+
X 轴刻度和左右端点默认先按 `timeUnit` 转换为秒或毫秒,再显示为无千分位的自适应精度
|
|
1175
|
+
数值。默认标签去除尾零、负零和浮点长尾,小窗口精度按
|
|
1176
|
+
`max(0, ceil(-log10(显示跨度)) + 1)` 计算,普通小数最多六位,更高精度使用科学计数法;
|
|
1177
|
+
两端标签仍相同时增加有效数字直到可区分。边界小数保留必要精度。
|
|
1178
|
+
可通过 `axes.x.labelFormatter` 对显示值做运算和格式化:
|
|
1038
1179
|
|
|
1039
1180
|
```vue
|
|
1040
1181
|
<WaveformChart
|
|
@@ -1062,7 +1203,7 @@ Demo 左侧“网格与轴线”支持直接切换数值或固定时间格式。
|
|
|
1062
1203
|
`zoomable`、`pannable` 和 `showTooltip` 分别控制缩放、平移和 tooltip;平移默认关闭,
|
|
1063
1204
|
启用后在 `pan` 模式直接拖拽,`zoom` 模式按 Space 临时平移。传入模式 prop 时请接入更新回传,详见工具栏章节。
|
|
1064
1205
|
|
|
1065
|
-
展示场景可启用 `presentationMode`,统一禁用绘图区的 tooltip
|
|
1206
|
+
展示场景可启用 `presentationMode`,统一禁用绘图区的 tooltip、缩放、平移和
|
|
1066
1207
|
标注交互。该模式不会隐藏任何图形内容,也不会禁用图例切换或分页;关闭后恢复原交互配置。
|
|
1067
1208
|
|
|
1068
1209
|
```vue
|
|
@@ -1206,7 +1347,7 @@ async function importAnnotationFile(file: File) {
|
|
|
1206
1347
|
字段无效时会抛出 `TypeError`,不会返回部分结果。导入包含未知 `seriesId` 的标注是允许的,
|
|
1207
1348
|
对应曲线加载后会恢复显示。文件选择、错误提示和下载由业务层实现。
|
|
1208
1349
|
|
|
1209
|
-
X 轴刻度和左右端点先按 `timeUnit`
|
|
1350
|
+
X 轴刻度和左右端点先按 `timeUnit` 转换为秒或毫秒,再显示为不带分组符的自适应精度数值,并可通过 `axes.x.labelFormatter` 自定义。Y 轴根据完整显示域的最大绝对值选择格式:大于等于 `10³`,或大于 `0` 且小于等于 `10⁻³` 时,自动使用科学计数法,并在顶部刻度显示共享倍率 `E±NN`,倍率不参与左侧留白与通道名称定位;其他范围使用普通数字,零值不触发科学计数法。Y 轴标签先保留五位有效数字,再本地化为最多四位小数。科学计数法刻度不追加单位;普通刻度在 series 配置了 `unit` 时显示 `(单位)`,多 Y 轴分别使用对应轴首个 series 的单位。tooltip 使用最多 4 位小数的本地化普通数字并省略无意义尾零;标注编辑器的 X 坐标跟随 `timeUnit` 并固定 3 位小数,Y 坐标显示完整普通十进制。所有格式化都只发生在展示层,内部坐标值保持原始精度。
|
|
1210
1351
|
标注框默认布局在采样点正上方,只做绘图区边界裁剪;文本框通过连接箭头指向标注位置,多个标注重叠时可通过拖动手动避让。
|
|
1211
1352
|
|
|
1212
1353
|
## 事件
|
|
@@ -1220,7 +1361,7 @@ X 轴刻度和左右端点先按 `timeUnit` 转换为秒或毫秒,再显示为
|
|
|
1220
1361
|
| `zoom-change` | 缩放过程中触发,参数为 `[start, end]` |
|
|
1221
1362
|
| `pan-end` | 平移结束且范围变化时返回时间端点,独立模式附带轨道信息 |
|
|
1222
1363
|
| `zoom-end` | 滚轮、框选或新命令提交后触发;加载器需忽略 action=fit |
|
|
1223
|
-
| `zoom-reset` |
|
|
1364
|
+
| `zoom-reset` | 重置按钮或新对象 reset 恢复意图;独立模式标识目标图框 |
|
|
1224
1365
|
| `page-change` | 分页变化,参数为当前页和总页数 |
|
|
1225
1366
|
| `series-visibility-change` | 图例切换曲线显隐时触发 |
|
|
1226
1367
|
| `annotation-create` / `annotation-update` / `annotation-delete` | 标注新增、更新或删除 |
|
|
@@ -1315,12 +1456,12 @@ ESLint 的 Vue SFC、TypeScript ESLint 和 `max-lines` 规则;`pnpm lint:all`
|
|
|
1315
1456
|
|
|
1316
1457
|
`unit-display-mode="channel-label-or-legend"` 在左侧统一隐藏通道名称时,为每个非空图框
|
|
1317
1458
|
显示带单位的图例,包括只有一条通道曲线的图框。
|
|
1318
|
-
当前页所有图框均为单曲线时,左侧名称显示为 `
|
|
1459
|
+
当前页所有图框均为单曲线时,左侧名称显示为 `DEMO_VOLTAGE(V)`;当前页任一图框
|
|
1319
1460
|
包含两条及以上曲线时,整页隐藏左侧通道名称及多轴通道标题,保留坐标刻度。
|
|
1320
1461
|
当前页均为单曲线时,名称显示在左侧,图框不显示图例。
|
|
1321
1462
|
判断使用当前页原始曲线数量,隐藏曲线仍计数,其他页不会影响当前页。
|
|
1322
1463
|
单位去除首尾空白;缺失、空白或 `--` 时只显示名称。原始数据及 ID 保持不变。
|
|
1323
|
-
图例显示为 `
|
|
1464
|
+
图例显示为 `DEMO_VOLTAGE (V)`,设置 `:legend="{ interactive: true }"` 可点击显隐。
|
|
1324
1465
|
隐藏后保留图例条目,可全部隐藏后恢复;`cleanView` 隐藏名称和图例。
|
|
1325
1466
|
显隐状态可通过 `hiddenSeriesIds` 及 `update:hidden-series-ids` 控制;未传入时使用
|
|
1326
1467
|
组件内部状态,持久化仍由宿主应用负责。已有两种单位展示模式保留各自的单位规则,
|