@antv/layout 1.2.0 → 1.2.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 (142) hide show
  1. package/dist/0229766b7896aada2515.worker.js +2 -0
  2. package/dist/0229766b7896aada2515.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.d.ts +18 -0
  6. package/lib/bundle-entry.js +19 -0
  7. package/lib/bundle-entry.js.map +1 -0
  8. package/lib/bundle-supervisor.d.ts +51 -0
  9. package/lib/bundle-supervisor.js +93 -0
  10. package/lib/bundle-supervisor.js.map +1 -0
  11. package/lib/bundle-worker.d.ts +3 -0
  12. package/lib/bundle-worker.js +53 -0
  13. package/lib/bundle-worker.js.map +1 -0
  14. package/lib/circular.js +258 -0
  15. package/lib/circular.js.map +1 -0
  16. package/lib/concentric.js +221 -0
  17. package/lib/concentric.js.map +1 -0
  18. package/lib/d3Force/forceInBox.js +331 -0
  19. package/lib/d3Force/forceInBox.js.map +1 -0
  20. package/lib/d3Force/index.js +339 -0
  21. package/lib/d3Force/index.js.map +1 -0
  22. package/lib/dagre/acyclic.js +62 -0
  23. package/lib/dagre/acyclic.js.map +1 -0
  24. package/lib/dagre/add-border-segments.js +37 -0
  25. package/lib/dagre/add-border-segments.js.map +1 -0
  26. package/lib/dagre/coordinate-system.js +65 -0
  27. package/lib/dagre/coordinate-system.js.map +1 -0
  28. package/lib/dagre/data/list.js +50 -0
  29. package/lib/dagre/data/list.js.map +1 -0
  30. package/lib/dagre/greedy-fas.js +147 -0
  31. package/lib/dagre/greedy-fas.js.map +1 -0
  32. package/lib/dagre/layout.js +468 -0
  33. package/lib/dagre/layout.js.map +1 -0
  34. package/lib/dagre/nesting-graph.js +153 -0
  35. package/lib/dagre/nesting-graph.js.map +1 -0
  36. package/lib/dagre/normalize.js +98 -0
  37. package/lib/dagre/normalize.js.map +1 -0
  38. package/lib/dagre/order/add-subgraph-constraints.js +41 -0
  39. package/lib/dagre/order/add-subgraph-constraints.js.map +1 -0
  40. package/lib/dagre/order/barycenter.js +23 -0
  41. package/lib/dagre/order/barycenter.js.map +1 -0
  42. package/lib/dagre/order/build-layer-graph.js +96 -0
  43. package/lib/dagre/order/build-layer-graph.js.map +1 -0
  44. package/lib/dagre/order/cross-count.js +63 -0
  45. package/lib/dagre/order/cross-count.js.map +1 -0
  46. package/lib/dagre/order/index.js +91 -0
  47. package/lib/dagre/order/index.js.map +1 -0
  48. package/lib/dagre/order/init-data-order.js +28 -0
  49. package/lib/dagre/order/init-data-order.js.map +1 -0
  50. package/lib/dagre/order/init-order.js +50 -0
  51. package/lib/dagre/order/init-order.js.map +1 -0
  52. package/lib/dagre/order/resolve-conflicts.js +121 -0
  53. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  54. package/lib/dagre/order/sort-subgraph.js +84 -0
  55. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  56. package/lib/dagre/order/sort.js +74 -0
  57. package/lib/dagre/order/sort.js.map +1 -0
  58. package/lib/dagre/parent-dummy-chains.js +80 -0
  59. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  60. package/lib/dagre/position/bk.js +398 -0
  61. package/lib/dagre/position/bk.js.map +1 -0
  62. package/lib/dagre/position/index.js +54 -0
  63. package/lib/dagre/position/index.js.map +1 -0
  64. package/lib/dagre/rank/feasible-tree.js +164 -0
  65. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  66. package/lib/dagre/rank/index.js +48 -0
  67. package/lib/dagre/rank/index.js.map +1 -0
  68. package/lib/dagre/rank/network-simplex.js +232 -0
  69. package/lib/dagre/rank/network-simplex.js.map +1 -0
  70. package/lib/dagre/rank/util.js +138 -0
  71. package/lib/dagre/rank/util.js.map +1 -0
  72. package/lib/dagre/util.js +289 -0
  73. package/lib/dagre/util.js.map +1 -0
  74. package/lib/dagre.d.ts +1 -2
  75. package/lib/dagre.js +543 -0
  76. package/lib/dagre.js.map +1 -0
  77. package/lib/force/forceNBody.js +103 -0
  78. package/lib/force/forceNBody.js.map +1 -0
  79. package/lib/force/index.js +797 -0
  80. package/lib/force/index.js.map +1 -0
  81. package/lib/force/types.js +2 -0
  82. package/lib/force/types.js.map +1 -0
  83. package/lib/forceAtlas2/body.js +91 -0
  84. package/lib/forceAtlas2/body.js.map +1 -0
  85. package/lib/forceAtlas2/index.js +562 -0
  86. package/lib/forceAtlas2/index.js.map +1 -0
  87. package/lib/forceAtlas2/quad.js +98 -0
  88. package/lib/forceAtlas2/quad.js.map +1 -0
  89. package/lib/forceAtlas2/quadTree.js +105 -0
  90. package/lib/forceAtlas2/quadTree.js.map +1 -0
  91. package/lib/fruchterman.js +376 -0
  92. package/lib/fruchterman.js.map +1 -0
  93. package/lib/grid.js +308 -0
  94. package/lib/grid.js.map +1 -0
  95. package/lib/index.js +16 -0
  96. package/lib/index.js.map +1 -0
  97. package/lib/mds.js +137 -0
  98. package/lib/mds.js.map +1 -0
  99. package/lib/radial/index.js +355 -0
  100. package/lib/radial/index.js.map +1 -0
  101. package/lib/radial/mds.js +29 -0
  102. package/lib/radial/mds.js.map +1 -0
  103. package/lib/radial/radial-nonoverlap-force.js +100 -0
  104. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  105. package/lib/random.js +98 -0
  106. package/lib/random.js.map +1 -0
  107. package/lib/registry.d.ts +0 -1
  108. package/lib/registry.js +25 -0
  109. package/lib/registry.js.map +1 -0
  110. package/lib/supervisor.js +86 -0
  111. package/lib/supervisor.js.map +1 -0
  112. package/lib/types.js +4 -0
  113. package/lib/types.js.map +1 -0
  114. package/lib/util/array.js +2 -0
  115. package/lib/util/array.js.map +1 -0
  116. package/lib/util/common.d.ts +12 -0
  117. package/lib/util/common.js +32 -0
  118. package/lib/util/common.js.map +1 -0
  119. package/lib/util/function.js +124 -0
  120. package/lib/util/function.js.map +1 -0
  121. package/lib/util/gpu.js +214 -0
  122. package/lib/util/gpu.js.map +1 -0
  123. package/lib/util/index.js +7 -0
  124. package/lib/util/index.js.map +1 -0
  125. package/lib/util/math.js +228 -0
  126. package/lib/util/math.js.map +1 -0
  127. package/lib/util/number.js +5 -0
  128. package/lib/util/number.js.map +1 -0
  129. package/lib/util/object.js +42 -0
  130. package/lib/util/object.js.map +1 -0
  131. package/lib/util/string.js +15 -0
  132. package/lib/util/string.js.map +1 -0
  133. package/lib/worker.d.ts +1 -3
  134. package/lib/worker.js +45 -0
  135. package/lib/worker.js.map +1 -0
  136. package/package.json +6 -5
  137. package/dist/5e37927bd3e57252658c.worker.js +0 -2
  138. package/dist/5e37927bd3e57252658c.worker.js.map +0 -1
  139. package/esm/5e37927bd3e57252658c.worker.js +0 -2
  140. package/esm/5e37927bd3e57252658c.worker.js.map +0 -1
  141. package/esm/index.esm.js +0 -2
  142. package/esm/index.esm.js.map +0 -1
