antvis / G6

♾ A Graph Visualization Framework in JavaScript.
https://g6.antv.antgroup.com/
MIT License
11.16k stars 1.33k forks source link

带有 Combo 的图中,传入具有坐标的图数据,但是最终渲染结果依然是自动布局的。 #5093

Closed kevinzhao2233 closed 1 year ago

kevinzhao2233 commented 1 year ago

问题描述

comboCombined 布局,外部为 radial,内部为 grid,每次生成的图布局都不确定。于是准备传入具有位置(x 和 y)的图数据,但是最终的结果并不会受 x 和 y 的影响。

重现链接

https://codesandbox.io/s/nostalgic-mclaren-m7mwy2

重现步骤

在 codesandbox 中查看即可

预期行为

根据这个 data,预期生成的图类似下面这样布局: 1

但是生成的是下面这样的,也就是说完全忽略了 data 中所有 node 和 combo 的位置信息。 Snipaste_2023-10-27_18-01-23

平台

屏幕截图或视频(可选)

No response

补充说明(可选)

对了,codesandbox 中会生成两个画布,不知道是为什么

github-actions[bot] commented 1 year ago

hi @kevinzhao2233, welcome!

github-actions[bot] commented 1 year ago

Hi @kevinzhao2233, Please star this repo if you find it useful! Thanks :star:! 你好 @kevinzhao2233。如果该仓库对你有用,可以 star 一下,感谢你的 :star:!

kevinzhao2233 commented 1 year ago

目前用下面的方法实现了固定节点和 Combo 的需求

// 前提:需要更改位置的节点不能处于 collapse 的 Combo 中,如果有,则需要先展开对应的 Combo
// 更新了某个节点的位置
const node1 = graph.findById('node1');
graph.updateItem(node1, {
  x: 100,
  y: 100,
});
const comboId = node1.getModel().comboId;

// 更新 node1 所属的 combo 及其所有祖先 combo 的大小和位置
graph.updateCombo(comboId);

这些代码在初始布局完成之后执行即可,如果需要更改位置的节点过多,则将 updateItem 操作写在一个循环里面。