Browse Source

node index patch 1

css_transitions
Alex de Mulder 11 years ago
parent
commit
e2c5ee7887
2 changed files with 44 additions and 27 deletions
  1. +19
    -9
      src/graph/Graph.js
  2. +25
    -18
      vis.js

+ 19
- 9
src/graph/Graph.js View File

@ -1577,17 +1577,20 @@ Graph.prototype._calculateForces = function() {
dx = node2.x - node1.x; dx = node2.x - node1.x;
dy = node2.y - node1.y; dy = node2.y - node1.y;
distance = Math.sqrt(dx * dx + dy * dy); distance = Math.sqrt(dx * dx + dy * dy);
angle = Math.atan2(dy, dx);
// TODO: correct factor for repulsing force
//repulsingForce = 2 * Math.exp(-5 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
//repulsingForce = Math.exp(-1 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
repulsingForce = 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)); // TODO: customize the repulsing force
fx = Math.cos(angle) * repulsingForce;
fy = Math.sin(angle) * repulsingForce;
//if (distance < 10*minimumDistance) {
angle = Math.atan2(dy, dx);
// TODO: correct factor for repulsing force
//repulsingForce = 2 * Math.exp(-5 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
//repulsingForce = Math.exp(-1 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
repulsingForce = 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)); // TODO: customize the repulsing force
fx = Math.cos(angle) * repulsingForce;
fy = Math.sin(angle) * repulsingForce;
node1._addForce(-fx, -fy);
node2._addForce(fx, fy);
node1._addForce(-fx, -fy);
node2._addForce(fx, fy);
// }
} }
} }
@ -1718,9 +1721,16 @@ Graph.prototype._discreteStepNodes = function() {
*/ */
Graph.prototype.start = function() { Graph.prototype.start = function() {
if (this.moving) { if (this.moving) {
var start = window.performance.now();
this._calculateForces(); this._calculateForces();
this._discreteStepNodes(); this._discreteStepNodes();
var end = window.performance.now();
var time = end - start;
console.log('Execution time: ' + time);
var vmin = this.constants.minVelocity; var vmin = this.constants.minVelocity;
this.moving = this._isMoving(vmin); this.moving = this._isMoving(vmin);
} }

+ 25
- 18
vis.js View File

@ -4,8 +4,8 @@
* *
* A dynamic, browser-based visualization library. * A dynamic, browser-based visualization library.
* *
* @version 0.3.0-SNAPSHOT
* @date 2014-01-06
* @version @@version
* @date @@date
* *
* @license * @license
* Copyright (C) 2011-2013 Almende B.V, http://almende.com * Copyright (C) 2011-2013 Almende B.V, http://almende.com
@ -14102,7 +14102,7 @@ function Graph (container, data, options) {
* Update the this.node_indices with the most recent node index list * Update the this.node_indices with the most recent node index list
* @private * @private
*/ */
Graph.prototype._updateNodeIndexList = function(fromWhere) {
Graph.prototype._updateNodeIndexList = function() {
this.node_indices = []; this.node_indices = [];
for (var idx in this.nodes) { for (var idx in this.nodes) {
@ -14110,9 +14110,6 @@ Graph.prototype._updateNodeIndexList = function(fromWhere) {
this.node_indices.push(idx); this.node_indices.push(idx);
} }
} }
//** this uses the fromWhere parameter to see where this function was called from, the argument is optional
//if (typeof fromWhere !== "undefined")
// console.log("called _updateNodeIndexList from", fromWhere);
} }
/** /**
@ -15074,7 +15071,7 @@ Graph.prototype._addNodes = function(ids) {
this.moving = true; this.moving = true;
} }
} }
this._updateNodeIndexList("_addNodes");
this._updateNodeIndexList();
this._reconnectEdges(); this._reconnectEdges();
this._updateValueRange(this.nodes); this._updateValueRange(this.nodes);
}; };
@ -15105,7 +15102,7 @@ Graph.prototype._updateNodes = function(ids) {
} }
} }
} }
this._updateNodeIndexList("_updateNodes");
this._updateNodeIndexList();
this._reconnectEdges(); this._reconnectEdges();
this._updateValueRange(nodes); this._updateValueRange(nodes);
}; };
@ -15121,7 +15118,7 @@ Graph.prototype._removeNodes = function(ids) {
var id = ids[i]; var id = ids[i];
delete nodes[id]; delete nodes[id];
} }
this._updateNodeIndexList("_removeNodes");
this._updateNodeIndexList();
this._reconnectEdges(); this._reconnectEdges();
this._updateSelection(); this._updateSelection();
this._updateValueRange(nodes); this._updateValueRange(nodes);
@ -15546,17 +15543,20 @@ Graph.prototype._calculateForces = function() {
dx = node2.x - node1.x; dx = node2.x - node1.x;
dy = node2.y - node1.y; dy = node2.y - node1.y;
distance = Math.sqrt(dx * dx + dy * dy); distance = Math.sqrt(dx * dx + dy * dy);
angle = Math.atan2(dy, dx);
// TODO: correct factor for repulsing force
//repulsingForce = 2 * Math.exp(-5 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
//repulsingForce = Math.exp(-1 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
repulsingForce = 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)); // TODO: customize the repulsing force
fx = Math.cos(angle) * repulsingForce;
fy = Math.sin(angle) * repulsingForce;
//if (distance < 10*minimumDistance) {
angle = Math.atan2(dy, dx);
// TODO: correct factor for repulsing force
//repulsingForce = 2 * Math.exp(-5 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
//repulsingForce = Math.exp(-1 * (distance * distance) / (dmin * dmin) ); // TODO: customize the repulsing force
repulsingForce = 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)); // TODO: customize the repulsing force
fx = Math.cos(angle) * repulsingForce;
fy = Math.sin(angle) * repulsingForce;
node1._addForce(-fx, -fy);
node2._addForce(fx, fy);
node1._addForce(-fx, -fy);
node2._addForce(fx, fy);
// }
} }
} }
@ -15687,9 +15687,16 @@ Graph.prototype._discreteStepNodes = function() {
*/ */
Graph.prototype.start = function() { Graph.prototype.start = function() {
if (this.moving) { if (this.moving) {
var start = window.performance.now();
this._calculateForces(); this._calculateForces();
this._discreteStepNodes(); this._discreteStepNodes();
var end = window.performance.now();
var time = end - start;
console.log('Execution time: ' + time);
var vmin = this.constants.minVelocity; var vmin = this.constants.minVelocity;
this.moving = this._isMoving(vmin); this.moving = this._isMoving(vmin);
} }

Loading…
Cancel
Save