在d3中无法返回超级公式

时间:2013-06-19 02:43:51

标签: svg d3.js

我想展示一系列超级形状,其中一半是一种形状,另一半是另一种形状。以下内容适用于仅显示一种类型var shape

var coords = d3.range(n).map(function(i,d) {
    return [(i+1)*w/(n+1) , h/2];
  });    

var svg = d3.select("body").append("svg:svg")
   .attr("width", w)
   .attr("height", h);

var g = svg.selectAll("g")
   .data(coords)
   .enter().append("svg:g");

var shape = d3.superformula()
   .type("square")
   .size(4000)
   .segments(360);

var shape2 = d3.superformula()
   .type("triangle")
   .size(4000)
   .segments(360);

g.append("path")
   .attr("transform", function(d) { return "translate(" + d + ")"; })  
   .attr("d", shape);

但是,当我尝试更改最后一行并创建一个函数来返回任何超级公式形状时,没有任何显示:

    .attr("d", function(d,i) {if (i < n/2.0){return shape} else {return shape2}});

此函数适用于普通路径变量(例如"M150 0 L75 200 L225 200 Z")。是否存在一些关于超级公式变量的具体信息,以防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

如果根据函数指定属性的值,则需要调用此函数。也就是说,您的代码将函数分配给d属性,而不是调用时的返回值。如果您按如下方式更改代码,它应该可以正常工作。

.attr("d", function(d,i) {if (i < n/2.0){return shape(d)} else {return shape2(d)}});