@antv/layout 1.2.14-beta.1 → 1.2.14-beta.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.
@@ -1,313 +0,0 @@
1
- import { __awaiter, __rest } from "tslib";
2
- import { isFunction, isNumber, isObject } from '@antv/util';
3
- import * as d3Force from 'd3-force';
4
- import { cloneFormatData, isArray } from '../util';
5
- import forceInBox from './forceInBox';
6
- const DEFAULTS_LAYOUT_OPTIONS = {
7
- center: [0, 0],
8
- preventOverlap: false,
9
- nodeSize: undefined,
10
- nodeSpacing: undefined,
11
- linkDistance: 50,
12
- forceSimulation: null,
13
- alphaDecay: 0.028,
14
- alphaMin: 0.001,
15
- alpha: 0.3,
16
- collideStrength: 1,
17
- clustering: false,
18
- clusterNodeStrength: -1,
19
- clusterEdgeStrength: 0.1,
20
- clusterEdgeDistance: 100,
21
- clusterFociStrength: 0.8,
22
- clusterNodeSize: 10,
23
- };
24
- /**
25
- * Layout the nodes' positions with d3's basic classic force
26
- *
27
- * @example
28
- * // Assign layout options when initialization.
29
- * const layout = new D3ForceLayout({ center: [100, 100] });
30
- * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
31
- *
32
- * // Or use different options later.
33
- * const layout = new D3ForceLayout({ center: [100, 100] });
34
- * const positions = await layout.execute(graph, { center: [100, 100] }); // { nodes: [], edges: [] }
35
- *
36
- * // If you want to assign the positions directly to the nodes, use assign method.
37
- * await layout.assign(graph, { center: [100, 100] });
38
- */
39
- export class D3ForceLayout {
40
- constructor(options = {}) {
41
- this.options = options;
42
- this.id = 'd3force';
43
- this.options = Object.assign(Object.assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
44
- }
45
- /**
46
- * Return the positions of nodes and edges(if needed).
47
- */
48
- execute(graph, options) {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- return this.genericForceLayout(false, graph, options);
51
- });
52
- }
53
- /**
54
- * To directly assign the positions to the nodes.
55
- */
56
- assign(graph, options) {
57
- return __awaiter(this, void 0, void 0, function* () {
58
- this.genericForceLayout(true, graph, options);
59
- });
60
- }
61
- /**
62
- * Stop simulation immediately.
63
- */
64
- stop() {
65
- var _a;
66
- (_a = this.forceSimulation) === null || _a === void 0 ? void 0 : _a.stop();
67
- }
68
- /**
69
- * Manually steps the simulation by the specified number of iterations.
70
- * @see https://github.com/d3/d3-force#simulation_tick
71
- */
72
- tick(iterations = 1) {
73
- this.forceSimulation.tick(iterations);
74
- const result = {
75
- nodes: formatOutNodes(this.lastLayoutNodes),
76
- edges: formatOutEdges(this.lastLayoutEdges),
77
- };
78
- if (this.lastAssign) {
79
- result.nodes.forEach((node) => this.lastGraph.mergeNodeData(node.id, {
80
- x: node.data.x,
81
- y: node.data.y,
82
- }));
83
- }
84
- return result;
85
- }
86
- genericForceLayout(assign, graph, options) {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- const mergedOptions = Object.assign(Object.assign({}, this.options), options);
89
- const nodes = graph.getAllNodes();
90
- const edges = graph.getAllEdges();
91
- const layoutNodes = nodes.map((node) => {
92
- var _a, _b;
93
- return (Object.assign(Object.assign({}, cloneFormatData(node)), { x: (_a = node.data) === null || _a === void 0 ? void 0 : _a.x, y: (_b = node.data) === null || _b === void 0 ? void 0 : _b.y }));
94
- });
95
- const layoutEdges = edges.map((edge) => cloneFormatData(edge));
96
- // Use them later in `tick`.
97
- this.lastLayoutNodes = layoutNodes;
98
- this.lastLayoutEdges = layoutEdges;
99
- this.lastAssign = assign;
100
- this.lastGraph = graph;
101
- const { alphaMin, alphaDecay, alpha, nodeStrength, edgeStrength, linkDistance, clustering, clusterFociStrength, clusterEdgeDistance, clusterEdgeStrength, clusterNodeStrength, clusterNodeSize, collideStrength = 1, center = [0, 0], preventOverlap, nodeSize, nodeSpacing, onTick, } = mergedOptions;
102
- let { forceSimulation } = mergedOptions;
103
- return new Promise((resolve) => {
104
- if (!forceSimulation) {
105
- try {
106
- // 定义节点的力
107
- const nodeForce = d3Force.forceManyBody();
108
- if (nodeStrength) {
109
- nodeForce.strength(nodeStrength);
110
- }
111
- forceSimulation = d3Force.forceSimulation().nodes(layoutNodes);
112
- if (clustering) {
113
- const clusterForce = forceInBox();
114
- clusterForce
115
- .centerX(center[0])
116
- .centerY(center[1])
117
- .template('force')
118
- .strength(clusterFociStrength);
119
- if (layoutEdges) {
120
- clusterForce.links(layoutEdges);
121
- }
122
- if (layoutNodes) {
123
- clusterForce.nodes(layoutNodes);
124
- }
125
- clusterForce
126
- .forceLinkDistance(clusterEdgeDistance)
127
- .forceLinkStrength(clusterEdgeStrength)
128
- .forceCharge(clusterNodeStrength)
129
- .forceNodeSize(clusterNodeSize);
130
- forceSimulation.force('group', clusterForce);
131
- }
132
- forceSimulation
133
- .force('center', d3Force.forceCenter(center[0], center[1]))
134
- .force('charge', nodeForce)
135
- .alpha(alpha)
136
- .alphaDecay(alphaDecay)
137
- .alphaMin(alphaMin);
138
- if (preventOverlap) {
139
- this.overlapProcess(forceSimulation, {
140
- nodeSize,
141
- nodeSpacing,
142
- collideStrength,
143
- });
144
- }
145
- // 如果有边,定义边的力
146
- if (layoutEdges) {
147
- // d3 的 forceLayout 会重新生成边的数据模型,为了避免污染源数据
148
- const edgeForce = d3Force
149
- .forceLink()
150
- .id((d) => d.id)
151
- .links(layoutEdges);
152
- if (edgeStrength) {
153
- edgeForce.strength(edgeStrength);
154
- }
155
- if (linkDistance) {
156
- edgeForce.distance(linkDistance);
157
- }
158
- forceSimulation.force('link', edgeForce);
159
- }
160
- forceSimulation
161
- .on('tick', () => {
162
- const outNodes = formatOutNodes(layoutNodes);
163
- onTick === null || onTick === void 0 ? void 0 : onTick({
164
- nodes: outNodes,
165
- edges: formatOutEdges(layoutEdges),
166
- });
167
- if (assign) {
168
- outNodes.forEach((node) => graph.mergeNodeData(node.id, {
169
- x: node.data.x,
170
- y: node.data.y,
171
- }));
172
- }
173
- })
174
- .on('end', () => {
175
- const outNodes = formatOutNodes(layoutNodes);
176
- if (assign) {
177
- outNodes.forEach((node) => graph.mergeNodeData(node.id, {
178
- x: node.data.x,
179
- y: node.data.y,
180
- }));
181
- }
182
- resolve({
183
- nodes: outNodes,
184
- edges: formatOutEdges(layoutEdges),
185
- });
186
- });
187
- }
188
- catch (e) {
189
- console.warn(e);
190
- }
191
- }
192
- else {
193
- // forceSimulation is defined
194
- if (clustering) {
195
- const clusterForce = forceInBox();
196
- clusterForce.nodes(layoutNodes);
197
- clusterForce.links(layoutEdges);
198
- }
199
- forceSimulation.nodes(layoutNodes);
200
- if (layoutEdges) {
201
- // d3 的 forceLayout 会重新生成边的数据模型,为了避免污染源数据
202
- const edgeForce = d3Force
203
- .forceLink()
204
- .id((d) => d.id)
205
- .links(layoutEdges);
206
- if (edgeStrength) {
207
- edgeForce.strength(edgeStrength);
208
- }
209
- if (linkDistance) {
210
- edgeForce.distance(linkDistance);
211
- }
212
- forceSimulation.force('link', edgeForce);
213
- }
214
- if (preventOverlap) {
215
- this.overlapProcess(forceSimulation, {
216
- nodeSize,
217
- nodeSpacing,
218
- collideStrength,
219
- });
220
- }
221
- forceSimulation.alpha(alpha).restart();
222
- // since d3 writes x and y as node's first level properties, format them into data
223
- const outNodes = formatOutNodes(layoutNodes);
224
- const outEdges = formatOutEdges(layoutEdges);
225
- if (assign) {
226
- outNodes.forEach((node) => graph.mergeNodeData(node.id, {
227
- x: node.data.x,
228
- y: node.data.y,
229
- }));
230
- }
231
- resolve({
232
- nodes: outNodes,
233
- edges: outEdges,
234
- });
235
- }
236
- this.forceSimulation = forceSimulation;
237
- });
238
- });
239
- }
240
- /**
241
- * Prevent overlappings.
242
- * @param {object} simulation force simulation of d3
243
- */
244
- overlapProcess(simulation, options) {
245
- const { nodeSize, nodeSpacing, collideStrength } = options;
246
- let nodeSizeFunc;
247
- let nodeSpacingFunc;
248
- if (isNumber(nodeSpacing)) {
249
- nodeSpacingFunc = () => nodeSpacing;
250
- }
251
- else if (isFunction(nodeSpacing)) {
252
- nodeSpacingFunc = nodeSpacing;
253
- }
254
- else {
255
- nodeSpacingFunc = () => 0;
256
- }
257
- if (!nodeSize) {
258
- nodeSizeFunc = (d) => {
259
- if (d.size) {
260
- if (isArray(d.size)) {
261
- const res = d.size[0] > d.size[1] ? d.size[0] : d.size[1];
262
- return res / 2 + nodeSpacingFunc(d);
263
- }
264
- if (isObject(d.size)) {
265
- const res = d.size.width > d.size.height ? d.size.width : d.size.height;
266
- return res / 2 + nodeSpacingFunc(d);
267
- }
268
- return d.size / 2 + nodeSpacingFunc(d);
269
- }
270
- return 10 + nodeSpacingFunc(d);
271
- };
272
- }
273
- else if (isFunction(nodeSize)) {
274
- nodeSizeFunc = (d) => {
275
- const size = nodeSize(d);
276
- return size + nodeSpacingFunc(d);
277
- };
278
- }
279
- else if (isArray(nodeSize)) {
280
- const larger = nodeSize[0] > nodeSize[1] ? nodeSize[0] : nodeSize[1];
281
- const radius = larger / 2;
282
- nodeSizeFunc = (d) => radius + nodeSpacingFunc(d);
283
- }
284
- else if (isNumber(nodeSize)) {
285
- const radius = nodeSize / 2;
286
- nodeSizeFunc = (d) => radius + nodeSpacingFunc(d);
287
- }
288
- else {
289
- nodeSizeFunc = () => 10;
290
- }
291
- // forceCollide's parameter is a radius
292
- simulation.force('collisionForce', d3Force.forceCollide(nodeSizeFunc).strength(collideStrength));
293
- }
294
- }
295
- /**
296
- * Format the calculation nodes into output nodes.
297
- * Since d3 reads properties in plain node data object which is not compact to the OutNode
298
- * @param layoutNodes
299
- * @returns
300
- */
301
- const formatOutNodes = (layoutNodes) => layoutNodes.map((node) => {
302
- const { x, y } = node, others = __rest(node, ["x", "y"]);
303
- return Object.assign(Object.assign({}, others), { data: Object.assign(Object.assign({}, others.data), { x,
304
- y }) });
305
- });
306
- /**
307
- * d3 will modify `source` and `target` on edge object.
308
- */
309
- const formatOutEdges = (edges) => edges.map((edge) => {
310
- const { source, target } = edge, rest = __rest(edge, ["source", "target"]);
311
- return Object.assign(Object.assign({}, rest), { source: source.id, target: target.id });
312
- });
313
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/d3Force/index.ts"],"names":[],"mappings":"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"}