2013-06-19 53 views
0

我想展示一系列超形式的形状,其中一半是一个形状和另一半。不能返回超级公式d3

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}}); 
的目的仅是显示一种类型, var shape完美以下工作

该功能对普通路径变量(例如"M150 0 L75 200 L225 200 Z")有效。有没有特定的超变量变量,使它不能正常工作?

回答

1

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

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