// Generated by CoffeeScript 1.10.0 (function() { var MIN_PADDING, data, en_nodes, height, nodes, simulation, svg, vis, width; svg = d3.select('svg'); width = svg.node().getBoundingClientRect().width; height = svg.node().getBoundingClientRect().height; vis = svg.append('g').attrs({ transform: "translate(" + (width / 2) + "," + (height / 2) + ")" }); MIN_PADDING = 3; data = [ { r: 45, foc_x: -60, foc_y: -130 }, { r: 5, foc_x: -60, foc_y: -90 }, { r: 10, foc_x: -70, foc_y: -93 }, { r: 25, foc_x: 60, foc_y: 110 }, { r: 20, foc_x: 80, foc_y: 100 }, { r: 30, foc_x: 100, foc_y: 100 }, { r: 30, foc_x: -110, foc_y: 103 }, { r: 50, foc_x: -90, foc_y: 60 } ]; data.forEach(function(d) { d.x = d.foc_x; return d.y = d.foc_y; }); simulation = d3.forceSimulation().force('collision', d3.forceCollide(function(d) { return d.r + MIN_PADDING; })).force('attract', d3.forceAttract().target(function(d) { return [d.foc_x, d.foc_y]; })); nodes = vis.selectAll('.node').data(data); en_nodes = nodes.enter().append('circle').attrs({ "class": 'node', r: function(d) { return d.r; } }); simulation.nodes(data).on('tick', function() { return en_nodes.attrs({ transform: function(d) { return "translate(" + d.x + ", " + d.y + ")"; } }); }); }).call(this);