@antv/layout 1.2.10 → 1.2.11-beta.0

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 (134) hide show
  1. package/dist/{5fc550bbb6f708833d84.worker.js → 1364056b7ad586222caf.worker.js} +2 -2
  2. package/dist/1364056b7ad586222caf.worker.js.map +1 -0
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/lib/bundle-entry.js +19 -0
  6. package/lib/bundle-entry.js.map +1 -0
  7. package/lib/bundle-supervisor.js +94 -0
  8. package/lib/bundle-supervisor.js.map +1 -0
  9. package/lib/bundle-worker.js +53 -0
  10. package/lib/bundle-worker.js.map +1 -0
  11. package/lib/circular.js +258 -0
  12. package/lib/circular.js.map +1 -0
  13. package/lib/comboCombined.js +441 -0
  14. package/lib/comboCombined.js.map +1 -0
  15. package/lib/concentric.js +229 -0
  16. package/lib/concentric.js.map +1 -0
  17. package/lib/d3Force/forceInBox.js +331 -0
  18. package/lib/d3Force/forceInBox.js.map +1 -0
  19. package/lib/d3Force/index.js +339 -0
  20. package/lib/d3Force/index.js.map +1 -0
  21. package/lib/dagre/acyclic.js +62 -0
  22. package/lib/dagre/acyclic.js.map +1 -0
  23. package/lib/dagre/add-border-segments.js +37 -0
  24. package/lib/dagre/add-border-segments.js.map +1 -0
  25. package/lib/dagre/coordinate-system.js +65 -0
  26. package/lib/dagre/coordinate-system.js.map +1 -0
  27. package/lib/dagre/data/list.js +50 -0
  28. package/lib/dagre/data/list.js.map +1 -0
  29. package/lib/dagre/greedy-fas.js +147 -0
  30. package/lib/dagre/greedy-fas.js.map +1 -0
  31. package/lib/dagre/layout.js +470 -0
  32. package/lib/dagre/layout.js.map +1 -0
  33. package/lib/dagre/nesting-graph.js +153 -0
  34. package/lib/dagre/nesting-graph.js.map +1 -0
  35. package/lib/dagre/normalize.js +98 -0
  36. package/lib/dagre/normalize.js.map +1 -0
  37. package/lib/dagre/order/add-subgraph-constraints.js +45 -0
  38. package/lib/dagre/order/add-subgraph-constraints.js.map +1 -0
  39. package/lib/dagre/order/barycenter.js +23 -0
  40. package/lib/dagre/order/barycenter.js.map +1 -0
  41. package/lib/dagre/order/build-layer-graph.js +96 -0
  42. package/lib/dagre/order/build-layer-graph.js.map +1 -0
  43. package/lib/dagre/order/cross-count.js +63 -0
  44. package/lib/dagre/order/cross-count.js.map +1 -0
  45. package/lib/dagre/order/index.js +91 -0
  46. package/lib/dagre/order/index.js.map +1 -0
  47. package/lib/dagre/order/init-data-order.js +28 -0
  48. package/lib/dagre/order/init-data-order.js.map +1 -0
  49. package/lib/dagre/order/init-order.js +50 -0
  50. package/lib/dagre/order/init-order.js.map +1 -0
  51. package/lib/dagre/order/resolve-conflicts.js +121 -0
  52. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  53. package/lib/dagre/order/sort-subgraph.js +84 -0
  54. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  55. package/lib/dagre/order/sort.js +74 -0
  56. package/lib/dagre/order/sort.js.map +1 -0
  57. package/lib/dagre/parent-dummy-chains.js +80 -0
  58. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  59. package/lib/dagre/position/bk.js +398 -0
  60. package/lib/dagre/position/bk.js.map +1 -0
  61. package/lib/dagre/position/index.js +54 -0
  62. package/lib/dagre/position/index.js.map +1 -0
  63. package/lib/dagre/rank/feasible-tree.js +164 -0
  64. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  65. package/lib/dagre/rank/index.js +48 -0
  66. package/lib/dagre/rank/index.js.map +1 -0
  67. package/lib/dagre/rank/network-simplex.js +232 -0
  68. package/lib/dagre/rank/network-simplex.js.map +1 -0
  69. package/lib/dagre/rank/util.js +138 -0
  70. package/lib/dagre/rank/util.js.map +1 -0
  71. package/lib/dagre/util.js +289 -0
  72. package/lib/dagre/util.js.map +1 -0
  73. package/lib/dagre.js +552 -0
  74. package/lib/dagre.js.map +1 -0
  75. package/lib/force/forceNBody.js +123 -0
  76. package/lib/force/forceNBody.js.map +1 -0
  77. package/lib/force/index.js +805 -0
  78. package/lib/force/index.js.map +1 -0
  79. package/lib/force/types.js +2 -0
  80. package/lib/force/types.js.map +1 -0
  81. package/lib/forceAtlas2/body.js +91 -0
  82. package/lib/forceAtlas2/body.js.map +1 -0
  83. package/lib/forceAtlas2/index.js +562 -0
  84. package/lib/forceAtlas2/index.js.map +1 -0
  85. package/lib/forceAtlas2/quad.js +98 -0
  86. package/lib/forceAtlas2/quad.js.map +1 -0
  87. package/lib/forceAtlas2/quadTree.js +105 -0
  88. package/lib/forceAtlas2/quadTree.js.map +1 -0
  89. package/lib/fruchterman.js +376 -0
  90. package/lib/fruchterman.js.map +1 -0
  91. package/lib/grid.js +308 -0
  92. package/lib/grid.js.map +1 -0
  93. package/lib/index.js +17 -0
  94. package/lib/index.js.map +1 -0
  95. package/lib/mds.js +137 -0
  96. package/lib/mds.js.map +1 -0
  97. package/lib/radial/index.js +355 -0
  98. package/lib/radial/index.js.map +1 -0
  99. package/lib/radial/mds.js +29 -0
  100. package/lib/radial/mds.js.map +1 -0
  101. package/lib/radial/radial-nonoverlap-force.js +100 -0
  102. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  103. package/lib/random.js +98 -0
  104. package/lib/random.js.map +1 -0
  105. package/lib/registry.js +27 -0
  106. package/lib/registry.js.map +1 -0
  107. package/lib/supervisor.js +90 -0
  108. package/lib/supervisor.js.map +1 -0
  109. package/lib/types.js +4 -0
  110. package/lib/types.js.map +1 -0
  111. package/lib/util/array.js +2 -0
  112. package/lib/util/array.js.map +1 -0
  113. package/lib/util/common.d.ts +12 -0
  114. package/lib/util/common.js +32 -0
  115. package/lib/util/common.js.map +1 -0
  116. package/lib/util/function.js +126 -0
  117. package/lib/util/function.js.map +1 -0
  118. package/lib/util/gpu.js +214 -0
  119. package/lib/util/gpu.js.map +1 -0
  120. package/lib/util/index.js +7 -0
  121. package/lib/util/index.js.map +1 -0
  122. package/lib/util/math.js +257 -0
  123. package/lib/util/math.js.map +1 -0
  124. package/lib/util/number.js +5 -0
  125. package/lib/util/number.js.map +1 -0
  126. package/lib/util/object.js +42 -0
  127. package/lib/util/object.js.map +1 -0
  128. package/lib/util/string.js +15 -0
  129. package/lib/util/string.js.map +1 -0
  130. package/lib/worker.d.ts +1 -0
  131. package/lib/worker.js +45 -0
  132. package/lib/worker.js.map +1 -0
  133. package/package.json +1 -1
  134. package/dist/5fc550bbb6f708833d84.worker.js.map +0 -1
