diff --git a/packages/g6-extension-3d/package.json b/packages/g6-extension-3d/package.json index 5e1662a05f8..68eb58e6792 100644 --- a/packages/g6-extension-3d/package.json +++ b/packages/g6-extension-3d/package.json @@ -38,7 +38,7 @@ "@antv/g-plugin-device-renderer": "^2.0.10", "@antv/g-plugin-dragndrop": "^2.0.6", "@antv/g-webgl": "^2.0.11", - "@antv/layout": "^1.2.14-beta.4", + "@antv/layout": "^1.2.14-beta.5", "@antv/util": "^3.3.7" }, "devDependencies": { diff --git a/packages/g6/__tests__/demos/index.ts b/packages/g6/__tests__/demos/index.ts index 44ba8993ead..507ee1fa88e 100644 --- a/packages/g6/__tests__/demos/index.ts +++ b/packages/g6/__tests__/demos/index.ts @@ -91,6 +91,7 @@ export { layoutMindmapH } from './layout-mindmap-h'; export { layoutMindmapHCustomSide } from './layout-mindmap-h-custom-side'; export { layoutMindmapHLeft } from './layout-mindmap-h-left'; export { layoutMindmapHRight } from './layout-mindmap-h-right'; +export { layoutPipelineMdsForce } from './layout-pipeline-mds-force'; export { layoutRadialBasic } from './layout-radial-basic'; export { layoutRadialConfigurationTranslate } from './layout-radial-configuration-translate'; export { layoutRadialPreventOverlap } from './layout-radial-prevent-overlap'; diff --git a/packages/g6/__tests__/demos/layout-pipeline-mds-force.ts b/packages/g6/__tests__/demos/layout-pipeline-mds-force.ts new file mode 100644 index 00000000000..e520712b2cf --- /dev/null +++ b/packages/g6/__tests__/demos/layout-pipeline-mds-force.ts @@ -0,0 +1,108 @@ +import { Graph } from '@/src'; + +export const layoutPipelineMdsForce: TestCase = async (context) => { + const data = { + nodes: [ + { id: '2023022111330994' }, + { id: '2023022131662846' }, + { id: '2023022134006229' }, + { id: '2023022134355387' }, + { id: '2023022134649283' }, + { id: '2023022135378377' }, + { id: '2023022159807939' }, + { id: '2023022171679817' }, + { id: '2023022192941079' }, + { id: '2023032121629632' }, + { id: '2023032149712027' }, + { id: '2023032171523093' }, + { id: '2023032439702273' }, + { id: '2023053113971286' }, + { id: '2023062814858004' }, + { id: '2023083116793312' }, + { id: '2023083116798008' }, + { id: '2023083116802328' }, + { id: '2023083116802329' }, + { id: '2023092717337264' }, + { id: '2022042607099685' }, + { id: '2023022115050705' }, + { id: '2023022124015954' }, + { id: '2023022160748942' }, + { id: '2023022176798458' }, + { id: '2023022183981042' }, + { id: '2023032138615654' }, + { id: '2023033152992057' }, + { id: '2023062614749332' }, + { id: '2023083016776599' }, + { id: '2023083116802327' }, + { id: '2023090716992598' }, + { id: '2023112718364754' }, + { id: '2023112918428536' }, + { id: '10' }, + { id: '11' }, + { id: '13' }, + ], + edges: [ + { source: '2023032149712027', target: '2022042607099685', id: 2024030419919960 }, + { source: '2023033152992057', target: '2023022124015954', id: 2024030419923397 }, + { source: '2023092717337264', target: '2022042607099685', id: 2024022919878863 }, + { source: '2023092717337264', target: '2023033152992057', id: 2024022919878864 }, + { source: '2023092717337264', target: '2023022135378377', id: 2024022919878865 }, + { source: '2023022159807939', target: '2023022183981042', id: 2023022171425708 }, + { source: '2023022183981042', target: '2023022159807939', id: 2024022919872476 }, + { source: '2023022171679817', target: '2023083016776599', id: 2024013019576232 }, + { source: '2023083116802327', target: '2023032149712027', id: 2023102317587829 }, + { source: '2023083116802327', target: '2023092717337264', id: 2023092717340047 }, + { source: '2023083116802328', target: '2023092717337264', id: 2023092717340048 }, + { source: '2023083116802329', target: '2023092717337264', id: 2023092717340049 }, + { source: '2023092717337264', target: '2022042607099685', id: 2023092717337342 }, + { source: '2023053113971286', target: '2023053113971286', id: 2023071415272433 }, + { source: '2023062814858004', target: '2023062814858004', id: 2023062814858057 }, + { source: '2023062614749332', target: '2023062614749332', id: 2023062614749380 }, + { source: '2023022159807939', target: '2023053113971286', id: 2023053113971328 }, + { source: '2023053113971286', target: '2023053113971286', id: 2023053113971329 }, + { source: '2023032171523093', target: '2023032171523093', id: 2023032188641552 }, + { source: '2023032138615654', target: '2023032138615654', id: 2023032163869608 }, + { source: '2023032439702273', target: '2023032439702273', id: 2023032461304126 }, + { source: '2023033152992057', target: '2023032149712027', id: 2023033129305007 }, + { source: '2023033152992057', target: '2023022134006229', id: 2023040438213028 }, + { source: '2023032121629632', target: '2023032121629632', id: 2023032184876493 }, + { source: '2023022124015954', target: '2023032149712027', id: 2023041947056477 }, + { source: '2023022134006229', target: '2023022192941079', id: 2023022160953640 }, + { source: '2023033152992057', target: '2023022124015954', id: 2023041466404158 }, + { source: '2023022192941079', target: '2023032149712027', id: 2023032412723482 }, + { source: '2023022124015954', target: '2023022131662846', id: 2023041985653086 }, + { source: '2023032149712027', target: '2023032149712027', id: 2023032177181441 }, + { source: '2023022134006229', target: '2023022135378377', id: 2023022191267699 }, + { source: '2023022134006229', target: '2023022115050705', id: 2023022113765807 }, + { source: '2022042607099685', target: '2022042607099685', id: 2022042607099906 }, + { source: '2023022192941079', target: '13', id: 1000 }, + { source: '2023083116802329', target: '10', id: 1001 }, + { source: '2023022124015954', target: '11', id: 1002 }, + { source: '2023033152992057', target: '10', id: 1003 }, + ], + }; + + const graph = new Graph({ + ...context, + data, + layout: [ + { type: 'mds', animation: false }, + { + type: 'force', + animation: false, + preventOverlap: true, + nodeSize: 32, + maxSpeed: 500, + leafCluster: true, + clustering: false, + clusterNodeStrength: 35, + minMovement: 1.5, + nodeClusterBy: 'cluster', + }, + ], + autoFit: 'view', + }); + await graph.render(); + + return graph; +}; diff --git a/packages/g6/__tests__/snapshots/layouts/pipeline/layout-pipeline-mds-force.svg b/packages/g6/__tests__/snapshots/layouts/pipeline/layout-pipeline-mds-force.svg new file mode 100644 index 00000000000..2de84ebaa65 --- /dev/null +++ b/packages/g6/__tests__/snapshots/layouts/pipeline/layout-pipeline-mds-force.svg @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/g6/__tests__/unit/layouts/pipeline.spec.ts b/packages/g6/__tests__/unit/layouts/pipeline.spec.ts index 5ecbf482558..2834e5ecfa6 100644 --- a/packages/g6/__tests__/unit/layouts/pipeline.spec.ts +++ b/packages/g6/__tests__/unit/layouts/pipeline.spec.ts @@ -1,5 +1,6 @@ import { GraphEvent } from '@/src'; -import { createGraph } from '@@/utils'; +import { layoutPipelineMdsForce } from '@@/demos'; +import { createDemoGraph, createGraph } from '@@/utils'; describe('pipeline', () => { it('event', async () => { @@ -44,4 +45,10 @@ describe('pipeline', () => { expect(after.mock.calls[1][0].data.options.type).toBe('d3-force'); expect(after.mock.calls[2][0].data.options.type).toBe('grid'); }); + + it('layout-pipeline-mds-force', async () => { + const graph = await createDemoGraph(layoutPipelineMdsForce); + await expect(graph).toMatchSnapshot(__filename, 'layout-pipeline-mds-force'); + graph.destroy(); + }); }); diff --git a/packages/g6/package.json b/packages/g6/package.json index a422cc0632a..4c1bbe1e0f7 100644 --- a/packages/g6/package.json +++ b/packages/g6/package.json @@ -64,15 +64,15 @@ "@antv/g-plugin-dragndrop": "^2.0.6", "@antv/graphlib": "^2.0.3", "@antv/hierarchy": "^0.6.12", - "@antv/layout": "^1.2.14-beta.4", + "@antv/layout": "^1.2.14-beta.5", "@antv/util": "^3.3.7", "bubblesets-js": "^2.3.3", "hull.js": "^1.0.6" }, "devDependencies": { "@antv/g-svg": "^2.0.8", - "@antv/layout-gpu": "^1.1.5", - "@antv/layout-wasm": "^1.4.0", + "@antv/layout-gpu": "^1.1.6", + "@antv/layout-wasm": "^1.4.1", "@types/hull.js": "^1.0.4", "@types/xmlserializer": "^0.6.6", "cross-env": "^7.0.3", diff --git a/packages/g6/src/utils/layout.ts b/packages/g6/src/utils/layout.ts index 39255774dcd..44088426466 100644 --- a/packages/g6/src/utils/layout.ts +++ b/packages/g6/src/utils/layout.ts @@ -148,7 +148,7 @@ export function layoutAdapter( const nodesToLayout: LayoutNodeData[] = nodes.map((datum) => { const id = idOf(datum); const { data, style, combo } = datum; - return { + const result = { id, data: { ...data, @@ -158,6 +158,12 @@ export function layoutAdapter( }, style: { ...style }, }; + // 一些布局会从 data 中读取位置信息 + if (style?.x) Object.assign(result.data, { x: style.x }); + if (style?.y) Object.assign(result.data, { y: style.y }); + if (style?.z) Object.assign(result.data, { z: style.z }); + + return result; }); const nodesIdMap = new Map(nodesToLayout.map((node) => [node.id, node])); diff --git a/packages/site/package.json b/packages/site/package.json index b10668c8939..e08c0d53d4a 100644 --- a/packages/site/package.json +++ b/packages/site/package.json @@ -48,9 +48,9 @@ "@antv/g6": "workspace:*", "@antv/g6-extension-3d": "workspace:*", "@antv/g6-extension-react": "workspace:*", - "@antv/layout": "^1.2.14-beta.4", - "@antv/layout-gpu": "^1.1.5", - "@antv/layout-wasm": "^1.4.0", + "@antv/layout": "^1.2.14-beta.5", + "@antv/layout-gpu": "^1.1.6", + "@antv/layout-wasm": "^1.4.1", "@antv/util": "^3.3.7", "antd": "^5.19.1", "dumi": "2.4.0-alpha.17",