0

我想展示一系列超公式形状,其中一半是一个形状,一半是另一个形状。以下内容非常适合仅显示一种类型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")。是否有一些关于超公式变量的特定内容使其无法正常工作?

4

1 回答 1

1

如果你基于一个函数来赋值一个属性的值,你需要调用这个函数。也就是说,您的代码将函数分配给d属性,而不是调用时的返回值。如果您按如下方式更改代码,它应该可以工作。

.attr("d", function(d,i) {if (i < n/2.0){return shape(d)} else {return shape2(d)}});
于 2013-06-19T08:40:28.373 回答