diff --git a/packages/g6/__tests__/snapshots/layouts/compact-box/basic.svg b/packages/g6/__tests__/snapshots/layouts/compact-box/basic.svg index 487ca46600d..b5708e0a86a 100644 --- a/packages/g6/__tests__/snapshots/layouts/compact-box/basic.svg +++ b/packages/g6/__tests__/snapshots/layouts/compact-box/basic.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/compact-box/left-align.svg b/packages/g6/__tests__/snapshots/layouts/compact-box/left-align.svg index c82ca43dd60..30b909e745c 100644 --- a/packages/g6/__tests__/snapshots/layouts/compact-box/left-align.svg +++ b/packages/g6/__tests__/snapshots/layouts/compact-box/left-align.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/compact-box/top-to-bottom.svg b/packages/g6/__tests__/snapshots/layouts/compact-box/top-to-bottom.svg index 77fbb6f7ae9..01591b5287b 100644 --- a/packages/g6/__tests__/snapshots/layouts/compact-box/top-to-bottom.svg +++ b/packages/g6/__tests__/snapshots/layouts/compact-box/top-to-bottom.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/dendrogram/basic.svg b/packages/g6/__tests__/snapshots/layouts/dendrogram/basic.svg index 7edea6d38c8..c4179c772ee 100644 --- a/packages/g6/__tests__/snapshots/layouts/dendrogram/basic.svg +++ b/packages/g6/__tests__/snapshots/layouts/dendrogram/basic.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/dendrogram/tb.svg b/packages/g6/__tests__/snapshots/layouts/dendrogram/tb.svg index 7b84e16fa6b..f8cfdb1e234 100644 --- a/packages/g6/__tests__/snapshots/layouts/dendrogram/tb.svg +++ b/packages/g6/__tests__/snapshots/layouts/dendrogram/tb.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/mindmap/h-custom-side.svg b/packages/g6/__tests__/snapshots/layouts/mindmap/h-custom-side.svg index 857b3e3203a..4033b20fade 100644 --- a/packages/g6/__tests__/snapshots/layouts/mindmap/h-custom-side.svg +++ b/packages/g6/__tests__/snapshots/layouts/mindmap/h-custom-side.svg @@ -1,243 +1,243 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + Modeling Methods - + - + - + Classification - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/mindmap/h-left.svg b/packages/g6/__tests__/snapshots/layouts/mindmap/h-left.svg index 37a1d9bec07..3c3458af123 100644 --- a/packages/g6/__tests__/snapshots/layouts/mindmap/h-left.svg +++ b/packages/g6/__tests__/snapshots/layouts/mindmap/h-left.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/mindmap/h-right.svg b/packages/g6/__tests__/snapshots/layouts/mindmap/h-right.svg index 4120f470357..1ddbeabe3a4 100644 --- a/packages/g6/__tests__/snapshots/layouts/mindmap/h-right.svg +++ b/packages/g6/__tests__/snapshots/layouts/mindmap/h-right.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/layouts/mindmap/h.svg b/packages/g6/__tests__/snapshots/layouts/mindmap/h.svg index a42d663d821..eb92a6588d6 100644 --- a/packages/g6/__tests__/snapshots/layouts/mindmap/h.svg +++ b/packages/g6/__tests__/snapshots/layouts/mindmap/h.svg @@ -1,231 +1,231 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + Modeling Methods - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,19 +513,19 @@ - + - + - + Regression - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/add-children-data.svg b/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/add-children-data.svg index 8231dbecf6c..711d59544e8 100644 --- a/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/add-children-data.svg +++ b/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/add-children-data.svg @@ -1,233 +1,233 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + @@ -239,7 +239,7 @@ - + @@ -251,7 +251,7 @@ - + @@ -263,7 +263,7 @@ - + @@ -275,7 +275,7 @@ - + @@ -287,7 +287,7 @@ - + @@ -299,7 +299,7 @@ - + @@ -311,7 +311,7 @@ - + @@ -323,7 +323,7 @@ - + @@ -335,7 +335,7 @@ - + @@ -347,7 +347,7 @@ - + @@ -359,7 +359,7 @@ - + @@ -371,7 +371,7 @@ - + @@ -383,7 +383,7 @@ - + @@ -395,7 +395,7 @@ - + @@ -407,7 +407,7 @@ - + @@ -419,7 +419,7 @@ - + @@ -431,7 +431,7 @@ - + @@ -443,7 +443,7 @@ - + @@ -455,7 +455,7 @@ - + @@ -467,7 +467,7 @@ - + @@ -479,7 +479,7 @@ - + @@ -491,7 +491,7 @@ - + @@ -503,7 +503,7 @@ - + @@ -515,7 +515,7 @@ - + @@ -527,7 +527,7 @@ - + @@ -539,7 +539,7 @@ - + @@ -551,7 +551,7 @@ - + @@ -563,7 +563,7 @@ - + @@ -575,7 +575,7 @@ - + @@ -587,7 +587,7 @@ - + @@ -599,7 +599,7 @@ - + @@ -611,7 +611,7 @@ - + diff --git a/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/default.svg b/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/default.svg index 487ca46600d..b5708e0a86a 100644 --- a/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/default.svg +++ b/packages/g6/__tests__/snapshots/runtime/graph/add-children-data/default.svg @@ -1,219 +1,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -225,7 +225,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -345,7 +345,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -369,7 +369,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -393,7 +393,7 @@ - + @@ -405,7 +405,7 @@ - + @@ -417,7 +417,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -441,7 +441,7 @@ - + @@ -453,7 +453,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -489,7 +489,7 @@ - + @@ -501,7 +501,7 @@ - + @@ -513,7 +513,7 @@ - + @@ -525,7 +525,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -561,7 +561,7 @@ - + @@ -573,7 +573,7 @@ - + diff --git a/packages/g6/src/runtime/layout.ts b/packages/g6/src/runtime/layout.ts index 5d084a6620a..26f9fdb4d2f 100644 --- a/packages/g6/src/runtime/layout.ts +++ b/packages/g6/src/runtime/layout.ts @@ -156,6 +156,7 @@ export class LayoutController { createTreeStructure(model); + const layoutPreset: GraphData = { nodes: [], edges: [] }; const layoutResult: GraphData = { nodes: [], edges: [] }; const roots = model.getRoots(TREE_KEY) as unknown as TreeData[]; @@ -170,11 +171,13 @@ export class LayoutController { ); const result = layout(root, options); + const { x: rx, y: ry, z: rz = 0 } = result; // 将布局结果转化为 LayoutMapping 格式 / Convert the layout result to LayoutMapping format dfs( result, (node) => { const { id, x, y, z = 0 } = node; + layoutPreset.nodes!.push({ id, style: { x: rx, y: ry, z: rz } }); layoutResult.nodes!.push({ id, style: { x, y, z } }); }, (node) => node.children, @@ -182,13 +185,45 @@ export class LayoutController { ); }); + const offset = this.inferTreeLayoutOffset(layoutResult); + applyTreeLayoutOffset(layoutResult, offset); + if (animation) { + // 先将所有节点移动到根节点位置 / Move all nodes to the root node position first + applyTreeLayoutOffset(layoutPreset, offset); + this.updateElementPosition(layoutPreset, false); + this.updateElementPosition(layoutResult, animation); } return layoutResult; } + private inferTreeLayoutOffset(data: GraphData) { + let [minX, maxX] = [Infinity, -Infinity]; + let [minY, maxY] = [Infinity, -Infinity]; + + data.nodes?.forEach((node) => { + const { x = 0, y = 0 } = node.style || {}; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + }); + + const { canvas } = this.context; + const canvasSize = canvas.getSize(); + const [x1, y1] = canvas.getCanvasByViewport([0, 0]); + const [x2, y2] = canvas.getCanvasByViewport(canvasSize); + + if (minX >= x1 && maxX <= x2 && minY >= y1 && maxY <= y2) return [0, 0] as [number, number]; + + const cx = (x1 + x2) / 2; + const cy = (y1 + y2) / 2; + + return [cx - (minX + maxX) / 2, cy - (minY + maxY) / 2] as [number, number]; + } + public stopLayout() { if (this.instance && isLayoutWithIterations(this.instance)) { this.instance.stop(); @@ -303,3 +338,23 @@ export class LayoutController { this.animationResult = undefined; } } + +/** + * 对树形布局结果应用偏移 + * + * Apply offset to tree layout result + * @param data - 布局数据 | Layout data + * @param offset - 偏移量 | Offset + */ +const applyTreeLayoutOffset = (data: GraphData, offset: [number, number]) => { + const [ox, oy] = offset; + data.nodes?.forEach((node) => { + if (node.style) { + const { x = 0, y = 0 } = node.style; + node.style.x = x + ox; + node.style.y = y + oy; + } else { + node.style = { x: ox, y: oy }; + } + }); +};