diff --git a/docs/graph.html b/docs/graph.html
index 37636cf4..8df62843 100644
--- a/docs/graph.html
+++ b/docs/graph.html
@@ -1305,7 +1305,8 @@ var options: {
for the add and edit functions. The data the user is supplied with in these functions has been described in the code below.
For the add data, you can add any and all options that are accepted for node creation as described above. The same goes for edit, however only the fields described
in the code below contain information on the selected node. The callback for connect accepts any options that are used for edge creation. Only the callback for delete selected
- requires the same data structure that is supplied to the user.
+ requires the same data structure that is supplied to the user.
+ If there is no injected function supplied for the edit operation, the button will not be shown in the toolbar.
// If a variable is not supplied, the default value is used. diff --git a/src/graph/Graph.js b/src/graph/Graph.js index 6c0ed49b..fd402de6 100644 --- a/src/graph/Graph.js +++ b/src/graph/Graph.js @@ -216,7 +216,7 @@ function Graph (container, data, options) { }; // properties for the animation - this.moving = false; // True if any of the nodes have an undefined position + this.moving = true; this.timer = undefined; // Scheduling function. Is definded in this.start(); // load data (the disable start variable will be the same as the enabled clustering) @@ -305,7 +305,7 @@ Graph.prototype._centerGraph = function(range) { * * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; */ -Graph.prototype.zoomToFit = function(initialZoom, doNotStart) { +Graph.prototype.zoomToFit = function(initialZoom, disableStart) { if (initialZoom === undefined) { initialZoom = false; } @@ -315,12 +315,23 @@ Graph.prototype.zoomToFit = function(initialZoom, doNotStart) { var zoomLevel; if (initialZoom == true) { - if (this.constants.clustering.enabled == true && + if (this.constants.smoothCurves == true) { + if (this.constants.clustering.enabled == true && numberOfNodes >= this.constants.clustering.initialMaxNodes) { - zoomLevel = 77.5271985 / (numberOfNodes + 187.266146) + 4.76710517e-05; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + zoomLevel = 49.07548 / (numberOfNodes + 142.05338) + 9.1444e-04; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } + else { + zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } } else { - zoomLevel = 30.5062972 / (numberOfNodes + 19.93597763) + 0.08413486; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + if (this.constants.clustering.enabled == true && + numberOfNodes >= this.constants.clustering.initialMaxNodes) { + zoomLevel = 77.5271985 / (numberOfNodes + 187.266146) + 4.76710517e-05; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } + else { + zoomLevel = 30.5062972 / (numberOfNodes + 19.93597763) + 0.08413486; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } } } else { @@ -340,7 +351,7 @@ Graph.prototype.zoomToFit = function(initialZoom, doNotStart) { this.pinch.mousewheelScale = zoomLevel; this._setScale(zoomLevel); this._centerGraph(range); - if (doNotStart == false || doNotStart === undefined) { + if (disableStart == false || disableStart === undefined) { this.start(); } }; @@ -404,7 +415,6 @@ Graph.prototype.setData = function(data, disableStart) { if (this.stabilize) { this._doStabilize(); } - this.moving = true; this.start(); } }; @@ -579,7 +589,6 @@ Graph.prototype.setOptions = function (options) { this.setSize(this.width, this.height); this._setTranslation(this.frame.clientWidth / 2, this.frame.clientHeight / 2); this._setScale(1); - this.zoomToFit(); this._redraw(); }; @@ -1679,19 +1688,14 @@ Graph.prototype._drawEdges = function(ctx) { * @private */ Graph.prototype._doStabilize = function() { - //var start = new Date(); - // find stable position var count = 0; - var vmin = this.constants.minVelocity; - var stable = false; - while (!stable && count < this.constants.maxIterations) { - this._initializeForceCalculation(); - this._discreteStepNodes(); - stable = !this._isMoving(vmin); + while (this.moving && count < this.constants.maxIterations) { + this._physicsTick(); count++; } - this.zoomToFit(); + + this.zoomToFit(false,true); }; diff --git a/src/graph/graphMixins/ClusterMixin.js b/src/graph/graphMixins/ClusterMixin.js index 0ca8eb5f..e0de527a 100644 --- a/src/graph/graphMixins/ClusterMixin.js +++ b/src/graph/graphMixins/ClusterMixin.js @@ -1045,7 +1045,7 @@ var ClusterMixin = { for (var i = 0; i < this.nodeIndices.length; i++) { var node = this.nodes[this.nodeIndices[i]]; if ((node.xFixed == false || node.yFixed == false) && this.createNodeOnClick != true) { - var radius = this.constants.physics.springLength * node.mass; + var radius = this.constants.physics.springLength * Math.min(100,node.mass); var angle = 2 * Math.PI * Math.random(); if (node.xFixed == false) {node.x = radius * Math.cos(angle);} if (node.yFixed == false) {node.y = radius * Math.sin(angle);}