我正在尝试更新节点和链接,但不想使用d3的enter模式。原因是我想要苗条的框架来做这件事以及处理所有渲染,我只想使用d3-force进行计算。
我使初始渲染工作正常,但是添加链接和节点存在以下问题:
- 添加链接使网络不断发展
- 链接似乎对图形布局没有任何影响,即它们似乎未添加到force.simulation
- 首先添加节点似乎可行,但是在添加链接后添加节点时,它们似乎并没有对其他节点施加压力。
这是我添加节点和链接的功能:
function addNode(){
force.forceSimulation(data.nodes.push({"id": "116","group": 5,"index":data.nodes.length,"x":0,"y":0,"vx":0,"vy":0}))
data=data
graph.alpha(1.0).update()
graph.restart()
}
function addLink(){
let n=getRandomInt(0,data.nodes.length-1)
let tn=getRandomInt(0,n)
let sn=getRandomInt(n,data.nodes.length-1)
graph.force("link",force.forceLink(data.links.push({'source':data.nodes[sn],'target':data.nodes[tn],'index':data.links.length,'value':getRandomInt(1,7)})))
data=data
graph.alpha(1.0).update()
graph.restart()
}
我找到了this答案,但是他们使用merge并将其绑定到DOM元素。我不明白如何在不涉及DOM的情况下如何做到这一点,只是更新了javascript中的节点和链接数组,以使其在仿真中将d3力包括在内。
Here我在一个简化的REPL中拥有当前的模拟,您可以对其进行分叉和编辑。