(function () { var data = [ { trx:1, try:0, trz:0, tr:1.5708 }, { trx:0, try:0, trz:1, tr:1.570 }, { trx:1, try:0, trz:0, tr:3.1416 } ] ; var world = d3.select("#world"); var hemitransform = world.selectAll(".hemitransform") .data(data) .enter() .append("transform") .attr("class", "hemitransform") .attr("rotation", function(d) { return [d.trx, d.try, d.trz, d.tr ].join(" "); }) .append("transform") .attr("class", "disktransform") .attr("rotation", "1 0 0 -1.5708") ; var color = d3.scale.category10(); function shelldata() { return [ 0, Math.random(), Math.random(), Math.random(), Math.random(), 1 ].sort(function(a, b){return a-b;}) } var sd = shelldata(); var shape = hemitransform.selectAll(".shape") .data(sd) .enter() .append("shape") .attr("class", "shape") ; shape .append("appearance") .append("material") .attr("diffuseColor", function(d, i) { return color(i); }) ; var disk2d = shape .append("disk2d") .attr("solid", "false") .attr("class", "disk2d") .attr("innerRadius", function(d, i) { if (i === 0) return 0; else return sd[i-1];}) .attr("outerRadius", function(d, i) { return sd[i]; }) ; setInterval(function() { var sd = shelldata(); disk2d.data(sd); disk2d.transition() .attr("innerRadius", function(d, i) { if (i === 0) return 0; else return sd[i-1];}) .attr("outerRadius", function(d, i) { return sd[i]; }) }, 1000); })();