@antv/layout 0.2.5 → 0.3.0-beta.2

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.
Files changed (74) hide show
  1. package/dist/layout.min.js +1 -1
  2. package/dist/layout.min.js.map +1 -1
  3. package/es/layout/circular.js +4 -4
  4. package/es/layout/circular.js.map +1 -1
  5. package/es/layout/concentric.js +1 -1
  6. package/es/layout/concentric.js.map +1 -1
  7. package/es/layout/constants.js +1 -0
  8. package/es/layout/constants.js.map +1 -1
  9. package/es/layout/dagre.js +3 -3
  10. package/es/layout/dagre.js.map +1 -1
  11. package/es/layout/force2/ForceNBody.d.ts +7 -0
  12. package/es/layout/force2/ForceNBody.js +94 -0
  13. package/es/layout/force2/ForceNBody.js.map +1 -0
  14. package/es/layout/force2/index.d.ts +123 -0
  15. package/es/layout/force2/index.js +609 -0
  16. package/es/layout/force2/index.js.map +1 -0
  17. package/es/layout/gForce.js +2 -2
  18. package/es/layout/gForce.js.map +1 -1
  19. package/es/layout/gpu/gForce.js +1 -1
  20. package/es/layout/gpu/gForce.js.map +1 -1
  21. package/es/layout/grid.js +1 -1
  22. package/es/layout/grid.js.map +1 -1
  23. package/es/layout/index.d.ts +2 -1
  24. package/es/layout/index.js +2 -1
  25. package/es/layout/index.js.map +1 -1
  26. package/es/layout/layout.js +2 -0
  27. package/es/layout/layout.js.map +1 -1
  28. package/es/layout/types.d.ts +61 -0
  29. package/es/util/math.d.ts +21 -2
  30. package/es/util/math.js +111 -4
  31. package/es/util/math.js.map +1 -1
  32. package/lib/layout/circular.js +4 -4
  33. package/lib/layout/circular.js.map +1 -1
  34. package/lib/layout/concentric.js +1 -1
  35. package/lib/layout/concentric.js.map +1 -1
  36. package/lib/layout/constants.js +1 -0
  37. package/lib/layout/constants.js.map +1 -1
  38. package/lib/layout/dagre.js +4 -4
  39. package/lib/layout/dagre.js.map +1 -1
  40. package/lib/layout/force2/ForceNBody.d.ts +7 -0
  41. package/lib/layout/force2/ForceNBody.js +98 -0
  42. package/lib/layout/force2/ForceNBody.js.map +1 -0
  43. package/lib/layout/force2/index.d.ts +123 -0
  44. package/lib/layout/force2/index.js +644 -0
  45. package/lib/layout/force2/index.js.map +1 -0
  46. package/lib/layout/gForce.js +2 -2
  47. package/lib/layout/gForce.js.map +1 -1
  48. package/lib/layout/gpu/gForce.js +1 -1
  49. package/lib/layout/gpu/gForce.js.map +1 -1
  50. package/lib/layout/grid.js +1 -1
  51. package/lib/layout/grid.js.map +1 -1
  52. package/lib/layout/index.d.ts +2 -1
  53. package/lib/layout/index.js +3 -1
  54. package/lib/layout/index.js.map +1 -1
  55. package/lib/layout/layout.js +2 -0
  56. package/lib/layout/layout.js.map +1 -1
  57. package/lib/layout/types.d.ts +61 -0
  58. package/lib/util/math.d.ts +21 -2
  59. package/lib/util/math.js +116 -6
  60. package/lib/util/math.js.map +1 -1
  61. package/package.json +4 -2
  62. package/src/layout/circular.ts +7 -6
  63. package/src/layout/concentric.ts +1 -1
  64. package/src/layout/constants.ts +1 -0
  65. package/src/layout/dagre.ts +1 -1
  66. package/src/layout/force2/ForceNBody.ts +128 -0
  67. package/src/layout/force2/index.ts +743 -0
  68. package/src/layout/gForce.ts +7 -6
  69. package/src/layout/gpu/gForce.ts +4 -3
  70. package/src/layout/grid.ts +1 -1
  71. package/src/layout/index.ts +2 -0
  72. package/src/layout/layout.ts +2 -0
  73. package/src/layout/types.ts +67 -0
  74. package/src/util/math.ts +122 -6