@@ -0,0 +1,562 @@
1
+ import { __assign, __awaiter, __generator, __read, __spreadArray } from "tslib";
2
+ import { isFunction, isNumber, isObject } from "@antv/util";
3
+ import { Graph as GGraph } from "@antv/graphlib";
4
+ import { cloneFormatData, isArray } from "../util";
5
+ import { handleSingleNodeGraph } from "../util/common";
6
+ import Body from "./body";
7
+ import Quad from "./quad";
8
+ import QuadTree from "./quadTree";
9
+ var DEFAULTS_LAYOUT_OPTIONS = {
10
+ center: [0, 0],
11
+ width: 300,
12
+ height: 300,
13
+ kr: 5,
14
+ kg: 1,
15
+ mode: "normal",
16
+ preventOverlap: false,
17
+ dissuadeHubs: false,
18
+ maxIteration: 0,
19
+ ks: 0.1,
20
+ ksmax: 10,
21
+ tao: 0.1,
22
+ };
23
+ /**
24
+ * Layout nodes with force atlas 2 model
25
+ *
26
+ * @example
27
+ * // Assign layout options when initialization.
28
+ * const layout = new ForceAtlas2Layout({ center: [100, 100] });
29
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
30
+ *
31
+ * // Or use different options later.
32
+ * const layout = new ForceAtlas2Layout({ center: [100, 100] });
33
+ * const positions = await layout.execute(graph, { center: [100, 100] }); // { nodes: [], edges: [] }
34
+ *
35
+ * // If you want to assign the positions directly to the nodes, use assign method.
36
+ * await layout.assign(graph, { center: [100, 100] });
37
+ */
38
+ var ForceAtlas2Layout = /** @class */ (function () {
39
+ function ForceAtlas2Layout(options) {
40
+ if (options === void 0) { options = {}; }
41
+ this.options = options;
42
+ this.id = "forceAtlas2";
43
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
44
+ }
45
+ /**
46
+ * Return the positions of nodes and edges(if needed).
47
+ */
48
+ ForceAtlas2Layout.prototype.execute = function (graph, options) {
49
+ return __awaiter(this, void 0, void 0, function () {
50
+ return __generator(this, function (_a) {
51
+ return [2 /*return*/, this.genericForceAtlas2Layout(false, graph, options)];
52
+ });
53
+ });
54
+ };
55
+ /**
56
+ * To directly assign the positions to the nodes.
57
+ */
58
+ ForceAtlas2Layout.prototype.assign = function (graph, options) {
59
+ return __awaiter(this, void 0, void 0, function () {
60
+ return __generator(this, function (_a) {
61
+ this.genericForceAtlas2Layout(true, graph, options);
62
+ return [2 /*return*/];
63
+ });
64
+ });
65
+ };
66
+ ForceAtlas2Layout.prototype.genericForceAtlas2Layout = function (assign, graph, options) {
67
+ return __awaiter(this, void 0, void 0, function () {
68
+ var edges, nodes, mergedOptions, width, height, prune, maxIteration, nodeSize, center, calcNodes, calcEdges, calcGraph, sizes, j, _a, source, target, sourceDegree, targetDegree, targetNode, sourceNode, postOptions;
69
+ return __generator(this, function (_b) {
70
+ edges = graph.getAllEdges();
71
+ nodes = graph.getAllNodes();
72
+ mergedOptions = this.formatOptions(options, nodes.length);
73
+ width = mergedOptions.width, height = mergedOptions.height, prune = mergedOptions.prune, maxIteration = mergedOptions.maxIteration, nodeSize = mergedOptions.nodeSize, center = mergedOptions.center;
74
+ if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length) || nodes.length === 1) {
75
+ return [2 /*return*/, handleSingleNodeGraph(graph, assign, center)];
76
+ }
77
+ calcNodes = nodes.map(function (node) { return cloneFormatData(node, [width, height]); });
78
+ calcEdges = edges.filter(function (edge) {
79
+ var source = edge.source, target = edge.target;
80
+ return source !== target;
81
+ });
82
+ calcGraph = new GGraph({
83
+ nodes: calcNodes,
84
+ edges: calcEdges,
85
+ });
86
+ sizes = this.getSizes(calcGraph, graph, nodeSize);
87
+ this.run(calcGraph, graph, maxIteration, sizes, assign, mergedOptions);
88
+ // if prune, place the leaves around their parents, and then re-layout for several iterations.
89
+ if (prune) {
90
+ for (j = 0; j < calcEdges.length; j += 1) {
91
+ _a = calcEdges[j], source = _a.source, target = _a.target;
92
+ sourceDegree = calcGraph.getDegree(source);
93
+ targetDegree = calcGraph.getDegree(source);
94
+ if (sourceDegree <= 1) {
95
+ targetNode = calcGraph.getNode(target);
96
+ calcGraph.mergeNodeData(source, {
97
+ x: targetNode.data.x,
98
+ y: targetNode.data.y,
99
+ });
100
+ }
101
+ else if (targetDegree <= 1) {
102
+ sourceNode = calcGraph.getNode(source);
103
+ calcGraph.mergeNodeData(target, {
104
+ x: sourceNode.data.x,
105
+ y: sourceNode.data.y,
106
+ });
107
+ }
108
+ }
109
+ postOptions = __assign(__assign({}, mergedOptions), { prune: false, barnesHut: false });
110
+ this.run(calcGraph, graph, 100, sizes, assign, postOptions);
111
+ }
112
+ return [2 /*return*/, {
113
+ nodes: calcNodes,
114
+ edges: edges,
115
+ }];
116
+ });
117
+ });
118
+ };
119
+ /**
120
+ * Init the node positions if there is no initial positions.
121
+ * And pre-calculate the size (max of width and height) for each node.
122
+ * @param calcGraph graph for calculation
123
+ * @param graph origin graph
124
+ * @param nodeSize node size config from layout options
125
+ * @returns {SizeMap} node'id mapped to max of its width and height
126
+ */
127
+ ForceAtlas2Layout.prototype.getSizes = function (calcGraph, graph, nodeSize) {
128
+ var nodes = calcGraph.getAllNodes();
129
+ var sizes = {};
130
+ for (var i = 0; i < nodes.length; i += 1) {
131
+ var _a = nodes[i], id = _a.id, data = _a.data;
132
+ sizes[id] = 10;
133
+ if (isNumber(data.size)) {
134
+ sizes[id] = data.size;
135
+ }
136
+ else if (isArray(data.size)) {
137
+ if (!isNaN(data.size[0]))
138
+ sizes[id] = Math.max(data.size[0]);
139
+ if (!isNaN(data.size[1]))
140
+ sizes[id] = Math.max(data.size[1]);
141
+ }
142
+ else if (isObject(data.size)) {
143
+ // @ts-ignore
144
+ sizes[id] = Math.max(data.size.width, data.size.height);
145
+ }
146
+ else if (isFunction(nodeSize)) {
147
+ var originNode = graph.getNode(id);
148
+ var size = nodeSize(originNode);
149
+ if (isArray(size)) {
150
+ sizes[id] = Math.max.apply(Math, __spreadArray([], __read(size)));
151
+ }
152
+ else {
153
+ sizes[id] = size;
154
+ }
155
+ }
156
+ else if (isArray(nodeSize)) {
157
+ sizes[id] = Math.max.apply(Math, __spreadArray([], __read(nodeSize)));
158
+ }
159
+ else if (isNumber(nodeSize)) {
160
+ sizes[id] = nodeSize;
161
+ }
162
+ }
163
+ return sizes;
164
+ };
165
+ /**
166
+ * Format the options.
167
+ * @param options input options
168
+ * @param nodeNum number of nodes
169
+ * @returns formatted options
170
+ */
171
+ ForceAtlas2Layout.prototype.formatOptions = function (options, nodeNum) {
172
+ if (options === void 0) { options = {}; }
173
+ var mergedOptions = __assign(__assign({}, this.options), options);
174
+ var center = mergedOptions.center, width = mergedOptions.width, height = mergedOptions.height, barnesHut = mergedOptions.barnesHut, prune = mergedOptions.prune, maxIteration = mergedOptions.maxIteration, kr = mergedOptions.kr, kg = mergedOptions.kg;
175
+ mergedOptions.width =
176
+ !width && typeof window !== "undefined" ? window.innerWidth : width;
177
+ mergedOptions.height =
178
+ !height && typeof window !== "undefined" ? window.innerHeight : height;
179
+ mergedOptions.center = !center
180
+ ? [mergedOptions.width / 2, mergedOptions.height / 2]
181
+ : center;
182
+ if (barnesHut === undefined && nodeNum > 250) {
183
+ mergedOptions.barnesHut = true;
184
+ }
185
+ if (prune === undefined && nodeNum > 100)
186
+ mergedOptions.prune = true;
187
+ if (maxIteration === 0 && !prune) {
188
+ mergedOptions.maxIteration = 250;
189
+ if (nodeNum <= 200 && nodeNum > 100)
190
+ mergedOptions.maxIteration = 1000;
191
+ else if (nodeNum > 200)
192
+ mergedOptions.maxIteration = 1200;
193
+ }
194
+ else if (maxIteration === 0 && prune) {
195
+ mergedOptions.maxIteration = 100;
196
+ if (nodeNum <= 200 && nodeNum > 100)
197
+ mergedOptions.maxIteration = 500;
198
+ else if (nodeNum > 200)
199
+ mergedOptions.maxIteration = 950;
200
+ }
201
+ if (!kr) {
202
+ mergedOptions.kr = 50;
203
+ if (nodeNum > 100 && nodeNum <= 500)
204
+ mergedOptions.kr = 20;
205
+ else if (nodeNum > 500)
206
+ mergedOptions.kr = 1;
207
+ }
208
+ if (!kg) {
209
+ mergedOptions.kg = 20;
210
+ if (nodeNum > 100 && nodeNum <= 500)
211
+ mergedOptions.kg = 10;
212
+ else if (nodeNum > 500)
213
+ mergedOptions.kg = 1;
214
+ }
215
+ return mergedOptions;
216
+ };
217
+ /**
218
+ * Loops for fa2.
219
+ * @param calcGraph graph for calculation
220
+ * @param graph original graph
221
+ * @param iteration iteration number
222
+ * @param sizes nodes' size
223
+ * @param options formatted layout options
224
+ * @returns
225
+ */
226
+ ForceAtlas2Layout.prototype.run = function (calcGraph, graph, iteration, sizes, assign, options) {
227
+ var kr = options.kr, barnesHut = options.barnesHut, onTick = options.onTick;
228
+ var calcNodes = calcGraph.getAllNodes();
229
+ var sg = 0;
230
+ var iter = iteration;
231
+ var forces = {};
232
+ var preForces = {};
233
+ var bodies = {};
234
+ for (var i = 0; i < calcNodes.length; i += 1) {
235
+ var _a = calcNodes[i], data = _a.data, id = _a.id;
236
+ forces[id] = [0, 0];
237
+ if (barnesHut) {
238
+ var params = {
239
+ id: i,
240
+ rx: data.x,
241
+ ry: data.y,
242
+ mass: 1,
243
+ g: kr,
244
+ degree: calcGraph.getDegree(id),
245
+ };
246
+ bodies[id] = new Body(params);
247
+ }
248
+ }
249
+ while (iter > 0) {
250
+ sg = this.oneStep(calcGraph, {
251
+ iter: iter,
252
+ preventOverlapIters: 50,
253
+ krPrime: 100,
254
+ sg: sg,
255
+ forces: forces,
256
+ preForces: preForces,
257
+ bodies: bodies,
258
+ sizes: sizes,
259
+ }, options);
260
+ iter--;
261
+ onTick === null || onTick === void 0 ? void 0 : onTick({
262
+ nodes: calcNodes,
263
+ edges: graph.getAllEdges(),
264
+ });
265
+ // if (assign) {
266
+ // calcNodes.forEach(({ id, data }) => graph.mergeNodeData(id, {
267
+ // x: data.x,
268
+ // y: data.y
269
+ // }))
270
+ // }
271
+ }
272
+ return calcGraph;
273
+ };
274
+ /**
275
+ * One step for a loop.
276
+ * @param graph graph for calculation
277
+ * @param params parameters for a loop
278
+ * @param options formatted layout's input options
279
+ * @returns
280
+ */
281
+ ForceAtlas2Layout.prototype.oneStep = function (graph, params, options) {
282
+ var iter = params.iter, preventOverlapIters = params.preventOverlapIters, krPrime = params.krPrime, sg = params.sg, preForces = params.preForces, bodies = params.bodies, sizes = params.sizes;
283
+ var forces = params.forces;
284
+ var preventOverlap = options.preventOverlap, barnesHut = options.barnesHut;
285
+ var nodes = graph.getAllNodes();
286
+ for (var i = 0; i < nodes.length; i += 1) {
287
+ var id = nodes[i].id;
288
+ preForces[id] = __spreadArray([], __read(forces[id]));
289
+ forces[id] = [0, 0];
290
+ }
291
+ // attractive forces, existing on every actual edge
292
+ forces = this.getAttrForces(graph, iter, preventOverlapIters, sizes, forces, options);
293
+ // repulsive forces and Gravity, existing on every node pair
294
+ // if preventOverlap, using the no-optimized method in the last preventOverlapIters instead.
295
+ if (barnesHut &&
296
+ ((preventOverlap && iter > preventOverlapIters) || !preventOverlap)) {
297
+ forces = this.getOptRepGraForces(graph, forces, bodies, options);
298
+ }
299
+ else {
300
+ forces = this.getRepGraForces(graph, iter, preventOverlapIters, forces, krPrime, sizes, options);
301
+ }
302
+ // update the positions
303
+ return this.updatePos(graph, forces, preForces, sg, options);
304
+ };
305
+ /**
306
+ * Calculate the attract forces for nodes.
307
+ * @param graph graph for calculation
308
+ * @param iter current iteration index
309
+ * @param preventOverlapIters the iteration number for preventing overlappings
310
+ * @param sizes nodes' sizes
311
+ * @param forces forces for nodes, which will be modified
312
+ * @param options formatted layout's input options
313
+ * @returns
314
+ */
315
+ ForceAtlas2Layout.prototype.getAttrForces = function (graph, iter, preventOverlapIters, sizes, forces, options) {
316
+ var preventOverlap = options.preventOverlap, dissuadeHubs = options.dissuadeHubs, mode = options.mode, prune = options.prune;
317
+ var edges = graph.getAllEdges();
318
+ for (var i = 0; i < edges.length; i += 1) {
319
+ var _a = edges[i], source = _a.source, target = _a.target;
320
+ var sourceNode = graph.getNode(source);
321
+ var targetNode = graph.getNode(target);
322
+ var sourceDegree = graph.getDegree(source);
323
+ var targetDegree = graph.getDegree(target);
324
+ if (prune && (sourceDegree <= 1 || targetDegree <= 1))
325
+ continue;
326
+ var dir = [
327
+ targetNode.data.x - sourceNode.data.x,
328
+ targetNode.data.y - sourceNode.data.y,
329
+ ];
330
+ var eucliDis = Math.hypot(dir[0], dir[1]);
331
+ eucliDis = eucliDis < 0.0001 ? 0.0001 : eucliDis;
332
+ dir[0] = dir[0] / eucliDis;
333
+ dir[1] = dir[1] / eucliDis;
334
+ if (preventOverlap && iter < preventOverlapIters) {
335
+ eucliDis = eucliDis - sizes[source] - sizes[target];
336
+ }
337
+ var fa1 = eucliDis;
338
+ var fa2 = fa1;
339
+ if (mode === "linlog") {
340
+ fa1 = Math.log(1 + eucliDis);
341
+ fa2 = fa1;
342
+ }
343
+ if (dissuadeHubs) {
344
+ fa1 = eucliDis / sourceDegree;
345
+ fa2 = eucliDis / targetDegree;
346
+ }
347
+ if (preventOverlap && iter < preventOverlapIters && eucliDis <= 0) {
348
+ fa1 = 0;
349
+ fa2 = 0;
350
+ }
351
+ else if (preventOverlap && iter < preventOverlapIters && eucliDis > 0) {
352
+ fa1 = eucliDis;
353
+ fa2 = eucliDis;
354
+ }
355
+ forces[source][0] += fa1 * dir[0];
356
+ forces[target][0] -= fa2 * dir[0];
357
+ forces[source][1] += fa1 * dir[1];
358
+ forces[target][1] -= fa2 * dir[1];
359
+ }
360
+ return forces;
361
+ };
362
+ /**
363
+ * Calculate the repulsive forces for nodes under barnesHut mode.
364
+ * @param graph graph for calculatiion
365
+ * @param forces forces for nodes, which will be modified
366
+ * @param bodies force body map
367
+ * @param options formatted layout's input options
368
+ * @returns
369
+ */
370
+ ForceAtlas2Layout.prototype.getOptRepGraForces = function (graph, forces, bodies, options) {
371
+ var kg = options.kg, center = options.center, prune = options.prune;
372
+ var nodes = graph.getAllNodes();
373
+ var nodeNum = nodes.length;
374
+ var minx = 9e10;
375
+ var maxx = -9e10;
376
+ var miny = 9e10;
377
+ var maxy = -9e10;
378
+ for (var i = 0; i < nodeNum; i += 1) {
379
+ var _a = nodes[i], id = _a.id, data = _a.data;
380
+ if (prune && graph.getDegree(id) <= 1)
381
+ continue;
382
+ bodies[id].setPos(data.x, data.y);
383
+ if (data.x >= maxx)
384
+ maxx = data.x;
385
+ if (data.x <= minx)
386
+ minx = data.x;
387
+ if (data.y >= maxy)
388
+ maxy = data.y;
389
+ if (data.y <= miny)
390
+ miny = data.y;
391
+ }
392
+ var width = Math.max(maxx - minx, maxy - miny);
393
+ var quadParams = {
394
+ xmid: (maxx + minx) / 2,
395
+ ymid: (maxy + miny) / 2,
396
+ length: width,
397
+ massCenter: center,
398
+ mass: nodeNum,
399
+ };
400
+ var quad = new Quad(quadParams);
401
+ var quadTree = new QuadTree(quad);
402
+ // build the tree, insert the nodes(quads) into the tree
403
+ for (var i = 0; i < nodeNum; i += 1) {
404
+ var id = nodes[i].id;
405
+ if (prune && graph.getDegree(id) <= 1)
406
+ continue;
407
+ if (bodies[id].in(quad))
408
+ quadTree.insert(bodies[id]);
409
+ }
410
+ // update the repulsive forces and the gravity.
411
+ for (var i = 0; i < nodeNum; i += 1) {
412
+ var _b = nodes[i], id = _b.id, data = _b.data;
413
+ var degree = graph.getDegree(id);
414
+ if (prune && degree <= 1)
415
+ continue;
416
+ bodies[id].resetForce();
417
+ quadTree.updateForce(bodies[id]);
418
+ forces[id][0] -= bodies[id].fx;
419
+ forces[id][1] -= bodies[id].fy;
420
+ // gravity
421
+ var dir = [data.x - center[0], data.y - center[1]];
422
+ var eucliDis = Math.hypot(dir[0], dir[1]);
423
+ eucliDis = eucliDis < 0.0001 ? 0.0001 : eucliDis;
424
+ dir[0] = dir[0] / eucliDis;
425
+ dir[1] = dir[1] / eucliDis;
426
+ var fg = kg * (degree + 1); // tslint:disable-line
427
+ forces[id][0] -= fg * dir[0];
428
+ forces[id][1] -= fg * dir[1];
429
+ }
430
+ return forces;
431
+ };
432
+ /**
433
+ * Calculate the repulsive forces for nodes.
434
+ * @param graph graph for calculatiion
435
+ * @param iter current iteration index
436
+ * @param preventOverlapIters the iteration number for preventing overlappings
437
+ * @param forces forces for nodes, which will be modified
438
+ * @param krPrime larger the krPrime, larger the repulsive force
439
+ * @param sizes nodes' sizes
440
+ * @param options formatted layout's input options
441
+ * @returns
442
+ */
443
+ ForceAtlas2Layout.prototype.getRepGraForces = function (graph, iter, preventOverlapIters, forces, krPrime, sizes, options) {
444
+ var preventOverlap = options.preventOverlap, kr = options.kr, kg = options.kg, center = options.center, prune = options.prune;
445
+ var nodes = graph.getAllNodes();
446
+ var nodeNum = nodes.length;
447
+ for (var i = 0; i < nodeNum; i += 1) {
448
+ var nodei = nodes[i];
449
+ var degreei = graph.getDegree(nodei.id);
450
+ for (var j = i + 1; j < nodeNum; j += 1) {
451
+ var nodej = nodes[j];
452
+ var degreej = graph.getDegree(nodej.id);
453
+ if (prune && (degreei <= 1 || degreej <= 1))
454
+ continue;
455
+ var dir_1 = [nodej.data.x - nodei.data.x, nodej.data.y - nodei.data.y];
456
+ var eucliDis_1 = Math.hypot(dir_1[0], dir_1[1]);
457
+ eucliDis_1 = eucliDis_1 < 0.0001 ? 0.0001 : eucliDis_1;
458
+ dir_1[0] = dir_1[0] / eucliDis_1;
459
+ dir_1[1] = dir_1[1] / eucliDis_1;
460
+ if (preventOverlap && iter < preventOverlapIters) {
461
+ eucliDis_1 = eucliDis_1 - sizes[nodei.id] - sizes[nodej.id];
462
+ }
463
+ var fr = (kr * (degreei + 1) * (degreej + 1)) / eucliDis_1;
464
+ if (preventOverlap && iter < preventOverlapIters && eucliDis_1 < 0) {
465
+ fr = krPrime * (degreei + 1) * (degreej + 1);
466
+ }
467
+ else if (preventOverlap &&
468
+ iter < preventOverlapIters &&
469
+ eucliDis_1 === 0) {
470
+ fr = 0;
471
+ }
472
+ else if (preventOverlap &&
473
+ iter < preventOverlapIters &&
474
+ eucliDis_1 > 0) {
475
+ fr = (kr * (degreei + 1) * (degreej + 1)) / eucliDis_1;
476
+ }
477
+ forces[nodei.id][0] -= fr * dir_1[0];
478
+ forces[nodej.id][0] += fr * dir_1[0];
479
+ forces[nodei.id][1] -= fr * dir_1[1];
480
+ forces[nodej.id][1] += fr * dir_1[1];
481
+ }
482
+ // gravity
483
+ var dir = [nodei.data.x - center[0], nodei.data.y - center[1]];
484
+ var eucliDis = Math.hypot(dir[0], dir[1]);
485
+ dir[0] = dir[0] / eucliDis;
486
+ dir[1] = dir[1] / eucliDis;
487
+ var fg = kg * (degreei + 1); // tslint:disable-line
488
+ forces[nodei.id][0] -= fg * dir[0];
489
+ forces[nodei.id][1] -= fg * dir[1];
490
+ }
491
+ return forces;
492
+ };
493
+ /**
494
+ * Update node positions.
495
+ * @param graph graph for calculatiion
496
+ * @param forces forces for nodes, which will be modified
497
+ * @param preForces previous forces for nodes, which will be modified
498
+ * @param sg constant for move distance of one step
499
+ * @param options formatted layout's input options
500
+ * @returns
501
+ */
502
+ ForceAtlas2Layout.prototype.updatePos = function (graph, forces, preForces, sg, options) {
503
+ var ks = options.ks, tao = options.tao, prune = options.prune, ksmax = options.ksmax;
504
+ var nodes = graph.getAllNodes();
505
+ var nodeNum = nodes.length;
506
+ var swgns = [];
507
+ var trans = [];
508
+ // swg(G) and tra(G)
509
+ var swgG = 0;
510
+ var traG = 0;
511
+ var usingSg = sg;
512
+ for (var i = 0; i < nodeNum; i += 1) {
513
+ var id = nodes[i].id;
514
+ var degree = graph.getDegree(id);
515
+ if (prune && degree <= 1)
516
+ continue;
517
+ var minus = [
518
+ forces[id][0] - preForces[id][0],
519
+ forces[id][1] - preForces[id][1],
520
+ ];
521
+ var minusNorm = Math.hypot(minus[0], minus[1]);
522
+ var add = [
523
+ forces[id][0] + preForces[id][0],
524
+ forces[id][1] + preForces[id][1],
525
+ ];
526
+ var addNorm = Math.hypot(add[0], add[1]);
527
+ swgns[i] = minusNorm;
528
+ trans[i] = addNorm / 2;
529
+ swgG += (degree + 1) * swgns[i];
530
+ traG += (degree + 1) * trans[i];
531
+ }
532
+ var preSG = usingSg;
533
+ usingSg = (tao * traG) / swgG;
534
+ if (preSG !== 0) {
535
+ usingSg = usingSg > 1.5 * preSG ? 1.5 * preSG : usingSg;
536
+ }
537
+ // update the node positions
538
+ for (var i = 0; i < nodeNum; i += 1) {
539
+ var _a = nodes[i], id = _a.id, data = _a.data;
540
+ var degree = graph.getDegree(id);
541
+ if (prune && degree <= 1)
542
+ continue;
543
+ if (isNumber(data.fx) && isNumber(data.fy))
544
+ continue;
545
+ var sn = (ks * usingSg) / (1 + usingSg * Math.sqrt(swgns[i]));
546
+ var absForce = Math.hypot(forces[id][0], forces[id][1]);
547
+ absForce = absForce < 0.0001 ? 0.0001 : absForce;
548
+ var max = ksmax / absForce;
549
+ sn = sn > max ? max : sn;
550
+ var dnx = sn * forces[id][0];
551
+ var dny = sn * forces[id][1];
552
+ graph.mergeNodeData(id, {
553
+ x: data.x + dnx,
554
+ y: data.y + dny,
555
+ });
556
+ }
557
+ return usingSg;
558
+ };
559
+ return ForceAtlas2Layout;
560
+ }());
561
+ export { ForceAtlas2Layout };
562
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forceAtlas2/index.ts"],"names":[],"mappings":"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"}