forcegraph: more visible highlight

This commit is contained in:
Nils Schneider 2015-07-30 23:47:58 +02:00
parent 8e1e698849
commit 7fdb6c7e21

View File

@ -193,7 +193,6 @@ define(["d3"], function (d3) {
if (l) { if (l) {
highlightedLinks = [l] highlightedLinks = [l]
highlightedNodes = [l.source, l.target]
if (!nopanzoom) { if (!nopanzoom) {
var x = d3.extent([l.source, l.target], function (d) { return d.x }) var x = d3.extent([l.source, l.target], function (d) { return d.x })
@ -313,36 +312,28 @@ define(["d3"], function (d3) {
}) })
var clientColor = "#E6324B" var clientColor = "#E6324B"
var hilightColor = "#FA940F"
var unknownColor = "#D10E2A" var unknownColor = "#D10E2A"
var nodeColor = "#F2E3C6" var nodeColor = "#F2E3C6"
var highlightColor = "rgba(252, 227, 198, 0.15)"
var nodeRadius = 6
ctx.fillStyle = clientColor ctx.fillStyle = clientColor
ctx.fill() ctx.fill()
if (highlightedLinks.length) {
ctx.save()
ctx.lineWidth = 10
ctx.strokeStyle = hilightColor
highlightedLinks.forEach(function (d) {
ctx.beginPath()
ctx.moveTo(d.source.x, d.source.y)
ctx.lineTo(d.target.x, d.target.y)
ctx.stroke()
})
ctx.restore()
}
ctx.save() ctx.save()
links.forEach(function (d) { links.forEach(function (d) {
var dx = d.target.x - d.source.x
var dy = d.target.y - d.source.y
var a = Math.sqrt(dx * dx + dy * dy)
dx /= a
dy /= a
ctx.beginPath() ctx.beginPath()
ctx.moveTo(d.source.x, d.source.y) ctx.moveTo(d.source.x + dx * nodeRadius, d.source.y + dy * nodeRadius)
ctx.lineTo(d.target.x, d.target.y) ctx.lineTo(d.target.x - dx * nodeRadius, d.target.y - dy * nodeRadius)
ctx.strokeStyle = d.color ctx.strokeStyle = d.color
ctx.globalAlpha = d.o.vpn ? 0.1 : 1 ctx.globalAlpha = d.o.vpn ? 0.1 : 0.8
ctx.lineWidth = d.o.vpn ? 1.5 : 2.5 ctx.lineWidth = d.o.vpn ? 1.5 : 2.5
ctx.stroke() ctx.stroke()
}) })
@ -355,35 +346,61 @@ define(["d3"], function (d3) {
ctx.beginPath() ctx.beginPath()
unknownNodes.filter(visibleNodes).forEach(function (d) { unknownNodes.filter(visibleNodes).forEach(function (d) {
ctx.moveTo(d.x + 8, d.y) ctx.moveTo(d.x + nodeRadius, d.y)
ctx.arc(d.x, d.y, 8, 0, 2 * Math.PI) ctx.arc(d.x, d.y, nodeRadius, 0, 2 * Math.PI)
}) })
ctx.fillStyle = unknownColor ctx.strokeStyle = unknownColor
ctx.lineWidth = nodeRadius
ctx.fill() ctx.stroke()
ctx.beginPath() ctx.beginPath()
nodes.filter(visibleNodes).forEach(function (d) { nodes.filter(visibleNodes).forEach(function (d) {
ctx.moveTo(d.x + 8, d.y) ctx.moveTo(d.x + nodeRadius, d.y)
ctx.arc(d.x, d.y, 8, 0, 2 * Math.PI) ctx.arc(d.x, d.y, nodeRadius, 0, 2 * Math.PI)
}) })
ctx.fillStyle = nodeColor ctx.strokeStyle = nodeColor
ctx.lineWidth = nodeRadius
ctx.fill() ctx.stroke()
if (highlightedNodes.length) { if (highlightedNodes.length) {
ctx.save() ctx.save()
ctx.strokeStyle = hilightColor ctx.shadowColor = "rgba(255, 255, 255, 1.0)"
ctx.fillStyle = nodeColor ctx.shadowBlur = 10 * nodeRadius
ctx.lineWidth = 6 ctx.shadowOffsetX = 0
ctx.shadowOffsetY = 0
ctx.globalCompositeOperation = "lighten"
ctx.fillStyle = highlightColor
highlightedNodes.forEach(function (d) { highlightedNodes.forEach(function (d) {
ctx.beginPath() ctx.beginPath()
ctx.moveTo(d.x + 8, d.y) ctx.moveTo(d.x + 5 * nodeRadius, d.y)
ctx.arc(d.x, d.y, 8, 0, 2 * Math.PI) ctx.arc(d.x, d.y, 5 * nodeRadius, 0, 2 * Math.PI)
ctx.fill() ctx.fill()
ctx.restore()
})
ctx.restore()
}
if (highlightedLinks.length) {
ctx.save()
ctx.lineWidth = 2 * 5 * nodeRadius
ctx.shadowColor = "rgba(255, 255, 255, 1.0)"
ctx.shadowBlur = 10 * nodeRadius
ctx.shadowOffsetX = 0
ctx.shadowOffsetY = 0
ctx.globalCompositeOperation = "lighten"
ctx.strokeStyle = highlightColor
ctx.lineCap = "round"
highlightedLinks.forEach(function (d) {
ctx.beginPath()
ctx.moveTo(d.source.x, d.source.y)
ctx.lineTo(d.target.x, d.target.y)
ctx.stroke() ctx.stroke()
}) })