// Generated by CoffeeScript 1.10.0 (function() { var data, dots, enter_quads, height, qside, quads, quadtree, side, svg, vis, width; svg = d3.select('svg'); width = svg.node().getBoundingClientRect().width; height = svg.node().getBoundingClientRect().height; side = Math.floor(Math.min(width, height) * 0.5); data = [[6, 6], [10, 10], [20, 20], [100, 0], [100, 10], [230, 75], [90, 130], [12, 210]]; quadtree = d3.quadtree().extent([[0, 0], [side, side]]).addAll(data); qside = quadtree._x1 - quadtree._x0; quadtree.visitAfter(function(n) { if (n.length == null) { return n.size = 1; } else { return n.size = d3.sum(n, function(d) { if (d != null) { return d.size; } else { return 0; } }); } }); vis = svg.append('g').attrs({ transform: "translate(" + ((width - qside) / 2) + "," + ((height - qside) / 2) + ")" }); quads = vis.selectAll('.quad').data(quadtree.root()); enter_quads = quads.enter().append('g').attrs({ "class": 'quad', transform: function(d, i) { return "translate(" + (quadtree._x0 + i % 2 * qside / 2) + "," + (quadtree._y0 + Math.floor(i / 2) * qside / 2) + ")"; } }); enter_quads.append('rect').attrs({ width: qside / 2, height: qside / 2, fill: function(d) { if (d != null) { return '#DDD'; } else { return 'white'; } } }); enter_quads.filter(function(d) { return d != null; }).append('text').text(function(d) { return d.size; }).attrs({ x: qside / 4, y: qside / 4, dy: '0.35em' }); dots = vis.selectAll('.dot').data(data); dots.enter().append('circle').attrs({ "class": 'dot', cx: function(d) { return d[0]; }, cy: function(d) { return d[1]; }, r: 2 }); }).call(this);