forcegraph: set size based on diameter
This commit is contained in:
parent
b7ce336227
commit
534f7bbed4
@ -11,6 +11,10 @@ define(["d3"], function (d3) {
|
|||||||
|
|
||||||
var LINK_DISTANCE = 70
|
var LINK_DISTANCE = 70
|
||||||
|
|
||||||
|
function graphDiameter(nodes) {
|
||||||
|
return Math.sqrt(nodes.length / Math.PI) * LINK_DISTANCE
|
||||||
|
}
|
||||||
|
|
||||||
function savePositions() {
|
function savePositions() {
|
||||||
if (!localStorageTest())
|
if (!localStorageTest())
|
||||||
return
|
return
|
||||||
@ -65,9 +69,17 @@ define(["d3"], function (d3) {
|
|||||||
"scale(" + scale + ")")
|
"scale(" + scale + ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSize() {
|
||||||
|
var sidebarWidth = sidebar.getWidth()
|
||||||
|
var width = el.offsetWidth - sidebarWidth
|
||||||
|
var height = el.offsetHeight
|
||||||
|
|
||||||
|
return [width, height]
|
||||||
|
}
|
||||||
|
|
||||||
function panzoomTo(a, b) {
|
function panzoomTo(a, b) {
|
||||||
var sidebarWidth = sidebar.getWidth()
|
var sidebarWidth = sidebar.getWidth()
|
||||||
var size = force.size()
|
var size = getSize()
|
||||||
|
|
||||||
var targetWidth = Math.max(1, b[0] - a[0])
|
var targetWidth = Math.max(1, b[0] - a[0])
|
||||||
var targetHeight = Math.max(1, b[1] - a[1])
|
var targetHeight = Math.max(1, b[1] - a[1])
|
||||||
@ -85,14 +97,6 @@ define(["d3"], function (d3) {
|
|||||||
animatePanzoom(translate, scale)
|
animatePanzoom(translate, scale)
|
||||||
}
|
}
|
||||||
|
|
||||||
function resize() {
|
|
||||||
var sidebarWidth = sidebar.getWidth()
|
|
||||||
var width = el.offsetWidth - sidebarWidth
|
|
||||||
var height = el.offsetHeight
|
|
||||||
|
|
||||||
force.size([width, height])
|
|
||||||
}
|
|
||||||
|
|
||||||
function tickEvent() {
|
function tickEvent() {
|
||||||
link.selectAll("line")
|
link.selectAll("line")
|
||||||
.attr("x1", function(d) { return d.source.x })
|
.attr("x1", function(d) { return d.source.x })
|
||||||
@ -140,8 +144,6 @@ define(["d3"], function (d3) {
|
|||||||
.on("drag", dragmove)
|
.on("drag", dragmove)
|
||||||
.on("dragend", dragend)
|
.on("dragend", dragend)
|
||||||
|
|
||||||
window.addEventListener("resize", resize)
|
|
||||||
|
|
||||||
self.setData = function (data) {
|
self.setData = function (data) {
|
||||||
var nodePositions = {}
|
var nodePositions = {}
|
||||||
|
|
||||||
@ -227,24 +229,19 @@ define(["d3"], function (d3) {
|
|||||||
|
|
||||||
node.selectAll("title").text(nodeName)
|
node.selectAll("title").text(nodeName)
|
||||||
|
|
||||||
|
var diameter = graphDiameter(nodes)
|
||||||
|
|
||||||
force.nodes(nodes)
|
force.nodes(nodes)
|
||||||
.links(links)
|
.links(links)
|
||||||
|
.size([diameter, diameter])
|
||||||
resize()
|
.start()
|
||||||
|
|
||||||
force.start()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.resetView = function () {
|
self.resetView = function () {
|
||||||
node.classed("highlight", false)
|
node.classed("highlight", false)
|
||||||
link.classed("highlight", false)
|
link.classed("highlight", false)
|
||||||
|
|
||||||
var size = force.size()
|
panzoomTo([0, 0], force.size())
|
||||||
var diameter = Math.sqrt(nodes.length / Math.PI) * LINK_DISTANCE
|
|
||||||
var x = (size[0] - diameter) / 2
|
|
||||||
var y = (size[1] - diameter) / 2
|
|
||||||
|
|
||||||
panzoomTo([x, y], [x + diameter, y + diameter])
|
|
||||||
|
|
||||||
doAnimation = true
|
doAnimation = true
|
||||||
}
|
}
|
||||||
@ -281,8 +278,6 @@ define(["d3"], function (d3) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.destroy = function () {
|
self.destroy = function () {
|
||||||
window.removeEventListener("resize", resize)
|
|
||||||
|
|
||||||
force.stop()
|
force.stop()
|
||||||
node.remove()
|
node.remove()
|
||||||
link.remove()
|
link.remove()
|
||||||
|
Loading…
Reference in New Issue
Block a user