@@ -0,0 +1,609 @@
1
+ /**
2
+ * @fileOverview fruchterman layout
3
+ * @author shiwu.wyy@antfin.com
4
+ */
5
+ import { Base } from "../base";
6
+ import { isNumber, isFunction, isArray, getDegreeMap, isObject, getEdgeTerminal, getAvgNodePosition, getCoreNodeAndRelativeLeafNodes } from "../../util";
7
+ import { forceNBody } from "./ForceNBody";
8
+ const proccessToFunc = (value, defaultV) => {
9
+ let func;
10
+ if (!value) {
11
+ func = (d) => {
12
+ return defaultV || 1;
13
+ };
14
+ }
15
+ else if (isNumber(value)) {
16
+ func = (d) => {
17
+ return value;
18
+ };
19
+ }
20
+ else {
21
+ func = value;
22
+ }
23
+ return func;
24
+ };
25
+ /**
26
+ * graphin 中的 force 布局
27
+ */
28
+ export class Force2Layout extends Base {
29
+ constructor(options) {
30
+ super();
31
+ /** 停止迭代的最大迭代数 */
32
+ this.maxIteration = 500;
33
+ /** 停止迭代的最大迭代数,兼容 graphin-force */
34
+ this.maxIterations = 500;
35
+ /** 是否启动 worker */
36
+ this.workerEnabled = false;
37
+ /** 弹簧引力系数 */
38
+ this.edgeStrength = 200;
39
+ /** 斥力系数 */
40
+ this.nodeStrength = 1000;
41
+ /** 库伦系数 */
42
+ this.coulombDisScale = 0.005;
43
+ /** 阻尼系数 */
44
+ this.damping = 0.9;
45
+ /** 最大速度 */
46
+ this.maxSpeed = 1000;
47
+ /** 一次迭代的平均移动距离小于该值时停止迭代 */
48
+ this.minMovement = 0.4;
49
+ /** 迭代中衰减 */
50
+ this.interval = 0.02;
51
+ /** 斥力的一个系数 */
52
+ this.factor = 1;
53
+ /** 理想边长 */
54
+ this.linkDistance = 200;
55
+ /** 重力大小 */
56
+ this.gravity = 10;
57
+ /** 节点聚类作用力系数 */
58
+ this.clusterNodeStrength = 20;
59
+ /** 是否防止重叠 */
60
+ this.preventOverlap = true;
61
+ /** 防止重叠的力大小参数 */
62
+ this.collideStrength = 1;
63
+ /** 阈值的使用条件,mean 代表平均移动距离小于 minMovement 时停止迭代,max 代表最大移动距离大时 minMovement 时停时迭代。默认为 mean */
64
+ this.distanceThresholdMode = 'mean';
65
+ /** 每次迭代结束的回调函数 */
66
+ this.tick = () => { };
67
+ this.nodes = [];
68
+ this.edges = [];
69
+ this.width = 300;
70
+ this.height = 300;
71
+ this.nodeMap = {};
72
+ this.nodeIdxMap = {};
73
+ this.judgingDistance = 0;
74
+ /** 默认的向心配置 */
75
+ this.centripetalOptions = {
76
+ leaf: 2,
77
+ single: 2,
78
+ others: 1,
79
+ // eslint-disable-next-line
80
+ center: (n) => {
81
+ return {
82
+ x: this.width / 2,
83
+ y: this.height / 2,
84
+ };
85
+ },
86
+ };
87
+ this.updateCfg(options);
88
+ }
89
+ getCentripetalOptions() {
90
+ const { leafCluster, clustering, nodeClusterBy, nodes, nodeMap, clusterNodeStrength: propsClusterNodeStrength } = this;
91
+ const getClusterNodeStrength = (node) => typeof propsClusterNodeStrength === 'function' ? propsClusterNodeStrength(node) : propsClusterNodeStrength;
92
+ let centripetalOptions = {};
93
+ let sameTypeLeafMap;
94
+ // 如果传入了需要叶子节点聚类
95
+ if (leafCluster) {
96
+ sameTypeLeafMap = this.getSameTypeLeafMap() || {};
97
+ const relativeNodesType = Array.from(new Set(nodes === null || nodes === void 0 ? void 0 : nodes.map(node => node[nodeClusterBy]))) || [];
98
+ centripetalOptions = {
99
+ single: 100,
100
+ leaf: (node, nodes, edges) => {
101
+ // 找出与它关联的边的起点或终点出发的所有一度节点中同类型的叶子节点
102
+ const { relativeLeafNodes, sameTypeLeafNodes } = sameTypeLeafMap[node.id] || {};
103
+ // 如果都是同一类型或者每种类型只有1个,则施加默认向心力
104
+ if ((sameTypeLeafNodes === null || sameTypeLeafNodes === void 0 ? void 0 : sameTypeLeafNodes.length) === (relativeLeafNodes === null || relativeLeafNodes === void 0 ? void 0 : relativeLeafNodes.length) || (relativeNodesType === null || relativeNodesType === void 0 ? void 0 : relativeNodesType.length) === 1) {
105
+ return 1;
106
+ }
107
+ return getClusterNodeStrength(node);
108
+ },
109
+ others: 1,
110
+ center: (node, nodes, edges) => {
111
+ var _a;
112
+ const { degree } = ((_a = node.data) === null || _a === void 0 ? void 0 : _a.layout) || {};
113
+ // 孤点默认给1个远离的中心点
114
+ if (!degree) {
115
+ return {
116
+ x: 100,
117
+ y: 100,
118
+ };
119
+ }
120
+ let centerNode;
121
+ if (degree === 1) {
122
+ // 如果为叶子节点
123
+ // 找出与它关联的边的起点出发的所有一度节点中同类型的叶子节点
124
+ const { sameTypeLeafNodes = [] } = sameTypeLeafMap[node.id] || {};
125
+ if (sameTypeLeafNodes.length === 1) {
126
+ // 如果同类型的叶子节点只有1个,中心节点置为undefined
127
+ centerNode = undefined;
128
+ }
129
+ else if (sameTypeLeafNodes.length > 1) {
130
+ // 找出同类型节点平均位置节点的距离最近的节点作为中心节点
131
+ centerNode = getAvgNodePosition(sameTypeLeafNodes);
132
+ }
133
+ }
134
+ else {
135
+ centerNode = undefined;
136
+ }
137
+ return {
138
+ x: centerNode === null || centerNode === void 0 ? void 0 : centerNode.x,
139
+ y: centerNode === null || centerNode === void 0 ? void 0 : centerNode.y,
140
+ };
141
+ },
142
+ };
143
+ }
144
+ // 如果传入了全局节点聚类
145
+ if (clustering) {
146
+ if (!sameTypeLeafMap)
147
+ sameTypeLeafMap = this.getSameTypeLeafMap();
148
+ const clusters = Array.from(new Set(nodes.map((node, i) => {
149
+ return node[nodeClusterBy];
150
+ }))).filter(item => item !== undefined);
151
+ const centerNodeInfo = {};
152
+ clusters.forEach(cluster => {
153
+ const sameTypeNodes = nodes.filter(item => item[nodeClusterBy] === cluster).map(node => nodeMap[node.id]);
154
+ // 找出同类型节点平均位置节点的距离最近的节点作为中心节点
155
+ centerNodeInfo[cluster] = getAvgNodePosition(sameTypeNodes);
156
+ });
157
+ centripetalOptions = {
158
+ single: node => getClusterNodeStrength(node),
159
+ leaf: node => getClusterNodeStrength(node),
160
+ others: node => getClusterNodeStrength(node),
161
+ center: (node, nodes, edges) => {
162
+ // 找出同类型节点平均位置节点的距离最近的节点作为中心节点
163
+ const centerNode = centerNodeInfo[node[nodeClusterBy]];
164
+ return {
165
+ x: centerNode === null || centerNode === void 0 ? void 0 : centerNode.x,
166
+ y: centerNode === null || centerNode === void 0 ? void 0 : centerNode.y,
167
+ };
168
+ },
169
+ };
170
+ }
171
+ this.centripetalOptions = Object.assign(Object.assign({}, this.centripetalOptions), centripetalOptions);
172
+ const { leaf, single, others } = this.centripetalOptions;
173
+ if (leaf && typeof leaf !== 'function')
174
+ this.centripetalOptions.leaf = () => leaf;
175
+ if (single && typeof single !== 'function')
176
+ this.centripetalOptions.single = () => single;
177
+ if (others && typeof others !== 'function')
178
+ this.centripetalOptions.others = () => others;
179
+ }
180
+ updateCfg(cfg) {
181
+ if (cfg)
182
+ Object.assign(this, cfg);
183
+ }
184
+ getDefaultCfg() {
185
+ return {
186
+ maxIteration: 500,
187
+ gravity: 10,
188
+ enableTick: true,
189
+ animate: true,
190
+ };
191
+ }
192
+ /**
193
+ * 执行布局
194
+ */
195
+ execute() {
196
+ const self = this;
197
+ self.stop();
198
+ const { nodes, edges, defSpringLen } = self;
199
+ self.judgingDistance = 0;
200
+ if (!nodes || nodes.length === 0) {
201
+ self.onLayoutEnd([]);
202
+ return;
203
+ }
204
+ if (!self.width && typeof window !== "undefined") {
205
+ self.width = window.innerWidth;
206
+ }
207
+ if (!self.height && typeof window !== "undefined") {
208
+ self.height = window.innerHeight;
209
+ }
210
+ if (!self.center) {
211
+ self.center = [self.width / 2, self.height / 2];
212
+ }
213
+ const center = self.center;
214
+ if (nodes.length === 1) {
215
+ nodes[0].x = center[0];
216
+ nodes[0].y = center[1];
217
+ self.onLayoutEnd([Object.assign({}, node[0])]);
218
+ return;
219
+ }
220
+ self.degreesMap = getDegreeMap(nodes, edges);
221
+ if (!self.getMass) {
222
+ self.getMass = (d) => {
223
+ let massWeight = 1;
224
+ if (isNumber(d.mass))
225
+ massWeight = d.mass;
226
+ const degree = self.degreesMap[d.id].all;
227
+ return (!degree || degree < 5) ? massWeight : degree * 5 * massWeight;
228
+ };
229
+ }
230
+ // node size function
231
+ const nodeSize = self.nodeSize;
232
+ let nodeSizeFunc;
233
+ if (self.preventOverlap) {
234
+ const nodeSpacing = self.nodeSpacing;
235
+ let nodeSpacingFunc;
236
+ if (isNumber(nodeSpacing)) {
237
+ nodeSpacingFunc = () => nodeSpacing;
238
+ }
239
+ else if (isFunction(nodeSpacing)) {
240
+ nodeSpacingFunc = nodeSpacing;
241
+ }
242
+ else {
243
+ nodeSpacingFunc = () => 0;
244
+ }
245
+ if (!nodeSize) {
246
+ nodeSizeFunc = (d) => {
247
+ if (d.size) {
248
+ if (isArray(d.size)) {
249
+ return Math.max(d.size[0], d.size[1]) + nodeSpacingFunc(d);
250
+ }
251
+ if (isObject(d.size)) {
252
+ return Math.max(d.size.width, d.size.height) + nodeSpacingFunc(d);
253
+ }
254
+ return d.size + nodeSpacingFunc(d);
255
+ }
256
+ return 10 + nodeSpacingFunc(d);
257
+ };
258
+ }
259
+ else if (isArray(nodeSize)) {
260
+ nodeSizeFunc = (d) => {
261
+ return Math.max(nodeSize[0], nodeSize[1]) + nodeSpacingFunc(d);
262
+ };
263
+ }
264
+ else {
265
+ nodeSizeFunc = (d) => nodeSize + nodeSpacingFunc(d);
266
+ }
267
+ }
268
+ self.nodeSize = nodeSizeFunc;
269
+ self.linkDistance = proccessToFunc(self.linkDistance, 1);
270
+ self.nodeStrength = proccessToFunc(self.nodeStrength, 1);
271
+ self.edgeStrength = proccessToFunc(self.edgeStrength, 1);
272
+ const nodeMap = {};
273
+ const nodeIdxMap = {};
274
+ nodes.forEach((node, i) => {
275
+ if (!isNumber(node.x))
276
+ node.x = Math.random() * self.width;
277
+ if (!isNumber(node.y))
278
+ node.y = Math.random() * self.height;
279
+ const degree = self.degreesMap[node.id];
280
+ nodeMap[node.id] = Object.assign(Object.assign({}, node), { data: Object.assign(Object.assign({}, node.data), { size: self.nodeSize(node) || 30, layout: {
281
+ inDegree: degree.in,
282
+ outDegree: degree.out,
283
+ degree: degree.all,
284
+ tDegree: degree.in,
285
+ sDegree: degree.out,
286
+ force: {
287
+ mass: self.getMass(node),
288
+ nodeStrength: self.nodeStrength(node)
289
+ }
290
+ } }) });
291
+ nodeIdxMap[node.id] = i;
292
+ });
293
+ self.nodeMap = nodeMap;
294
+ self.nodeIdxMap = nodeIdxMap;
295
+ self.edgeInfos = [];
296
+ edges === null || edges === void 0 ? void 0 : edges.forEach(edge => {
297
+ const sourceNode = nodeMap[edge.source];
298
+ const targetNode = nodeMap[edge.target];
299
+ if (!sourceNode || !targetNode) {
300
+ elf.edgeInfos.push({});
301
+ }
302
+ else {
303
+ self.edgeInfos.push({
304
+ edgeStrength: self.edgeStrength(edge),
305
+ linkDistance: defSpringLen ? defSpringLen(Object.assign(Object.assign({}, edge), { source: sourceNode, target: targetNode }), sourceNode, targetNode) : self.linkDistance(edge, sourceNode, targetNode) || 1 + ((nodeSize(sourceNode) + nodeSize(sourceNode)) || 0) / 2
306
+ });
307
+ }
308
+ });
309
+ this.getCentripetalOptions();
310
+ self.onLayoutEnd = self.onLayoutEnd || (() => { });
311
+ self.run();
312
+ }
313
+ run() {
314
+ const self = this;
315
+ const { maxIteration, maxIterations, nodes, workerEnabled, minMovement, animate, minMovement, nodeMap } = self;
316
+ if (!nodes)
317
+ return;
318
+ const velArray = [];
319
+ nodes.forEach((_, i) => {
320
+ velArray[2 * i] = 0;
321
+ velArray[2 * i + 1] = 0;
322
+ });
323
+ const maxIter = maxIterations || maxIteration;
324
+ const silence = !animate;
325
+ if (workerEnabled || silence) {
326
+ let usedIter = 0;
327
+ for (let i = 0; (self.judgingDistance > minMovement || i < 1) && i < maxIter; i++) {
328
+ usedIter = i;
329
+ self.runOneStep(i, velArray);
330
+ }
331
+ self.onLayoutEnd(Object.values(nodeMap));
332
+ }
333
+ else {
334
+ if (typeof window === "undefined")
335
+ return;
336
+ let iter = 0;
337
+ // interval for render the result after each iteration
338
+ this.timeInterval = window.setInterval(() => {
339
+ if (!nodes)
340
+ return;
341
+ self.runOneStep(iter, velArray);
342
+ iter++;
343
+ if (iter >= maxIter || self.judgingDistance < minMovement) {
344
+ self.onLayoutEnd(Object.values(nodeMap));
345
+ window.clearInterval(self.timeInterval);
346
+ }
347
+ }, 0);
348
+ }
349
+ }
350
+ runOneStep(iter, velArray) {
351
+ var _a;
352
+ const self = this;
353
+ const { nodes, edges, nodeMap, monitor } = self;
354
+ const accArray = [];
355
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length))
356
+ return;
357
+ self.calRepulsive(accArray);
358
+ if (edges)
359
+ self.calAttractive(accArray);
360
+ self.calGravity(accArray);
361
+ const stepInterval = self.interval; // Math.max(0.02, self.interval - iter * 0.002);
362
+ self.updateVelocity(accArray, velArray, stepInterval);
363
+ self.updatePosition(velArray, stepInterval);
364
+ (_a = self.tick) === null || _a === void 0 ? void 0 : _a.call(self);
365
+ /** 如果需要监控信息,则提供给用户 */
366
+ if (monitor) {
367
+ const energy = this.calTotalEnergy(accArray);
368
+ monitor({ energy, nodes, edges, iterations: iter });
369
+ }
370
+ }
371
+ calTotalEnergy(accArray) {
372
+ const { nodes, nodeMap } = this;
373
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length))
374
+ return 0;
375
+ let energy = 0.0;
376
+ nodes.forEach((node, i) => {
377
+ const vx = accArray[2 * i];
378
+ const vy = accArray[2 * i + 1];
379
+ const speed2 = vx * vx + vy * vy;
380
+ const { mass = 1 } = nodeMap[node.id].data.layout.force;
381
+ energy += mass * speed2 * 0.5; // p = 1/2*(mv^2)
382
+ });
383
+ return energy;
384
+ }
385
+ ;
386
+ // coulombs law
387
+ calRepulsive(accArray) {
388
+ const self = this;
389
+ const { nodes, nodeMap, factor, coulombDisScale } = self;
390
+ const nodeSize = self.nodeSize;
391
+ forceNBody(nodes, nodeMap, factor, coulombDisScale * coulombDisScale, accArray);
392
+ }
393
+ // hooks law
394
+ calAttractive(accArray) {
395
+ const self = this;
396
+ const { edges, nodeMap, nodeIdxMap, edgeInfos } = self;
397
+ const nodeSize = self.nodeSize;
398
+ edges.forEach((edge, i) => {
399
+ const source = getEdgeTerminal(edge, 'source');
400
+ const target = getEdgeTerminal(edge, 'target');
401
+ const sourceNode = nodeMap[source];
402
+ const targetNode = nodeMap[target];
403
+ if (!sourceNode || !targetNode)
404
+ return;
405
+ let vecX = targetNode.x - sourceNode.x;
406
+ let vecY = targetNode.y - sourceNode.y;
407
+ if (!vecX && !vecY) {
408
+ vecX = Math.random() * 0.01;
409
+ vecY = Math.random() * 0.01;
410
+ }
411
+ const vecLength = Math.sqrt(vecX * vecX + vecY * vecY);
412
+ const direX = vecX / vecLength;
413
+ const direY = vecY / vecLength;
414
+ // @ts-ignore
415
+ const { linkDistance = 200, edgeStrength = 200 } = edgeInfos[i] || {};
416
+ const diff = linkDistance - vecLength;
417
+ const param = diff * edgeStrength;
418
+ const massSource = sourceNode.data.layout.force.mass || 1;
419
+ const massTarget = targetNode.data.layout.force.mass || 1;
420
+ // 质量占比越大,对另一端影响程度越大
421
+ const sourceMassRatio = 1 / massSource;
422
+ const targetMassRatio = 1 / massTarget;
423
+ const disX = direX * param;
424
+ const disY = direY * param;
425
+ const sourceIdx = 2 * nodeIdxMap[source];
426
+ const targetIdx = 2 * nodeIdxMap[target];
427
+ accArray[sourceIdx] -= disX * sourceMassRatio;
428
+ accArray[sourceIdx + 1] -= disY * sourceMassRatio;
429
+ accArray[targetIdx] += disX * targetMassRatio;
430
+ accArray[targetIdx + 1] += disY * targetMassRatio;
431
+ });
432
+ }
433
+ // attract to center
434
+ calGravity(accArray) {
435
+ var _a;
436
+ const self = this;
437
+ const { nodes, edges = [], nodeMap, width, height, center, gravity: defaultGravity, degreesMap, centripetalOptions } = self;
438
+ if (!nodes)
439
+ return;
440
+ const nodeLength = nodes.length;
441
+ for (let i = 0; i < nodeLength; i++) {
442
+ const idx = 2 * i;
443
+ const node = nodeMap[nodes[i].id];
444
+ const { mass = 1 } = node.data.layout.force;
445
+ let vecX = 0;
446
+ let vecY = 0;
447
+ let gravity = defaultGravity;
448
+ const { in: inDegree, out: outDegree, all: degree } = degreesMap[node.id];
449
+ const forceCenter = (_a = self.getCenter) === null || _a === void 0 ? void 0 : _a.call(self, node, degree);
450
+ if (forceCenter) {
451
+ const [centerX, centerY, strength] = forceCenter;
452
+ vecX = node.x - centerX;
453
+ vecY = node.y - centerY;
454
+ gravity = strength;
455
+ }
456
+ else {
457
+ vecX = node.x - center[0];
458
+ vecY = node.y - center[1];
459
+ }
460
+ if (gravity) {
461
+ accArray[idx] -= gravity * vecX / mass;
462
+ accArray[idx + 1] -= gravity * vecY / mass;
463
+ }
464
+ if (centripetalOptions) {
465
+ const { leaf, single, others, center: centriCenter } = centripetalOptions;
466
+ const { x: centriX, y: centriY, centerStrength } = (centriCenter === null || centriCenter === void 0 ? void 0 : centriCenter(node, nodes, edges, width, height)) || { x: 0, y: 0, centerStrength: 0 };
467
+ if (!isNumber(centriX) || !isNumber(centriY))
468
+ continue;
469
+ const vx = (node.x - centriX) / mass;
470
+ const vy = (node.y - centriY) / mass;
471
+ if (centerStrength) {
472
+ accArray[idx] -= centerStrength * vx;
473
+ accArray[idx + 1] -= centerStrength * vy;
474
+ }
475
+ // 孤点
476
+ if (degree === 0) {
477
+ const singleStrength = single(node);
478
+ if (!singleStrength)
479
+ continue;
480
+ accArray[idx] -= singleStrength * vx;
481
+ accArray[idx + 1] -= singleStrength * vy;
482
+ continue;
483
+ }
484
+ // 没有出度或没有入度,都认为是叶子节点
485
+ if (inDegree === 0 || outDegree === 0) {
486
+ const leafStrength = leaf(node, nodes, edges);
487
+ if (!leafStrength)
488
+ continue;
489
+ accArray[idx] -= leafStrength * vx;
490
+ accArray[idx + 1] -= leafStrength * vy;
491
+ continue;
492
+ }
493
+ /** others */
494
+ const othersStrength = others(node);
495
+ if (!othersStrength)
496
+ continue;
497
+ accArray[idx] -= othersStrength * vx;
498
+ accArray[idx + 1] -= othersStrength * vy;
499
+ }
500
+ }
501
+ }
502
+ // TODO: 待 graphin 修改正确
503
+ // public attractToSide(accArray: number[]) {
504
+ // const { defSideCoe, height, nodes } = this;
505
+ // if (!defSideCoe || typeof defSideCoe !== 'function' || !nodes?.length) return;
506
+ // nodes.forEach((node, i) => {
507
+ // const sideCoe = defSideCoe!(node);
508
+ // if (sideCoe === 0) return;
509
+ // const targetY = sideCoe > 0 ? 0 : height;
510
+ // const strength = Math.abs(sideCoe);
511
+ // accArray[2 * i + 1] -= strength * (targetY - node.y);
512
+ // });
513
+ // };
514
+ updateVelocity(accArray, velArray, stepInterval) {
515
+ const self = this;
516
+ const { nodes, damping, maxSpeed } = self;
517
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length))
518
+ return;
519
+ nodes.forEach((_, i) => {
520
+ let vx = (velArray[2 * i] + accArray[2 * i] * stepInterval) * damping || 0.01;
521
+ let vy = (velArray[2 * i + 1] + accArray[2 * i + 1] * stepInterval) * damping || 0.01;
522
+ const vLength = Math.sqrt(vx * vx + vy * vy);
523
+ if (vLength > maxSpeed) {
524
+ const param2 = maxSpeed / vLength;
525
+ vx = param2 * vx;
526
+ vy = param2 * vy;
527
+ }
528
+ velArray[2 * i] = vx;
529
+ velArray[2 * i + 1] = vy;
530
+ });
531
+ }
532
+ updatePosition(velArray, stepInterval) {
533
+ const self = this;
534
+ const { nodes, distanceThresholdMode, nodeMap } = self;
535
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length)) {
536
+ this.judgingDistance = 0;
537
+ return;
538
+ }
539
+ let sum = 0;
540
+ if (distanceThresholdMode === 'max')
541
+ self.judgingDistance = -Infinity;
542
+ else if (distanceThresholdMode === 'min')
543
+ self.judgingDistance = Infinity;
544
+ nodes.forEach((node, i) => {
545
+ const mappedNode = nodeMap[node.id];
546
+ if (isNumber(node.fx) && isNumber(node.fy)) {
547
+ node.x = node.fx;
548
+ node.y = node.fy;
549
+ mappedNode.x = node.x;
550
+ mappedNode.y = node.y;
551
+ return;
552
+ }
553
+ const distX = velArray[2 * i] * stepInterval;
554
+ const distY = velArray[2 * i + 1] * stepInterval;
555
+ node.x += distX;
556
+ node.y += distY;
557
+ mappedNode.x = node.x;
558
+ mappedNode.y = node.y;
559
+ const distanceMagnitude = Math.sqrt(distX * distX + distY * distY);
560
+ switch (distanceThresholdMode) {
561
+ case 'max':
562
+ if (self.judgingDistance < distanceMagnitude)
563
+ self.judgingDistance = distanceMagnitude;
564
+ break;
565
+ case 'min':
566
+ if (self.judgingDistance > distanceMagnitude)
567
+ self.judgingDistance = distanceMagnitude;
568
+ break;
569
+ default:
570
+ sum = sum + distanceMagnitude;
571
+ break;
572
+ }
573
+ });
574
+ if (!distanceThresholdMode || distanceThresholdMode === 'mean')
575
+ self.judgingDistance = sum / nodes.length;
576
+ }
577
+ stop() {
578
+ if (this.timeInterval && typeof window !== "undefined") {
579
+ window.clearInterval(this.timeInterval);
580
+ }
581
+ }
582
+ destroy() {
583
+ const self = this;
584
+ self.stop();
585
+ self.tick = null;
586
+ self.nodes = null;
587
+ self.edges = null;
588
+ self.destroyed = true;
589
+ }
590
+ getType() {
591
+ return "force2";
592
+ }
593
+ getSameTypeLeafMap() {
594
+ const { nodeClusterBy, nodes, edges, nodeMap, degreesMap } = this;
595
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length))
596
+ return;
597
+ // eslint-disable-next-line
598
+ const sameTypeLeafMap = {};
599
+ nodes.forEach((node, i) => {
600
+ const degree = degreesMap[node.id].all;
601
+ if (degree === 1) {
602
+ sameTypeLeafMap[node.id] = getCoreNodeAndRelativeLeafNodes('leaf', node, edges, nodeClusterBy, degreesMap, nodeMap);
603
+ }
604
+ });
605
+ return sameTypeLeafMap;
606
+ }
607
+ ;
608
+ }
609
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layout/force2/index.ts"],"names":[],"mappings":"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"}
@@ -163,7 +163,7 @@ export class GForceLayout extends Base {
163
163
  self.degrees = getDegree(nodes.length, self.nodeIdxMap, edges);
164
164
  if (!self.getMass) {
165
165
  self.getMass = (d) => {
166
- const mass = d.mass || self.degrees[self.nodeIdxMap[d.id]] || 1;
166
+ const mass = d.mass || self.degrees[self.nodeIdxMap[d.id]].all || 1;
167
167
  return mass;
168
168
  };
169
169
  }
@@ -333,7 +333,7 @@ export class GForceLayout extends Base {
333
333
  let vecY = node.y - center[1];
334
334
  let gravity = defaultGravity;
335
335
  if (self.getCenter) {
336
- const customCenterOpt = self.getCenter(node, degrees[i]);
336
+ const customCenterOpt = self.getCenter(node, degrees[i].all);
337
337
  if (customCenterOpt &&
338
338
  isNumber(customCenterOpt[0]) &&
339
339
  isNumber(customCenterOpt[1]) &&