d3.hemicycle = function() { function hemicycle(selection) { selection.each(function(d, i) { // options var nvar = (typeof(n) === "function" ? n(d) : n), gapvar = (typeof(gap) === "function" ? gap(d) : gap), widthIconvar = (typeof(widthIcon) === "function" ? widthIcon(d) : widthIcon), widthvar = (typeof(width) === "function" ? width(d) : width); groupsvar = (typeof(groups) === "function" ? groups(d) : groups); var rmax = 1 + nvar.length *gapvar*widthIconvar; var xScale = d3.scale.linear() .domain([-1*rmax, rmax]) .range([0, widthvar]), xxScale = d3.scale.linear() .domain([0, 2*rmax]) .range([0, widthvar]) yScale = d3.scale.linear() .domain([0, rmax]) .range([widthvar/2,0]); var data = [], s = []; for (i in nvar) { s.push((Math.PI/widthIconvar + Math.PI*i*gapvar-nvar[i])/(nvar[i] - 1)); var ninrow = nvar[i], radwidth = Math.PI/(nvar[i]+(nvar[i]-1)*s[i]), radspace = radwidth*s[i], r = 1 + i*gapvar*widthIconvar; for (j=0;j y['rot']) return 1; return 0 }); var i = 0; for (gkey in groupsvar) { var group = groupsvar[gkey]; //for (j=0;j