一尘不染

在D3强制定向布局中修复节点位置

javascript

我希望力导向布局中的某些节点忽略所有力,并基于该节点的属性停留在固定位置,同时仍能够拖动其他节点并对其施加排斥力并保持其链接线。

我以为就这么简单:

force.on("tick", function() {
    vis.selectAll("g.node")
        .attr("transform", function(d) {
            return (d.someAttribute == true) ?
               "translate(" + d.xcoordFromAttribute + "," + d.ycoordFromAttribute +")" :
               "translate(" + d.x + "," + d.y + ")"
        });
  });

我也尝试过手动设置每个刻度的节点的x和y属性,但是如果该节点受力影响,链接将继续浮动到该节点所在的位置。

显然,我对这应该如何工作有基本的误解。如何在固定链接的同时仍允许它们可拖动的同时将节点固定在一个位置?


阅读 306

收藏
2020-05-01

共1个答案

一尘不染

d.fixed在所需的节点上将其设置为true,然后初始化d.x并设置d.y到所需的位置。这些节点将仍然是模拟的一部分,您可以使用常规显示代码(例如,设置转换属性);但是,由于将它们标记为固定,因此只能通过拖动而不是通过模拟来移动它们。

有关更多详细信息,请参见力布局文档(v3文档,当前文档),并在此示例中还了解根节点的位置。

2020-05-01