繁体   English   中英

我如何给某些边缘课程?

[英]How do I give certain edges a class?

我有一个力导向图,可以显示和隐藏节点。 我希望根据是否显示或隐藏边缘源和目标来对边缘进行此操作。

我在这里选择边缘,遍历所有选定的节点以查看它们是否与边缘源匹配,如果匹配,请再次遍历它们以查看其是否也与边缘的目标匹配,然后我要设置该边缘如果未同时显示源和目标,则将class设置为“ visible”,然后将class设置为“ hidden”。

  var selectedNodes = d3.selectAll(".selectedNode"); 
  var linksVisible = d3.selectAll(".link.visible"); 

  var countOfVisibleLinks = [];
  linksVisible.each(function(o)
  {
      selectedNodes.each(function(i)
      {
          if(o.source.index === i.index)
          {
              //clog("yes1");
              selectedNodes.each(function(j)
              {
                  if(o.target.index === j.index)
                  { 
                      countOfVisibleLinks++;
                      //visibleLinks.push(o);

                      var myLink = d3.selectAll(".link.visible")
                                     .classed("hidden", function(d) { 
                                                           return d === o ? false : true;
                                                        });
                      //.filter(function(d) { return d === o; })
                      //.attr('class', 'hidden');

                   }
               })
          } 
      })
  });

“ countOfVisibleLinks”有效,因为它可以正确计算可见边缘,但是此后的功能不会将所选边缘设置为“可见”,将未选择边缘设置为“隐藏”

有任何想法吗 ?

我会尝试像

d3.selectAll(".link").attr("class", function(d) {
    var c = "link";
    if (d.source.visible && d.target.visible) { // or however you check the nodes?
        c += " visible";
    } else {
        c += " hidden";
    }
    return c;
});

对于您的方案,您可以使用if (selectedNodes.indexOf(d.source)...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM