From 1a6a4329b5417991d9ba0019065e0e5c9dcb1648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?PetaByteBoy=20//=20Milan=20P=C3=A4ssler?= Date: Wed, 8 Feb 2017 09:35:26 +0100 Subject: [PATCH] forcegraph: only draw clients when zoomed in --- lib/forcegraph.js | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index 7ac8ff6..992f1b9 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -380,31 +380,32 @@ define(["d3"], function (d3) { // -- draw clients -- ctx.save() ctx.beginPath() - nodes.filter(visibleNodes).forEach(function (d) { - var clients = d.o.node.statistics.clients - if (clients === 0) - return + if (scale > 0.9) + nodes.filter(visibleNodes).forEach(function (d) { + var clients = d.o.node.statistics.clients + if (clients === 0) + return - var startDistance = 16 - var radius = 3 - var a = 1.2 - var startAngle = Math.PI + var startDistance = 16 + var radius = 3 + var a = 1.2 + var startAngle = Math.PI - for (var orbit = 0, i = 0; i < clients; orbit++) { - var distance = startDistance + orbit * 2 * radius * a - var n = Math.floor((Math.PI * distance) / (a * radius)) - var delta = clients - i + for (var orbit = 0, i = 0; i < clients; orbit++) { + var distance = startDistance + orbit * 2 * radius * a + var n = Math.floor((Math.PI * distance) / (a * radius)) + var delta = clients - i - for (var j = 0; j < Math.min(delta, n); i++, j++) { - var angle = 2 * Math.PI / n * j - var x = d.x + distance * Math.cos(angle + startAngle) - var y = d.y + distance * Math.sin(angle + startAngle) + for (var j = 0; j < Math.min(delta, n); i++, j++) { + var angle = 2 * Math.PI / n * j + var x = d.x + distance * Math.cos(angle + startAngle) + var y = d.y + distance * Math.sin(angle + startAngle) - ctx.moveTo(x, y) - ctx.arc(x, y, radius, 0, 2 * Math.PI) + ctx.moveTo(x, y) + ctx.arc(x, y, radius, 0, 2 * Math.PI) + } } - } - }) + }) ctx.fillStyle = clientColor ctx.fill()