当前位置: 首页 > 面试题库 >

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

牧宁
2023-03-14
问题内容

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

我以为就这么简单:

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属性,但是如果该节点受力影响,链接将继续浮动到该节点所在的位置。

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


问题答案:

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

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



 类似资料:
  • 问题内容: 我试图通过ID而不是索引链接d3节点(节点ID由我的应用程序生成)。 这是我的节点: 它们当前通过索引链接: 但是,我想通过“ Id”链接它们: 我已经尝试过此处提出的解决方案:https : //groups.google.com/forum/#!msg/d3-js/LWuhBeEipz4/0kZIojCYvhIJ 通过在调用force.nodes之前添加以下行: 我已经尝试调试上述

  • 我正在开发一个应用程序,有必要将节点布置在彼此之外(或彼此顶部等)。但是,此布局只是初始布局,用户可以任意移动这些节点。在JavaFX中,如何以正确的方式实现这一点?我将用一个简单的例子来解释我的问题: 假设我有两个矩形,想把矩形2放在矩形1的右边。 在这种情况下,JavaFX还没有确定rect1的宽度,它将为零。直观地说,我会执行一个调用,让JavaFX绘制rect1,从而确定其宽度,然后添加r

  • 我希望通过向窗格中添加gridPanes来使用JavaFX来建模一个简单的微波。微波 上面是结果应该是什么样子的,但是我在正确布置网格窗格时遇到了麻烦。

  • 我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。

  • 此方法封装自uni的nodesRef.boundingClientRect,它极大简化了 使用复杂度,内部使用Promise,可以让用户同步获取节点信息。 getRect(selector, all = false) selector <String> 此参数为元素节点,可以是id或者class,比如"#user-name",".box" all <Boolean> 是否返回全部节点信息,当页面有