
structr.js.lib.sigma.plugins.sigma.layout.fruchterman.min.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of structr-ui Show documentation
Show all versions of structr-ui Show documentation
Structr is an open source framework based on the popular Neo4j graph database.
The newest version!
/* Sigma Fruchterman-Reingold - Version: 0.1 - Author: Sébastien Heymann @ Linkurious - License: MIT */
(function(){"use strict";function i(){var i=this;this.init=function(i,n){if(n=n||{},this.sigInst=i,this.config=sigma.utils.extend(n,t),this.easing=n.easing,this.duration=n.duration,!sigma.plugins||"undefined"==typeof sigma.plugins.animate)throw new Error("sigma.plugins.animate is not declared");this.started=!1,this.running=!1},this.atomicGo=function(){if(!this.running||this.iterCount<1)return!1;var t,n,r,s,e,a,f,g,o,h=this.sigInst.graph.nodes(),u=this.sigInst.graph.edges(),d=h.length,l=u.length;this.config.area=this.config.autoArea?d*d:this.config.area,this.iterCount--,this.running=this.iterCount>0;var c=Math.sqrt(this.config.area)/10,y=Math.sqrt(this.config.area/(1+d));for(t=0;d>t;t++)for(r=h[t],r.fr||(r.fr_x=r.x,r.fr_y=r.y,r.fr={dx:0,dy:0}),n=0;d>n;n++)s=h[n],r.id!=s.id&&(a=r.fr_x-s.fr_x,f=r.fr_y-s.fr_y,g=Math.sqrt(a*a+f*f)+.01,g>0&&(o=y*y/g,r.fr.dx+=a/g*o,r.fr.dy+=f/g*o));var m,p,x;for(t=0;l>t;t++)e=u[t],m=i.sigInst.graph.nodes(e.source),p=i.sigInst.graph.nodes(e.target),a=m.fr_x-p.fr_x,f=m.fr_y-p.fr_y,g=Math.sqrt(a*a+f*f)+.01,x=g*g/y,g>0&&(m.fr.dx-=a/g*x,m.fr.dy-=f/g*x,p.fr.dx+=a/g*x,p.fr.dy+=f/g*x);var _,I,v;for(t=0;d>t;t++)r=h[t],_=Math.sqrt(r.fr_x*r.fr_x+r.fr_y*r.fr_y),I=.01*y*i.config.gravity*_,r.fr.dx-=I*r.fr_x/_,r.fr.dy-=I*r.fr_y/_,r.fr.dx*=i.config.speed,r.fr.dy*=i.config.speed,r.fixed||(a=r.fr.dx,f=r.fr.dy,g=Math.sqrt(a*a+f*f),g>0&&(v=Math.min(c*i.config.speed,g),r.fr_x+=a/g*v,r.fr_y+=f/g*v));return this.running},this.go=function(){for(this.iterCount=this.config.iterations;this.running;)this.atomicGo();this.stop()},this.start=function(){if(!this.running){var t=this.sigInst.graph.nodes();if(this.running=!0,!this.started){for(var n=0;n
© 2015 - 2025 Weber Informatics LLC | Privacy Policy