forcegraph: pre-render label
This commit is contained in:
parent
942464f86b
commit
a6ad9f928a
@ -230,10 +230,13 @@ define(["d3"], function (d3) {
|
|||||||
var cos = Math.cos(angle)
|
var cos = Math.cos(angle)
|
||||||
var sin = Math.sin(angle)
|
var sin = Math.sin(angle)
|
||||||
|
|
||||||
var x = d.x + d.labelA * Math.pow(Math.abs(cos), 2 / 5) * Math.sign(cos)
|
var width = d.labelWidth
|
||||||
var y = d.y + d.labelB * Math.pow(Math.abs(sin), 2 / 5) * Math.sign(sin)
|
var height = d.labelHeight
|
||||||
|
|
||||||
ctx.fillText(d.label, x, y)
|
var x = d.x + d.labelA * Math.pow(Math.abs(cos), 2 / 5) * Math.sign(cos) - width / 2
|
||||||
|
var y = d.y + d.labelB * Math.pow(Math.abs(sin), 2 / 5) * Math.sign(sin) - height / 2
|
||||||
|
|
||||||
|
ctx.drawImage(d.label, x, y, width, height)
|
||||||
}
|
}
|
||||||
|
|
||||||
function visibleLinks(d) {
|
function visibleLinks(d) {
|
||||||
@ -256,8 +259,6 @@ define(["d3"], function (d3) {
|
|||||||
var xExtent = d3.extent(intNodes, function (d) { return d.px })
|
var xExtent = d3.extent(intNodes, function (d) { return d.px })
|
||||||
var yExtent = d3.extent(intNodes, function (d) { return d.py })
|
var yExtent = d3.extent(intNodes, function (d) { return d.py })
|
||||||
|
|
||||||
ctx.font = "11px Roboto"
|
|
||||||
|
|
||||||
if (translateP) {
|
if (translateP) {
|
||||||
ctx.save()
|
ctx.save()
|
||||||
ctx.translate(translateP[0], translateP[1])
|
ctx.translate(translateP[0], translateP[1])
|
||||||
@ -302,11 +303,8 @@ define(["d3"], function (d3) {
|
|||||||
ctx.stroke()
|
ctx.stroke()
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx.textAlign = "center"
|
if (scale > 0.9)
|
||||||
ctx.textBaseline = "middle"
|
intNodes.filter(visibleNodes).forEach(drawLabel, scale)
|
||||||
ctx.fillStyle = "rgba(0, 0, 0, 0.6)"
|
|
||||||
|
|
||||||
intNodes.filter(visibleNodes).forEach(drawLabel)
|
|
||||||
|
|
||||||
ctx.beginPath()
|
ctx.beginPath()
|
||||||
|
|
||||||
@ -464,14 +462,30 @@ define(["d3"], function (d3) {
|
|||||||
if (d.o.node)
|
if (d.o.node)
|
||||||
nodesDict[d.o.node.nodeinfo.node_id] = d
|
nodesDict[d.o.node.nodeinfo.node_id] = d
|
||||||
|
|
||||||
d.label = nodeName(d)
|
var name = nodeName(d)
|
||||||
|
|
||||||
ctx.font = "11px Roboto"
|
ctx.font = "11px Roboto"
|
||||||
var offset = 10
|
var offset = 10
|
||||||
var width = ctx.measureText(d.label).width
|
var width = ctx.measureText(name).width
|
||||||
|
var buffer = document.createElement("canvas")
|
||||||
|
var bctx = buffer.getContext("2d")
|
||||||
|
var scale = zoomBehavior.scaleExtent()[1]
|
||||||
|
bctx.lineWidth = 2.5
|
||||||
|
buffer.width = (width + 2 * bctx.lineWidth) * scale
|
||||||
|
buffer.height = (14 + 2 * bctx.lineWidth) * scale
|
||||||
|
bctx.textBaseline = "top"
|
||||||
|
bctx.font = ctx.font
|
||||||
|
bctx.strokeStyle = "rgba(255, 255, 255, 0.6)"
|
||||||
|
bctx.fillStyle = "rgba(0, 0, 0, 0.6)"
|
||||||
|
bctx.scale(scale, scale)
|
||||||
|
bctx.strokeText(name, bctx.lineWidth, bctx.lineWidth)
|
||||||
|
bctx.fillText(name, bctx.lineWidth * scale, bctx.lineWidth * scale)
|
||||||
|
|
||||||
d.labelA = offset + width / 2
|
d.label = buffer
|
||||||
d.labelB = offset + 11 / 2
|
d.labelWidth = buffer.width / scale
|
||||||
|
d.labelHeight = buffer.height / scale
|
||||||
|
d.labelA = offset + buffer.width / (2 * scale)
|
||||||
|
d.labelB = offset + buffer.height / (2 * scale)
|
||||||
})
|
})
|
||||||
|
|
||||||
intLinks.forEach(function (d) {
|
intLinks.forEach(function (d) {
|
||||||
|
Loading…
Reference in New Issue
Block a user