Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
9654b64f85 | ||
|
8beaeff267 | ||
|
73ecbc773c | ||
|
73fd49c58a | ||
|
6158298c9e | ||
|
e490969ea0 | ||
|
559a400331 | ||
|
322a7bae8b |
12
springy.js
12
springy.js
|
@ -327,12 +327,13 @@
|
||||||
|
|
||||||
// -----------
|
// -----------
|
||||||
var Layout = Springy.Layout = {};
|
var Layout = Springy.Layout = {};
|
||||||
Layout.ForceDirected = function(graph, stiffness, repulsion, damping, minEnergyThreshold) {
|
Layout.ForceDirected = function(graph, stiffness, repulsion, damping, minEnergyThreshold, maxSpeed) {
|
||||||
this.graph = graph;
|
this.graph = graph;
|
||||||
this.stiffness = stiffness; // spring stiffness constant
|
this.stiffness = stiffness; // spring stiffness constant
|
||||||
this.repulsion = repulsion; // repulsion constant
|
this.repulsion = repulsion; // repulsion constant
|
||||||
this.damping = damping; // velocity damping factor
|
this.damping = damping; // velocity damping factor
|
||||||
this.minEnergyThreshold = minEnergyThreshold || 0.01; //threshold used to determine render stop
|
this.minEnergyThreshold = minEnergyThreshold || 0.01; //threshold used to determine render stop
|
||||||
|
this.maxSpeed = maxSpeed || Infinity; // nodes aren't allowed to exceed this speed
|
||||||
|
|
||||||
this.nodePoints = {}; // keep track of points associated with nodes
|
this.nodePoints = {}; // keep track of points associated with nodes
|
||||||
this.edgeSprings = {}; // keep track of springs associated with edges
|
this.edgeSprings = {}; // keep track of springs associated with edges
|
||||||
|
@ -451,6 +452,9 @@
|
||||||
// Is this, along with updatePosition below, the only places that your
|
// Is this, along with updatePosition below, the only places that your
|
||||||
// integration code exist?
|
// integration code exist?
|
||||||
point.v = point.v.add(point.a.multiply(timestep)).multiply(this.damping);
|
point.v = point.v.add(point.a.multiply(timestep)).multiply(this.damping);
|
||||||
|
if (point.v.magnitude() > this.maxSpeed) {
|
||||||
|
point.v = point.v.normalise().multiply(this.maxSpeed);
|
||||||
|
}
|
||||||
point.a = new Vector(0,0);
|
point.a = new Vector(0,0);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -641,14 +645,16 @@
|
||||||
* Renderer handles the layout rendering loop
|
* Renderer handles the layout rendering loop
|
||||||
* @param onRenderStop optional callback function that gets executed whenever rendering stops.
|
* @param onRenderStop optional callback function that gets executed whenever rendering stops.
|
||||||
* @param onRenderStart optional callback function that gets executed whenever rendering starts.
|
* @param onRenderStart optional callback function that gets executed whenever rendering starts.
|
||||||
|
* @param onRenderFrame optional callback function that gets executed after each frame is rendered.
|
||||||
*/
|
*/
|
||||||
var Renderer = Springy.Renderer = function(layout, clear, drawEdge, drawNode, onRenderStop, onRenderStart) {
|
var Renderer = Springy.Renderer = function(layout, clear, drawEdge, drawNode, onRenderStop, onRenderStart, onRenderFrame) {
|
||||||
this.layout = layout;
|
this.layout = layout;
|
||||||
this.clear = clear;
|
this.clear = clear;
|
||||||
this.drawEdge = drawEdge;
|
this.drawEdge = drawEdge;
|
||||||
this.drawNode = drawNode;
|
this.drawNode = drawNode;
|
||||||
this.onRenderStop = onRenderStop;
|
this.onRenderStop = onRenderStop;
|
||||||
this.onRenderStart = onRenderStart;
|
this.onRenderStart = onRenderStart;
|
||||||
|
this.onRenderFrame = onRenderFrame;
|
||||||
|
|
||||||
this.layout.graph.addGraphListener(this);
|
this.layout.graph.addGraphListener(this);
|
||||||
}
|
}
|
||||||
|
@ -679,6 +685,8 @@
|
||||||
t.layout.eachNode(function(node, point) {
|
t.layout.eachNode(function(node, point) {
|
||||||
t.drawNode(node, point.p);
|
t.drawNode(node, point.p);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (t.onRenderFrame !== undefined) { t.onRenderFrame(); }
|
||||||
}, this.onRenderStop, this.onRenderStart);
|
}, this.onRenderStop, this.onRenderStart);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -324,7 +324,7 @@ jQuery.fn.springy = function(params) {
|
||||||
ctx.textAlign = "left";
|
ctx.textAlign = "left";
|
||||||
ctx.textBaseline = "top";
|
ctx.textBaseline = "top";
|
||||||
ctx.font = (node.data.font !== undefined) ? node.data.font : nodeFont;
|
ctx.font = (node.data.font !== undefined) ? node.data.font : nodeFont;
|
||||||
ctx.fillStyle = "#000000";
|
ctx.fillStyle = (node.data.color !== undefined) ? node.data.color : "#000000";
|
||||||
var text = (node.data.label !== undefined) ? node.data.label : node.id;
|
var text = (node.data.label !== undefined) ? node.data.label : node.id;
|
||||||
ctx.fillText(text, s.x - contentWidth/2, s.y - contentHeight/2);
|
ctx.fillText(text, s.x - contentWidth/2, s.y - contentHeight/2);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user