@nitrohe/webtopo-sdk 0.0.2 → 0.0.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitrohe/webtopo-sdk",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "topo",
5
5
  "keywords": [
6
6
  "konva",
@@ -13,6 +13,7 @@
13
13
  "type": "module",
14
14
  "main": "./webtopo.umd.js",
15
15
  "module": "./webtopo.es.js",
16
+ "types": "types/Render/types.d.ts",
16
17
  "sideEffects": false,
17
18
  "author": "nitrohe@163.com",
18
19
  "contributors": [],
@@ -0,0 +1,261 @@
1
+ import Konva from 'konva';
2
+ export type ValueOf<T> = T[keyof T];
3
+ export interface RenderConfig {
4
+ width: number;
5
+ height: number;
6
+ showBg?: boolean;
7
+ showRuler?: boolean;
8
+ showRefLine?: boolean;
9
+ showPreview?: boolean;
10
+ showContextmenu?: boolean;
11
+ attractResize?: boolean;
12
+ attractBg?: boolean;
13
+ attractNode?: boolean;
14
+ readonly?: boolean;
15
+ configJson?: string | null;
16
+ }
17
+ export type RenderEvents = {
18
+ ['history-change']: {
19
+ records: string[];
20
+ index: number;
21
+ };
22
+ ['selection-change']: Konva.Node[];
23
+ ['debug-change']: boolean;
24
+ ['link-type-change']: LinkType;
25
+ ['scale-change']: number;
26
+ ['loading']: boolean;
27
+ ['graph-type-change']: GraphType | undefined;
28
+ ['texting-change']: boolean;
29
+ ['page-settings-change']: PageSettings;
30
+ ['link-selection-change']: Konva.Line | undefined;
31
+ ['asset-position-change']: Konva.Node[];
32
+ ['asset-rotation-change']: Konva.Node[];
33
+ };
34
+ export interface Handler {
35
+ handlers?: {
36
+ stage?: {
37
+ [index: string]: (e?: any) => void | boolean;
38
+ };
39
+ dom?: {
40
+ [index: string]: (e?: any) => void;
41
+ };
42
+ transformer?: {
43
+ [index: string]: (e?: any) => void;
44
+ };
45
+ };
46
+ transformerConfig?: {
47
+ anchorDragBoundFunc?: (oldPos: Konva.Vector2d, newPos: Konva.Vector2d, e: MouseEvent) => Konva.Vector2d;
48
+ dragBoundFunc?: (newPos: Konva.Vector2d, e: MouseEvent) => Konva.Vector2d;
49
+ };
50
+ }
51
+ export declare enum MouseButton {
52
+ 左键 = 0,
53
+ 右键 = 2
54
+ }
55
+ export interface Draw {
56
+ readonly layer: Konva.Layer;
57
+ option: {
58
+ [index: string]: any;
59
+ };
60
+ init: () => void;
61
+ draw: () => void;
62
+ clear: () => void;
63
+ }
64
+ export declare class BaseDraw {
65
+ protected render: any;
66
+ readonly layer: Konva.Layer;
67
+ protected group: Konva.Group;
68
+ constructor(render: any, layer: Konva.Layer);
69
+ init(): void;
70
+ draw(): void;
71
+ clear(): void;
72
+ }
73
+ export interface AssetInfoPoint {
74
+ x: number;
75
+ y: number;
76
+ direction?: 'top' | 'bottom' | 'left' | 'right';
77
+ alias?: string;
78
+ }
79
+ export interface AssetInfo {
80
+ url: string;
81
+ avatar?: string;
82
+ points?: Array<AssetInfoPoint>;
83
+ }
84
+ export declare enum MoveKey {
85
+ 上 = "ArrowUp",
86
+ 左 = "ArrowLeft",
87
+ 右 = "ArrowRight",
88
+ 下 = "ArrowDown"
89
+ }
90
+ export declare enum ShutcutKey {
91
+ 删除 = "Delete",
92
+ C = "KeyC",
93
+ V = "KeyV",
94
+ Z = "KeyZ",
95
+ A = "KeyA",
96
+ R = "KeyR",
97
+ Esc = "Escape",
98
+ Backspace = "Backspace",
99
+ Enter = "Enter"
100
+ }
101
+ export declare enum AlignType {
102
+ 垂直居中 = "Middle",
103
+ 左对齐 = "Left",
104
+ 右对齐 = "Right",
105
+ 水平居中 = "Center",
106
+ 上对齐 = "Top",
107
+ 下对齐 = "Bottom"
108
+ }
109
+ export declare enum LinkType {
110
+ 'auto' = "auto",
111
+ 'straight' = "straight",// 直线
112
+ 'manual' = "manual",// 折线
113
+ 'curve' = "curve",// 曲线
114
+ 'bezier' = "bezier"
115
+ }
116
+ /**
117
+ * 连接对
118
+ */
119
+ export interface LinkDrawPair {
120
+ id: string;
121
+ from: {
122
+ groupId: string;
123
+ pointId: string;
124
+ rawGroupId?: string;
125
+ };
126
+ to: {
127
+ groupId: string;
128
+ pointId: string;
129
+ rawGroupId?: string;
130
+ };
131
+ disabled?: boolean;
132
+ linkType?: LinkType;
133
+ style?: Konva.LineConfig & LinkSettings;
134
+ }
135
+ /**
136
+ * 连接点
137
+ */
138
+ export interface LinkDrawPoint {
139
+ id: string;
140
+ groupId: string;
141
+ rawGroupId?: string;
142
+ visible: boolean;
143
+ pairs: LinkDrawPair[];
144
+ x: number;
145
+ y: number;
146
+ direction?: 'top' | 'bottom' | 'left' | 'right';
147
+ alias?: string;
148
+ }
149
+ /**
150
+ * 连接线 拐点
151
+ */
152
+ export interface ManualPoint {
153
+ x: number;
154
+ y: number;
155
+ }
156
+ /**
157
+ * 连接线 拐点 表
158
+ */
159
+ export interface ManualPointsMap {
160
+ [index: string]: ManualPoint[];
161
+ }
162
+ /**
163
+ * 直线、折线 拐点
164
+ */
165
+ export interface LineManualPoint {
166
+ x: number;
167
+ y: number;
168
+ index: number;
169
+ }
170
+ /**
171
+ * 图形类型
172
+ */
173
+ export declare enum GraphType {
174
+ Line = "Line",// 直线
175
+ Curve = "Curve",// 曲线
176
+ Rect = "Rect",// 矩形
177
+ Circle = "Circle",// 圆/椭圆形
178
+ Bezier = "Bezier"
179
+ }
180
+ /**
181
+ * 图形 的 调整点 信息
182
+ */
183
+ export interface GraphAnchor {
184
+ type?: GraphType;
185
+ adjustType: string;
186
+ name?: string;
187
+ groupId?: string;
188
+ adjusted?: boolean;
189
+ }
190
+ /**
191
+ * 图形 的 调整点 图形、锚点关系
192
+ */
193
+ export interface GraphAnchorShape {
194
+ shape: Konva.Shape;
195
+ anchorShadow: Konva.Circle;
196
+ }
197
+ /**
198
+ * 素材类型
199
+ */
200
+ export declare enum AssetType {
201
+ 'Image' = "Image",
202
+ 'Json' = "Json",
203
+ 'Graph' = "Graph",
204
+ 'Text' = "Text"
205
+ }
206
+ /**
207
+ * 图片类型
208
+ */
209
+ export declare enum ImageType {
210
+ 'svg' = "svg",
211
+ 'gif' = "gif",
212
+ 'other' = "other"
213
+ }
214
+ /**
215
+ * 对齐信息
216
+ */
217
+ export interface SortItem {
218
+ id?: number;
219
+ value: number;
220
+ }
221
+ /**
222
+ * 页面设置
223
+ */
224
+ export interface PageSettings {
225
+ background: string;
226
+ stroke: string;
227
+ strokeWidth: number;
228
+ fill: string;
229
+ linkStroke: string;
230
+ linkStrokeWidth: number;
231
+ fontSize: number;
232
+ textFill: string;
233
+ }
234
+ /**
235
+ * 素材设置
236
+ */
237
+ export interface AssetSettings {
238
+ stroke: string;
239
+ strokeWidth: number;
240
+ fill: string;
241
+ arrowStart: boolean;
242
+ arrowEnd: boolean;
243
+ fontSize: number;
244
+ textFill: string;
245
+ text: string;
246
+ x: number;
247
+ y: number;
248
+ rotation: number;
249
+ tension: number;
250
+ }
251
+ /**
252
+ * 连接线设置
253
+ */
254
+ export interface LinkSettings {
255
+ stroke: string;
256
+ strokeWidth: number;
257
+ arrowStart: boolean;
258
+ arrowEnd: boolean;
259
+ tension: number;
260
+ }
261
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/Render/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEnC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IAEd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,gBAAgB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAClC,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACzB,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAA;IAC9B,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IACxB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IACpB,CAAC,mBAAmB,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC5C,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE3B,CAAC,sBAAsB,CAAC,EAAE,YAAY,CAAA;IACtC,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,SAAS,CAAA;IACjD,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IACvC,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;CACxC,CAAA;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE;YACN,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAA;SAC7C,CAAA;QACD,GAAG,CAAC,EAAE;YACJ,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;SACnC,CAAA;QACD,WAAW,CAAC,EAAE;YACZ,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;SACnC,CAAA;KACF,CAAA;IACD,iBAAiB,CAAC,EAAE;QAClB,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,CAAC,EAAE,UAAU,KACV,KAAK,CAAC,QAAQ,CAAA;QACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,QAAQ,CAAA;KAC1E,CAAA;CACF;AAED,oBAAY,WAAW;IACrB,EAAE,IAAI;IACN,EAAE,IAAI;CACP;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;IAE3B,MAAM,EAAE;QACN,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;KACrB,CAAA;IACD,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,qBAAa,QAAQ;IACnB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;IAC3B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;gBAEhB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;IAO3C,IAAI;IAKJ,IAAI;IAEJ,KAAK;CAQN;AAID,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;CAC/B;AAED,oBAAY,OAAO;IACjB,CAAC,YAAY;IACb,CAAC,cAAc;IACf,CAAC,eAAe;IAChB,CAAC,cAAc;CAChB;AAED,oBAAY,UAAU;IACpB,EAAE,WAAW;IACb,CAAC,SAAS;IACV,CAAC,SAAS;IACV,CAAC,SAAS;IACV,CAAC,SAAS;IACV,CAAC,SAAS;IACV,GAAG,WAAW;IACd,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAED,oBAAY,SAAS;IACnB,IAAI,WAAW;IACf,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,IAAI,WAAW;IACf,GAAG,QAAQ;IACX,GAAG,WAAW;CACf;AAGD,oBAAY,QAAQ;IAClB,MAAM,SAAS;IACf,UAAU,aAAa,CAAE,KAAK;IAC9B,QAAQ,WAAW,CAAE,KAAK;IAC1B,OAAO,UAAU,CAAE,KAAK;IACxB,QAAQ,WAAW;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,EAAE,EAAE;QACF,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,YAAY,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,IAAI,SAAS,CAAE,KAAK;IACpB,KAAK,UAAU,CAAE,KAAK;IACtB,IAAI,SAAS,CAAE,KAAK;IACpB,MAAM,WAAW,CAAE,QAAQ;IAC3B,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAElB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;IAClB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;CAC3B;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,OAAO,UAAU;IACjB,MAAM,SAAS;IACf,OAAO,UAAU;IACjB,MAAM,SAAS;CAChB;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb,OAAO,UAAU;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB"}
package/webtopo.es.js CHANGED
@@ -7429,6 +7429,86 @@ const _LinkDraw = class _LinkDraw extends BaseDraw {
7429
7429
  this.state.linkType = linkType;
7430
7430
  this.render.emit("link-type-change", this.state.linkType);
7431
7431
  }
7432
+ setPipeLineAnimation(pipePoints, group) {
7433
+ function parsePolylineToSegments(points) {
7434
+ const segments2 = [];
7435
+ let totalLength2 = 0;
7436
+ for (let i = 0; i < points.length - 2; i += 2) {
7437
+ const x1 = points[i], y1 = points[i + 1];
7438
+ const x2 = points[i + 2], y2 = points[i + 3];
7439
+ const dx = x2 - x1;
7440
+ const dy = y2 - y1;
7441
+ const length = Math.sqrt(dx * dx + dy * dy);
7442
+ totalLength2 += length;
7443
+ segments2.push({ x1, y1, x2, y2, dx, dy, length });
7444
+ }
7445
+ return { segments: segments2, totalLength: totalLength2 };
7446
+ }
7447
+ function calculateSingleLineLength(points) {
7448
+ let totalLength2 = 0;
7449
+ for (let i = 0; i < points.length - 2; i += 2) {
7450
+ const x1 = points[i];
7451
+ const y1 = points[i + 1];
7452
+ const x2 = points[i + 2];
7453
+ const y2 = points[i + 3];
7454
+ const dx = x2 - x1;
7455
+ const dy = y2 - y1;
7456
+ totalLength2 += Math.sqrt(dx * dx + dy * dy);
7457
+ }
7458
+ return totalLength2;
7459
+ }
7460
+ const { segments, totalLength } = parsePolylineToSegments(pipePoints);
7461
+ const flowSpeed = 60;
7462
+ const flowCount = Math.ceil(calculateSingleLineLength(pipePoints) / (20 * 2));
7463
+ const flowItems = [];
7464
+ for (let i = 0; i < flowCount; i++) {
7465
+ const flowItem = new Konva.Rect({
7466
+ width: 20,
7467
+ // 胶囊长度 (长条)
7468
+ height: 6,
7469
+ // 胶囊粗细,略小于管道strokeWidth=12,刚好贴合管道
7470
+ cornerRadius: 3,
7471
+ // 圆角半径 = 高度/2 → 完美胶囊形状,无棱角
7472
+ fill: "#00D2FF",
7473
+ // 你的原始填充色
7474
+ opacity: 0.8,
7475
+ // 你的原始透明度
7476
+ // shadowColor: '#FF3333', // 你的原始阴影色
7477
+ // shadowBlur: 10, // 你的原始阴影模糊度
7478
+ shadowOpacity: 0.7,
7479
+ //你的原始阴影透明度
7480
+ offsetX: 10,
7481
+ // 锚点X居中 = width/2
7482
+ offsetY: 3
7483
+ // 锚点Y居中 = height/2 → 旋转中心在胶囊正中间
7484
+ });
7485
+ group.add(flowItem);
7486
+ flowItems.push({ node: flowItem, offset: i / flowCount });
7487
+ }
7488
+ const anim = new Konva.Animation((frame) => {
7489
+ const totalTime = totalLength / (flowSpeed / 1e3);
7490
+ flowItems.forEach((item) => {
7491
+ let progress = (frame.time / totalTime + item.offset) % 1;
7492
+ let currentLength = progress * totalLength;
7493
+ let currentX, currentY, currentSeg;
7494
+ for (const seg of segments) {
7495
+ if (currentLength <= seg.length) {
7496
+ const ratio = currentLength / seg.length;
7497
+ currentX = seg.x1 + seg.dx * ratio;
7498
+ currentY = seg.y1 + seg.dy * ratio;
7499
+ currentSeg = seg;
7500
+ break;
7501
+ } else {
7502
+ currentLength -= seg.length;
7503
+ }
7504
+ }
7505
+ item.node.position({ x: currentX, y: currentY });
7506
+ const angle = Math.atan2(currentSeg.dy, currentSeg.dx) * 180 / Math.PI;
7507
+ item.node.rotation(angle);
7508
+ });
7509
+ }, this.render.layer);
7510
+ anim.start();
7511
+ }
7432
7512
  // TODO: 优化
7433
7513
  // *思路:此 draw 弃用“整体 redraw”的方式,改为“局部更新”的方式:
7434
7514
  // 循环 pair 的时候查找 link-line、manualing-line、link-manual-point 等实例是否存在
@@ -7723,6 +7803,9 @@ const _LinkDraw = class _LinkDraw extends BaseDraw {
7723
7803
  });
7724
7804
  }
7725
7805
  this.group.add(linkLine);
7806
+ if (this.render.config.readonly && this.render.getLinkSettings(linkLine).animation) {
7807
+ this.setPipeLineAnimation(lodash.flatten(linkPoints), this.group);
7808
+ }
7726
7809
  if (!this.render.config.readonly) {
7727
7810
  const manualingLine = new Konva.Arrow({
7728
7811
  name: "manualing-line",