UNPKG

d3-force-reuse

Version:

Fast force-directed graph layout by reusing Barnes Hut approximations.

2 lines 2.08 kB
// Copyright 2018 Two Six Labs, LLC. v1.0.1 d3-force-reuse https://github.com/twosixlabs/d3-force-reuse/ !function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("d3-quadtree")):"function"==typeof define&&define.amd?define(["exports","d3-quadtree"],n):n(t.d3=t.d3||{},t.d3)}(this,function(t,q){"use strict";var b=function(t){return function(){return t}};t.forceManyBodyReuse=function(){var r,o,d,u,a,i,c,f=0,l=b(-30),s=1,h=1/0,x=.81;function v(){return 1e-6*(Math.random()-.5)}function y(t){return t.x}function p(t){return t.y}function n(t){var n,e=r.length;for(u&&!i(f,r)||(u=q.quadtree(r,y,p).visitAfter(M),r.update.push(f)),d=t,n=0;n<e;++n)o=r[n],u.visit(g);++f}function e(){if(r){f=0,r.update=[],i=a(),u=null;var t,n,e=r.length;for(c=new Array(e),t=0;t<e;++t)n=r[t],c[n.index]=+l(n,t,r)}}function M(t){var n,e,r,u,a,i=0,f=0;if(t.length){for(r=u=a=0;a<4;++a)(n=t[a])&&(e=Math.abs(n.value))&&(i+=n.value,f+=e,r+=e*n.x,u+=e*n.y);t.x=r/f,t.y=u/f}else for((n=t).x=n.data.x,n.y=n.data.y;i+=c[n.data.index],n=n.next;);t.value=i}function g(t,n,e,r){if(!t.value)return!0;var u=t.x-o.x,a=t.y-o.y,i=r-n,f=u*u+a*a;if(i*i/x<f)return f<h&&(0===u&&(f+=(u=v())*u),0===a&&(f+=(a=v())*a),f<s&&(f=Math.sqrt(s*f)),o.vx+=u*t.value*d/f,o.vy+=a*t.value*d/f),!0;if(!(t.length||h<=f))for((t.data!==o||t.next)&&(0===u&&(f+=(u=v())*u),0===a&&(f+=(a=v())*a),f<s&&(f=Math.sqrt(s*f)));t.data!==o&&(f=(u=t.data.x-o.x)*u+(a=t.data.y-o.y)*a,0===u&&(f+=(u=v())*u),0===a&&(f+=(a=v())*a),f<s&&(f=Math.sqrt(s*f)),i=c[t.data.index]*d/f,o.vx+=u*i,o.vy+=a*i),t=t.next;);}return a=function(){return function(t){return t%13==0}},n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(l="function"==typeof t?t:b(+t),e(),n):l},n.distanceMin=function(t){return arguments.length?(s=t*t,n):Math.sqrt(s)},n.distanceMax=function(t){return arguments.length?(h=t*t,n):Math.sqrt(h)},n.theta=function(t){return arguments.length?(x=t*t,n):Math.sqrt(x)},n.update=function(t){return arguments.length?(i=(a=t)(),n):a},n},Object.defineProperty(t,"__esModule",{value:!0})});