package/lib/dagre.js ADDED
@@ -0,0 +1,543 @@
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
+ import { Graph } from "@antv/graphlib";
3
+ import { isNumber } from "@antv/util";
4
+ import { layout } from "./dagre/layout";
5
+ import { cloneFormatData, formatNumberFn, formatNodeSize } from "./util";
6
+ var DEFAULTS_LAYOUT_OPTIONS = {
7
+ rankdir: "TB",
8
+ nodesep: 50,
9
+ ranksep: 50,
10
+ edgeLabelSpace: true,
11
+ controlPoints: false,
12
+ radial: false,
13
+ focusNode: null, // radial 为 true 时生效,关注的节点
14
+ };
15
+ /**
16
+ * Layout arranging the nodes in a circle.
17
+ *
18
+ * @example
19
+ * // Assign layout options when initialization.
20
+ * const layout = new CircularLayout({ radius: 10 });
21
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
22
+ *
23
+ * // Or use different options later.
24
+ * const layout = new CircularLayout({ radius: 10 });
25
+ * const positions = await layout.execute(graph, { radius: 20 }); // { nodes: [], edges: [] }
26
+ *
27
+ * // If you want to assign the positions directly to the nodes, use assign method.
28
+ * await layout.assign(graph, { radius: 20 });
29
+ */
30
+ var DagreLayout = /** @class */ (function () {
31
+ function DagreLayout(options) {
32
+ if (options === void 0) { options = {}; }
33
+ this.options = options;
34
+ this.id = "dagre";
35
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
36
+ }
37
+ /**
38
+ * Return the positions of nodes and edges(if needed).
39
+ */
40
+ DagreLayout.prototype.execute = function (graph, options) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ return [2 /*return*/, this.genericDagreLayout(false, graph, options)];
44
+ });
45
+ });
46
+ };
47
+ /**
48
+ * To directly assign the positions to the nodes.
49
+ */
50
+ DagreLayout.prototype.assign = function (graph, options) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ return __generator(this, function (_a) {
53
+ switch (_a.label) {
54
+ case 0: return [4 /*yield*/, this.genericDagreLayout(true, graph, options)];
55
+ case 1:
56
+ _a.sent();
57
+ return [2 /*return*/];
58
+ }
59
+ });
60
+ });
61
+ };
62
+ DagreLayout.prototype.genericDagreLayout = function (assign, graph, options) {
63
+ return __awaiter(this, void 0, void 0, function () {
64
+ var mergedOptions, nodeSize, align, _a, rankdir, ranksep, nodesep, ranksepFunc, nodesepFunc, edgeLabelSpace, nodeOrder, begin, controlPoints, radial, g, ranksepfunc, nodesepfunc, horisep, vertisep, nodeSizeFunc, nodes, edges, layoutTopLeft, minX_1, minY_1, isHorizontal, layerCoords_1, isInvert, layerCoordSort, layerCoordsArr_1, isDifferentLayer_1, filterControlPointsOutOfBoundary_1, layoutNodes, layoutEdges, result;
65
+ return __generator(this, function (_b) {
66
+ mergedOptions = __assign(__assign({}, this.options), options);
67
+ nodeSize = mergedOptions.nodeSize, align = mergedOptions.align, _a = mergedOptions.rankdir, rankdir = _a === void 0 ? "TB" : _a, ranksep = mergedOptions.ranksep, nodesep = mergedOptions.nodesep, ranksepFunc = mergedOptions.ranksepFunc, nodesepFunc = mergedOptions.nodesepFunc, edgeLabelSpace = mergedOptions.edgeLabelSpace, nodeOrder = mergedOptions.nodeOrder, begin = mergedOptions.begin, controlPoints = mergedOptions.controlPoints, radial = mergedOptions.radial;
68
+ g = new Graph({
69
+ tree: [],
70
+ });
71
+ ranksepfunc = formatNumberFn(ranksep || 50, ranksepFunc);
72
+ nodesepfunc = formatNumberFn(nodesep || 50, nodesepFunc);
73
+ horisep = nodesepfunc;
74
+ vertisep = ranksepfunc;
75
+ if (rankdir === "LR" || rankdir === "RL") {
76
+ horisep = ranksepfunc;
77
+ vertisep = nodesepfunc;
78
+ }
79
+ nodeSizeFunc = formatNodeSize(nodeSize, undefined);
80
+ nodes = graph.getAllNodes();
81
+ edges = graph.getAllEdges();
82
+ nodes
83
+ .forEach(function (node) {
84
+ var size = nodeSizeFunc(node);
85
+ var verti = vertisep(node);
86
+ var hori = horisep(node);
87
+ // FIXME: support 2 dimensions?
88
+ // const width = size[0] + 2 * hori;
89
+ // const height = size[1] + 2 * verti;
90
+ var width = size + 2 * hori;
91
+ var height = size + 2 * verti;
92
+ var layer = node.data.layer;
93
+ if (isNumber(layer)) {
94
+ // 如果有layer属性,加入到node的label中
95
+ g.addNode({
96
+ id: node.id,
97
+ data: { width: width, height: height, layer: layer },
98
+ });
99
+ }
100
+ else {
101
+ g.addNode({
102
+ id: node.id,
103
+ data: { width: width, height: height },
104
+ });
105
+ }
106
+ // TODO: combo
107
+ // if (this.sortByCombo && node.comboId) {
108
+ // if (!comboMap[node.comboId]) {
109
+ // comboMap[node.comboId] = { id: node.comboId };
110
+ // g.setNode(node.comboId, {});
111
+ // }
112
+ // g.setParent(node.id, node.comboId);
113
+ // }
114
+ });
115
+ edges.forEach(function (edge) {
116
+ // dagrejs Wiki https://github.com/dagrejs/dagre/wiki#configuring-the-layout
117
+ g.addEdge({
118
+ id: edge.id,
119
+ source: edge.source,
120
+ target: edge.target,
121
+ data: {
122
+ weight: edge.data.weight || 1,
123
+ },
124
+ });
125
+ });
126
+ // TODO: combo & prevGraph
127
+ layout(g, {
128
+ prevGraph: null,
129
+ edgeLabelSpace: edgeLabelSpace,
130
+ keepNodeOrder: !!nodeOrder,
131
+ nodeOrder: nodeOrder || [],
132
+ acyclicer: "greedy",
133
+ ranker: "network-simplex",
134
+ rankdir: rankdir,
135
+ nodesep: nodesep,
136
+ align: align,
137
+ });
138
+ layoutTopLeft = [0, 0];
139
+ if (begin) {
140
+ minX_1 = Infinity;
141
+ minY_1 = Infinity;
142
+ g.getAllNodes().forEach(function (node) {
143
+ if (minX_1 > node.data.x)
144
+ minX_1 = node.data.x;
145
+ if (minY_1 > node.data.y)
146
+ minY_1 = node.data.y;
147
+ });
148
+ g.getAllEdges().forEach(function (edge) {
149
+ var _a;
150
+ (_a = edge.data.points) === null || _a === void 0 ? void 0 : _a.forEach(function (point) {
151
+ if (minX_1 > point.x)
152
+ minX_1 = point.x;
153
+ if (minY_1 > point.y)
154
+ minY_1 = point.y;
155
+ });
156
+ });
157
+ layoutTopLeft[0] = begin[0] - minX_1;
158
+ layoutTopLeft[1] = begin[1] - minY_1;
159
+ }
160
+ isHorizontal = rankdir === "LR" || rankdir === "RL";
161
+ if (radial) {
162
+ // const focusId = (isString(focusNode) ? focusNode : focusNode?.id) as ID;
163
+ // const focusLayer = focusId ? g.getNode(focusId)?.data._rank as number : 0;
164
+ // const layers: any[] = [];
165
+ // const dim = isHorizontal ? "y" : "x";
166
+ // const sizeDim = isHorizontal ? "height" : "width";
167
+ // // 找到整个图作为环的坐标维度(dim)的最大、最小值,考虑节点宽度
168
+ // let min = Infinity;
169
+ // let max = -Infinity;
170
+ // g.getAllNodes().forEach((node) => {
171
+ // const currentNodesep = nodesepfunc(node);
172
+ // if (focusLayer === 0) {
173
+ // if (!layers[node.data._rank!]) {
174
+ // layers[node.data._rank!] = {
175
+ // nodes: [],
176
+ // totalWidth: 0,
177
+ // maxSize: -Infinity,
178
+ // };
179
+ // }
180
+ // layers[node.data._rank!].nodes.push(node);
181
+ // layers[node.data._rank!].totalWidth += currentNodesep * 2 + node.data[sizeDim]!;
182
+ // if (
183
+ // layers[node.data._rank!].maxSize < Math.max(node.data.width!, node.data.height!)
184
+ // ) {
185
+ // layers[node.data._rank!].maxSize = Math.max(node.data.width!, node.data.height!);
186
+ // }
187
+ // } else {
188
+ // const diffLayer = node.data._rank! - focusLayer!;
189
+ // if (diffLayer === 0) {
190
+ // if (!layers[diffLayer]) {
191
+ // layers[diffLayer] = {
192
+ // nodes: [],
193
+ // totalWidth: 0,
194
+ // maxSize: -Infinity,
195
+ // };
196
+ // }
197
+ // layers[diffLayer].nodes.push(node);
198
+ // layers[diffLayer].totalWidth += currentNodesep * 2 + node.data[sizeDim]!;
199
+ // if (
200
+ // layers[diffLayer].maxSize < Math.max(node.data.width!, node.data.height!)
201
+ // ) {
202
+ // layers[diffLayer].maxSize = Math.max(node.data.width!, node.data.height!);
203
+ // }
204
+ // } else {
205
+ // const diffLayerAbs = Math.abs(diffLayer);
206
+ // if (!layers[diffLayerAbs]) {
207
+ // layers[diffLayerAbs] = {
208
+ // left: [],
209
+ // right: [],
210
+ // totalWidth: 0,
211
+ // maxSize: -Infinity,
212
+ // };
213
+ // }
214
+ // layers[diffLayerAbs].totalWidth +=
215
+ // currentNodesep * 2 + node.data[sizeDim]!;
216
+ // if (
217
+ // layers[diffLayerAbs].maxSize < Math.max(node.data.width!, node.data.height!)
218
+ // ) {
219
+ // layers[diffLayerAbs].maxSize = Math.max(
220
+ // node.data.width!,
221
+ // node.data.height!
222
+ // );
223
+ // }
224
+ // if (diffLayer < 0) {
225
+ // layers[diffLayerAbs].left.push(node);
226
+ // } else {
227
+ // layers[diffLayerAbs].right.push(node);
228
+ // }
229
+ // }
230
+ // }
231
+ // const leftPos = node.data[dim]! - node.data[sizeDim]! / 2 - currentNodesep;
232
+ // const rightPos = node.data[dim]! + node.data[sizeDim]! / 2 + currentNodesep;
233
+ // if (leftPos < min) min = leftPos;
234
+ // if (rightPos > max) max = rightPos;
235
+ // });
236
+ // // const padding = (max - min) * 0.1; // TODO
237
+ // // 初始化为第一圈的半径,后面根据每层 ranksep 叠加
238
+ // let radius = ranksep || 50; // TODO;
239
+ // const radiusMap: any = {};
240
+ // // 扩大最大最小值范围,以便为环上留出接缝处的空隙
241
+ // const rangeLength = (max - min) / 0.9;
242
+ // const range = [
243
+ // (min + max - rangeLength) * 0.5,
244
+ // (min + max + rangeLength) * 0.5,
245
+ // ];
246
+ // // 根据半径、分布比例,计算节点在环上的位置,并返回该组节点中最大的 ranksep 值
247
+ // const processNodes = (
248
+ // layerNodes: any,
249
+ // radius: number,
250
+ // propsMaxRanksep = -Infinity,
251
+ // arcRange = [0, 1]
252
+ // ) => {
253
+ // let maxRanksep = propsMaxRanksep;
254
+ // layerNodes.forEach((node: any) => {
255
+ // const coord = g.node(node);
256
+ // radiusMap[node] = radius;
257
+ // // 获取变形为 radial 后的直角坐标系坐标
258
+ // const { x: newX, y: newY } = getRadialPos(
259
+ // coord![dim]!,
260
+ // range,
261
+ // rangeLength,
262
+ // radius,
263
+ // arcRange
264
+ // );
265
+ // // 将新坐标写入源数据
266
+ // const i = nodes.findIndex((it) => it.id === node);
267
+ // if (!nodes[i]) return;
268
+ // nodes[i].x = newX + dBegin[0];
269
+ // nodes[i].y = newY + dBegin[1];
270
+ // // @ts-ignore: pass layer order to data for increment layout use
271
+ // nodes[i]._order = coord._order;
272
+ // // 找到本层最大的一个 ranksep,作为下一层与本层的间隙,叠加到下一层的半径上
273
+ // const currentNodeRanksep = ranksepfunc(nodes[i]);
274
+ // if (maxRanksep < currentNodeRanksep) maxRanksep = currentNodeRanksep;
275
+ // });
276
+ // return maxRanksep;
277
+ // };
278
+ // let isFirstLevel = true;
279
+ // const lastLayerMaxNodeSize = 0;
280
+ // layers.forEach((layerNodes) => {
281
+ // if (
282
+ // !layerNodes?.nodes?.length &&
283
+ // !layerNodes?.left?.length &&
284
+ // !layerNodes?.right?.length
285
+ // ) {
286
+ // return;
287
+ // }
288
+ // // 第一层只有一个节点,直接放在圆心,初始半径设定为 0
289
+ // if (isFirstLevel && layerNodes.nodes.length === 1) {
290
+ // // 将新坐标写入源数据
291
+ // const i = nodes.findIndex((it) => it.id === layerNodes.nodes[0]);
292
+ // if (i <= -1) return;
293
+ // nodes[i].x = dBegin[0];
294
+ // nodes[i].y = dBegin[1];
295
+ // radiusMap[layerNodes.nodes[0]] = 0;
296
+ // radius = ranksepfunc(nodes[i]);
297
+ // isFirstLevel = false;
298
+ // return;
299
+ // }
300
+ // // 为接缝留出空隙,半径也需要扩大
301
+ // radius = Math.max(radius, layerNodes.totalWidth / (2 * Math.PI)); // / 0.9;
302
+ // let maxRanksep = -Infinity;
303
+ // if (focusLayer === 0 || layerNodes.nodes?.length) {
304
+ // maxRanksep = processNodes(
305
+ // layerNodes.nodes,
306
+ // radius,
307
+ // maxRanksep,
308
+ // [0, 1]
309
+ // ); // 0.8
310
+ // } else {
311
+ // const leftRatio =
312
+ // layerNodes.left?.length /
313
+ // (layerNodes.left?.length + layerNodes.right?.length);
314
+ // maxRanksep = processNodes(layerNodes.left, radius, maxRanksep, [
315
+ // 0,
316
+ // leftRatio,
317
+ // ]); // 接缝留出 0.05 的缝隙
318
+ // maxRanksep = processNodes(layerNodes.right, radius, maxRanksep, [
319
+ // leftRatio + 0.05,
320
+ // 1,
321
+ // ]); // 接缝留出 0.05 的缝隙
322
+ // }
323
+ // radius += maxRanksep;
324
+ // isFirstLevel = false;
325
+ // lastLayerMaxNodeSize - layerNodes.maxSize;
326
+ // });
327
+ // g.edges().forEach((edge: any) => {
328
+ // const coord = g.edge(edge);
329
+ // const i = edges.findIndex((it) => {
330
+ // const source = getEdgeTerminal(it, "source");
331
+ // const target = getEdgeTerminal(it, "target");
332
+ // return source === edge.v && target === edge.w;
333
+ // });
334
+ // if (i <= -1) return;
335
+ // if (
336
+ // self.edgeLabelSpace &&
337
+ // self.controlPoints &&
338
+ // edges[i].type !== "loop"
339
+ // ) {
340
+ // const otherDim = dim === "x" ? "y" : "x";
341
+ // const controlPoints = coord?.points?.slice(
342
+ // 1,
343
+ // coord.points.length - 1
344
+ // );
345
+ // const newControlPoints: Point[] = [];
346
+ // const sourceOtherDimValue = g.node(edge.v)?.[otherDim]!;
347
+ // const otherDimDist =
348
+ // sourceOtherDimValue - g.node(edge.w)?.[otherDim]!;
349
+ // const sourceRadius = radiusMap[edge.v];
350
+ // const radiusDist = sourceRadius - radiusMap[edge.w];
351
+ // controlPoints?.forEach((point: any) => {
352
+ // // 根据该边的起点、终点半径,及起点、终点、控制点位置关系,确定该控制点的半径
353
+ // const cRadius =
354
+ // ((point[otherDim] - sourceOtherDimValue) / otherDimDist) *
355
+ // radiusDist +
356
+ // sourceRadius;
357
+ // // 获取变形为 radial 后的直角坐标系坐标
358
+ // const newPos = getRadialPos(
359
+ // point[dim],
360
+ // range,
361
+ // rangeLength,
362
+ // cRadius
363
+ // );
364
+ // newControlPoints.push({
365
+ // x: newPos.x + dBegin[0],
366
+ // y: newPos.y + dBegin[1],
367
+ // });
368
+ // });
369
+ // edges[i].controlPoints = newControlPoints;
370
+ // }
371
+ // });
372
+ }
373
+ else {
374
+ layerCoords_1 = new Set();
375
+ isInvert = rankdir === "BT" || rankdir === "RL";
376
+ layerCoordSort = isInvert
377
+ ? function (a, b) { return b - a; }
378
+ : function (a, b) { return a - b; };
379
+ g.getAllNodes().forEach(function (node) {
380
+ // let ndata: any = this.nodeMap[node];
381
+ // if (!ndata) {
382
+ // ndata = combos?.find((it) => it.id === node);
383
+ // }
384
+ // if (!ndata) return;
385
+ // ndata.x = node.data.x! + dBegin[0];
386
+ // ndata.y = node.data.y! + dBegin[1];
387
+ // // pass layer order to data for increment layout use
388
+ // ndata._order = node.data._order;
389
+ // layerCoords.add(isHorizontal ? ndata.x : ndata.y);
390
+ node.data.x = node.data.x + layoutTopLeft[0];
391
+ node.data.y = node.data.y + layoutTopLeft[1];
392
+ layerCoords_1.add(isHorizontal ? node.data.x : node.data.y);
393
+ });
394
+ layerCoordsArr_1 = Array.from(layerCoords_1).sort(layerCoordSort);
395
+ isDifferentLayer_1 = isHorizontal
396
+ ? function (point1, point2) { return point1.x !== point2.x; }
397
+ : function (point1, point2) { return point1.y !== point2.y; };
398
+ filterControlPointsOutOfBoundary_1 = isHorizontal
399
+ ? function (ps, point1, point2) {
400
+ var max = Math.max(point1.y, point2.y);
401
+ var min = Math.min(point1.y, point2.y);
402
+ return ps.filter(function (point) { return point.y <= max && point.y >= min; });
403
+ }
404
+ : function (ps, point1, point2) {
405
+ var max = Math.max(point1.x, point2.x);
406
+ var min = Math.min(point1.x, point2.x);
407
+ return ps.filter(function (point) { return point.x <= max && point.x >= min; });
408
+ };
409
+ g.getAllEdges().forEach(function (edge, i) {
410
+ var _a;
411
+ // const i = edges.findIndex((it) => {
412
+ // return it.source === edge.source && it.target === edge.target;
413
+ // });
414
+ // if (i <= -1) return;
415
+ if (edgeLabelSpace && controlPoints && edge.data.type !== "loop") {
416
+ edge.data.controlPoints = getControlPoints((_a = edge.data.points) === null || _a === void 0 ? void 0 : _a.map(function (_a) {
417
+ var x = _a.x, y = _a.y;
418
+ return ({
419
+ x: x + layoutTopLeft[0],
420
+ y: y + layoutTopLeft[1],
421
+ });
422
+ }), g.getNode(edge.source), g.getNode(edge.target), layerCoordsArr_1, isHorizontal, isDifferentLayer_1, filterControlPointsOutOfBoundary_1);
423
+ }
424
+ });
425
+ }
426
+ layoutNodes = [];
427
+ // layout according to the original order in the data.nodes
428
+ layoutNodes = g
429
+ .getAllNodes()
430
+ .map(function (node) { return cloneFormatData(node); });
431
+ layoutEdges = g.getAllEdges();
432
+ if (assign) {
433
+ layoutNodes.forEach(function (node) {
434
+ graph.mergeNodeData(node.id, {
435
+ x: node.data.x,
436
+ y: node.data.y,
437
+ });
438
+ });
439
+ layoutEdges.forEach(function (edge) {
440
+ graph.mergeEdgeData(edge.id, {
441
+ controlPoints: edge.data.controlPoints,
442
+ });
443
+ });
444
+ }
445
+ result = {
446
+ nodes: layoutNodes,
447
+ edges: layoutEdges,
448
+ };
449
+ return [2 /*return*/, result];
450
+ });
451
+ });
452
+ };
453
+ return DagreLayout;
454
+ }());
455
+ export { DagreLayout };
456
+ /**
457
+ * Format controlPoints to avoid polylines crossing nodes
458
+ * @param points
459
+ * @param sourceNode
460
+ * @param targetNode
461
+ * @param layerCoordsArr
462
+ * @param isHorizontal
463
+ * @returns
464
+ */
465
+ var getControlPoints = function (points, sourceNode, targetNode, layerCoordsArr, isHorizontal, isDifferentLayer, filterControlPointsOutOfBoundary) {
466
+ var controlPoints = (points === null || points === void 0 ? void 0 : points.slice(1, points.length - 1)) || []; // 去掉头尾
467
+ // 酌情增加控制点,使折线不穿过跨层的节点
468
+ if (sourceNode && targetNode) {
469
+ var _a = sourceNode.data, sourceX = _a.x, sourceY = _a.y;
470
+ var _b = targetNode.data, targetX = _b.x, targetY = _b.y;
471
+ if (isHorizontal) {
472
+ sourceX = sourceNode.data.y;
473
+ sourceY = sourceNode.data.x;
474
+ targetX = targetNode.data.y;
475
+ targetY = targetNode.data.x;
476
+ }
477
+ // 为跨层级的边增加第一个控制点。忽略垂直的/横向的边。
478
+ // 新控制点 = {
479
+ // x: 终点x,
480
+ // y: (起点y + 下一层y) / 2, #下一层y可能不等于终点y
481
+ // }
482
+ if (targetY !== sourceY && sourceX !== targetX) {
483
+ var sourceLayer = layerCoordsArr.indexOf(sourceY);
484
+ var sourceNextLayerCoord = layerCoordsArr[sourceLayer + 1];
485
+ if (sourceNextLayerCoord) {
486
+ var firstControlPoint = controlPoints[0];
487
+ var insertStartControlPoint = (isHorizontal
488
+ ? {
489
+ x: (sourceY + sourceNextLayerCoord) / 2,
490
+ y: (firstControlPoint === null || firstControlPoint === void 0 ? void 0 : firstControlPoint.y) || targetX,
491
+ }
492
+ : {
493
+ x: (firstControlPoint === null || firstControlPoint === void 0 ? void 0 : firstControlPoint.x) || targetX,
494
+ y: (sourceY + sourceNextLayerCoord) / 2,
495
+ });
496
+ // 当新增的控制点不存在(!=当前第一个控制点)时添加
497
+ if (!firstControlPoint ||
498
+ isDifferentLayer(firstControlPoint, insertStartControlPoint)) {
499
+ controlPoints.unshift(insertStartControlPoint);
500
+ }
501
+ }
502
+ var targetLayer = layerCoordsArr.indexOf(targetY);
503
+ var layerDiff = Math.abs(targetLayer - sourceLayer);
504
+ if (layerDiff === 1) {
505
+ controlPoints = filterControlPointsOutOfBoundary(controlPoints, sourceNode.data, targetNode.data);
506
+ // one controlPoint at least
507
+ if (!controlPoints.length) {
508
+ controlPoints.push((isHorizontal
509
+ ? {
510
+ x: (sourceY + targetY) / 2,
511
+ y: sourceX,
512
+ }
513
+ : {
514
+ x: sourceX,
515
+ y: (sourceY + targetY) / 2,
516
+ }));
517
+ }
518
+ }
519
+ else if (layerDiff > 1) {
520
+ var targetLastLayerCoord = layerCoordsArr[targetLayer - 1];
521
+ if (targetLastLayerCoord) {
522
+ var lastControlPoints = controlPoints[controlPoints.length - 1];
523
+ var insertEndControlPoint = (isHorizontal
524
+ ? {
525
+ x: (targetY + targetLastLayerCoord) / 2,
526
+ y: (lastControlPoints === null || lastControlPoints === void 0 ? void 0 : lastControlPoints.y) || targetX,
527
+ }
528
+ : {
529
+ x: (lastControlPoints === null || lastControlPoints === void 0 ? void 0 : lastControlPoints.x) || sourceX,
530
+ y: (targetY + targetLastLayerCoord) / 2,
531
+ });
532
+ // 当新增的控制点不存在(!=当前最后一个控制点)时添加
533
+ if (!lastControlPoints ||
534
+ isDifferentLayer(lastControlPoints, insertEndControlPoint)) {
535
+ controlPoints.push(insertEndControlPoint);
536
+ }
537
+ }
538
+ }
539
+ }
540
+ }
541
+ return controlPoints;
542
+ };
543
+ //# sourceMappingURL=dagre.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dagre.js","sourceRoot":"","sources":["../src/dagre.ts"],"names":[],"mappings":"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"}