d3-force-limit
Version:
A positioning hard limit force type for the d3-force simulation engine.
1 lines • 9.14 kB
Source Map (JSON)
{"version":3,"file":"d3-force-limit.js","sources":["../src/constant.js","../src/limit.js"],"sourcesContent":["export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from './constant';\n\nexport default function() {\n let nDim,\n nodes,\n radius = (node => 1), // accessor: number > 0\n x0 = (node => -Infinity), // accessor: min X\n x1 = (node => Infinity), // accessor: max X\n y0 = (node => -Infinity), // accessor: min Y\n y1 = (node => Infinity), // accessor: max Y\n z0 = (node => -Infinity), // accessor: min z\n z1 = (node => Infinity), // accessor: max z\n cushionWidth = 0, // width of the cushion layer that pushes nodes away from boundaries\n cushionStrength = 0.01; // intensity of the cushion layer that pushes nodes away from boundaries, in terms of px/tick^2\n\n function force(alpha) {\n nodes.forEach(node => {\n const r = radius(node);\n\n ['x', 'y', 'z'].slice(0, nDim).forEach(coord => {\n if (!(coord in node)) { return; }\n\n const range = { x: [x0, x1], y: [y0, y1], z: [z0, z1] }[coord]\n .map(accessFn => accessFn(node))\n .sort((a,b) => a - b);\n\n // take node radius into account\n range[0] += r;\n range[1] -= r;\n\n const vAttr = `v${coord}`;\n const v = node[vAttr];\n const pos = node[coord];\n const futurePos = pos + v;\n\n if (futurePos < range[0] || futurePos > range[1]) { // future position out of bounds\n const isBefore = futurePos < range[0];\n\n if (pos < range[0] || pos > range[1]) { // already out of bounds\n if (isBefore === v < 0) {\n node[vAttr] = 0; // moving outwards, stop its motion\n }\n node[coord] = range[isBefore ? 0 : 1]; // move it to the closest edge\n } else {\n node[vAttr] = range[isBefore ? 0 : 1] - pos; // will cross the limit, slow it down\n }\n }\n\n if (cushionWidth > 0 && cushionStrength > 0) {\n // repel from boundaries\n node[vAttr] += (\n Math.max(0, 1 - Math.max(0, pos - range[0]) / cushionWidth)\n - Math.max(0, 1 - Math.max(0, range[1] - pos) / cushionWidth)\n ) * cushionStrength * alpha;\n }\n });\n });\n }\n\n function initialize() {}\n\n force.initialize = function(initNodes, ...args) {\n nodes = initNodes;\n nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;\n initialize();\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), force) : radius;\n };\n\n force.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), force) : x0;\n };\n\n force.x1 = function(_) {\n return arguments.length ? (x1 = typeof _ === \"function\" ? _ : constant(+_), force) : x1;\n };\n\n force.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), force) : y0;\n };\n\n force.y1 = function(_) {\n return arguments.length ? (y1 = typeof _ === \"function\" ? _ : constant(+_), force) : y1;\n };\n\n force.z0 = function(_) {\n return arguments.length ? (z0 = typeof _ === \"function\" ? _ : constant(+_), force) : z0;\n };\n\n force.z1 = function(_) {\n return arguments.length ? (z1 = typeof _ === \"function\" ? _ : constant(+_), force) : z1;\n };\n\n force.cushionWidth = function(_) {\n return arguments.length ? (cushionWidth = _, force) : cushionWidth;\n };\n\n force.cushionStrength = function(_) {\n return arguments.length ? (cushionStrength = _, force) : cushionStrength;\n };\n\n return force;\n}"],"names":["x","nDim","nodes","radius","node","x0","Infinity","x1","y0","y1","z0","z1","cushionWidth","cushionStrength","force","alpha","forEach","r","slice","coord","range","y","z","map","accessFn","sort","a","b","vAttr","v","pos","futurePos","isBefore","Math","max","initialize","initNodes","args","find","arg","includes","_","arguments","length","constant"],"mappings":"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"}