我想展示一系列超级形状,其中一半是一种形状,另一半是另一种形状。以下内容适用于仅显示一种类型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"
)。是否存在一些关于超级公式变量的具体信息,以防止这种情况发生?
答案 0 :(得分:1)
如果根据函数指定属性的值,则需要调用此函数。也就是说,您的代码将函数分配给d
属性,而不是调用时的返回值。如果您按如下方式更改代码,它应该可以正常工作。
.attr("d", function(d,i) {if (i < n/2.0){return shape(d)} else {return shape2(d)}});