@knowvah/dot-engine 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/libm-hypot.d.ts +3 -0
- package/dist/common/libm-hypot.d.ts.map +1 -0
- package/dist/common/poly-sizing.d.ts.map +1 -1
- package/dist/index.js +72 -49
- package/dist/index.js.map +4 -4
- package/dist/layout/fdp/derive.d.ts.map +1 -1
- package/dist/layout/fdp/fdp-model.d.ts +4 -4
- package/dist/layout/fdp/tlayout-init.d.ts.map +1 -1
- package/dist/layout/fdp/tlayout-parms.d.ts +4 -1
- package/dist/layout/fdp/tlayout-parms.d.ts.map +1 -1
- package/dist/layout/fdp/tlayout.d.ts +3 -4
- package/dist/layout/fdp/tlayout.d.ts.map +1 -1
- package/dist/layout/fdp/xlayout.d.ts.map +1 -1
- package/dist/render.js +70 -47
- package/dist/render.js.map +4 -4
- package/package.json +1 -1
- package/src/common/libm-hypot.ts +40 -0
- package/src/common/poly-sizing.ts +10 -10
- package/src/layout/fdp/derive.ts +5 -2
- package/src/layout/fdp/fdp-model.ts +4 -4
- package/src/layout/fdp/tlayout-init.ts +8 -6
- package/src/layout/fdp/tlayout-parms.ts +5 -2
- package/src/layout/fdp/tlayout.ts +18 -17
- package/src/layout/fdp/xlayout.ts +26 -22
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libm-hypot.d.ts","sourceRoot":"","sources":["../../src/common/libm-hypot.ts"],"names":[],"mappings":"AAyBA,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poly-sizing.d.ts","sourceRoot":"","sources":["../../src/common/poly-sizing.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"poly-sizing.d.ts","sourceRoot":"","sources":["../../src/common/poly-sizing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16909,6 +16909,24 @@ function RADIANS(deg) {
|
|
|
16909
16909
|
return deg / 180 * Math.PI;
|
|
16910
16910
|
}
|
|
16911
16911
|
|
|
16912
|
+
// src/common/libm-hypot.ts
|
|
16913
|
+
var BIG = 2 ** 500;
|
|
16914
|
+
var SMALL = 2 ** -500;
|
|
16915
|
+
var SCALE_UP = 2 ** 600;
|
|
16916
|
+
var SCALE_DOWN = 2 ** -600;
|
|
16917
|
+
function libmHypot(a, b) {
|
|
16918
|
+
if (a === Infinity || a === -Infinity || b === Infinity || b === -Infinity) return Infinity;
|
|
16919
|
+
let x = Math.abs(a);
|
|
16920
|
+
let y = Math.abs(b);
|
|
16921
|
+
if (x < y) [x, y] = [y, x];
|
|
16922
|
+
if (x > BIG) return core(x * SCALE_DOWN, y * SCALE_DOWN) * SCALE_UP;
|
|
16923
|
+
if (x < SMALL) return core(x * SCALE_UP, y * SCALE_UP) * SCALE_DOWN;
|
|
16924
|
+
return core(x, y);
|
|
16925
|
+
}
|
|
16926
|
+
function core(x, y) {
|
|
16927
|
+
return Math.sqrt(fma(y, y, x * x));
|
|
16928
|
+
}
|
|
16929
|
+
|
|
16912
16930
|
// src/common/poly-sizing.ts
|
|
16913
16931
|
var GAP = 4;
|
|
16914
16932
|
var XPAD = 4 * GAP;
|
|
@@ -16996,16 +17014,16 @@ function ellipsePeripheryBB(bb, peripheries, penwidth, hasOutline) {
|
|
|
16996
17014
|
return { bb: b, outline };
|
|
16997
17015
|
}
|
|
16998
17016
|
function transformUnitVertex(R2, g, c, bb) {
|
|
16999
|
-
const D = { x: R2.x
|
|
17017
|
+
const D = { x: fma(R2.x, fma(R2.y, c.gdistortion, c.skewdist), R2.y * c.gskew), y: R2.y };
|
|
17000
17018
|
const alpha = RADIANS(g.orientation) + Math.atan2(D.y, D.x);
|
|
17001
|
-
const r =
|
|
17019
|
+
const r = libmHypot(D.x, D.y);
|
|
17002
17020
|
return { x: r * Math.cos(alpha) * bb.x, y: r * Math.sin(alpha) * bb.y };
|
|
17003
17021
|
}
|
|
17004
17022
|
function polygonVertices(bb, g, isBox3) {
|
|
17005
17023
|
const sectorangle = 2 * Math.PI / g.sides;
|
|
17006
17024
|
const sidelength = Math.sin(sectorangle / 2);
|
|
17007
17025
|
const c = {
|
|
17008
|
-
skewdist:
|
|
17026
|
+
skewdist: libmHypot(Math.abs(g.distortion) + Math.abs(g.skew), 1),
|
|
17009
17027
|
gdistortion: g.distortion * SQRT2 / Math.cos(sectorangle / 2),
|
|
17010
17028
|
gskew: g.skew / 2
|
|
17011
17029
|
};
|
|
@@ -17430,13 +17448,13 @@ function evalBezier(sp, t, left2, right2) {
|
|
|
17430
17448
|
return pt;
|
|
17431
17449
|
}
|
|
17432
17450
|
var HW = 2;
|
|
17433
|
-
var
|
|
17451
|
+
var SMALL2 = 1e-10;
|
|
17434
17452
|
function ptToLine2(a, b, p) {
|
|
17435
17453
|
const dx = b.x - a.x;
|
|
17436
17454
|
const dy = b.y - a.y;
|
|
17437
17455
|
let a2 = (p.y - a.y) * dx - (p.x - a.x) * dy;
|
|
17438
17456
|
a2 *= a2;
|
|
17439
|
-
if (a2 <
|
|
17457
|
+
if (a2 < SMALL2) return 0;
|
|
17440
17458
|
return a2 / (dx * dx + dy * dy);
|
|
17441
17459
|
}
|
|
17442
17460
|
function checkControlPoints(cp) {
|
|
@@ -19979,7 +19997,7 @@ function feasibleTree(ctx) {
|
|
|
19979
19997
|
|
|
19980
19998
|
// src/util/bsd-qsort.ts
|
|
19981
19999
|
var THRESH = 7;
|
|
19982
|
-
var
|
|
20000
|
+
var BIG2 = 40;
|
|
19983
20001
|
function swap(arr, i, j) {
|
|
19984
20002
|
const t = arr[i];
|
|
19985
20003
|
arr[i] = arr[j];
|
|
@@ -20005,7 +20023,7 @@ function choosePivot(arr, lo, n, cmp) {
|
|
|
20005
20023
|
let pm = lo + (n >> 1);
|
|
20006
20024
|
let pl = lo;
|
|
20007
20025
|
let pn = lo + (n - 1);
|
|
20008
|
-
if (n >
|
|
20026
|
+
if (n > BIG2) {
|
|
20009
20027
|
const d = n >> 3;
|
|
20010
20028
|
pl = med3(arr, pl, pl + d, pl + 2 * d, cmp);
|
|
20011
20029
|
pm = med3(arr, pm - d, pm, pm + d, cmp);
|
|
@@ -35806,7 +35824,7 @@ function addLoop(sg, cp, dp, sp) {
|
|
|
35806
35824
|
var MARGIN = 36;
|
|
35807
35825
|
var delta = 1;
|
|
35808
35826
|
var mu = 500;
|
|
35809
|
-
var
|
|
35827
|
+
var BIG3 = 16384;
|
|
35810
35828
|
function chanSz(w) {
|
|
35811
35829
|
return (w - 3) / 2;
|
|
35812
35830
|
}
|
|
@@ -35826,7 +35844,7 @@ function updateWt(ep, sz) {
|
|
|
35826
35844
|
ep.cnt++;
|
|
35827
35845
|
if (ep.cnt > sz) {
|
|
35828
35846
|
ep.cnt = 0;
|
|
35829
|
-
ep.weight +=
|
|
35847
|
+
ep.weight += BIG3;
|
|
35830
35848
|
}
|
|
35831
35849
|
}
|
|
35832
35850
|
function updateWts(g, cp, ep) {
|
|
@@ -35884,12 +35902,12 @@ function createSEdges(cp, g) {
|
|
|
35884
35902
|
let vwt = delta * (bb.UR.y - bb.LL.y);
|
|
35885
35903
|
let wt = (hwt + vwt) / 2 + mu;
|
|
35886
35904
|
if (isSmall(bb.UR.y - bb.LL.y) && !(cp.flags & MZ_SMALLV)) {
|
|
35887
|
-
hwt =
|
|
35888
|
-
wt =
|
|
35905
|
+
hwt = BIG3;
|
|
35906
|
+
wt = BIG3;
|
|
35889
35907
|
}
|
|
35890
35908
|
if (isSmall(bb.UR.x - bb.LL.x) && !(cp.flags & MZ_SMALLH)) {
|
|
35891
|
-
vwt =
|
|
35892
|
-
wt =
|
|
35909
|
+
vwt = BIG3;
|
|
35910
|
+
wt = BIG3;
|
|
35893
35911
|
}
|
|
35894
35912
|
const L2 = cp.sides[M_LEFT];
|
|
35895
35913
|
const T2 = cp.sides[M_TOP];
|
|
@@ -41494,7 +41512,7 @@ function raySeg2(v, w, a, b) {
|
|
|
41494
41512
|
}
|
|
41495
41513
|
return wind(v, a, w) * wind(v, a, b) >= 0;
|
|
41496
41514
|
}
|
|
41497
|
-
var
|
|
41515
|
+
var SMALL3 = 1e-10;
|
|
41498
41516
|
function raySegIntersect(v, w, a, b) {
|
|
41499
41517
|
if (!raySeg2(v, w, a, b)) return null;
|
|
41500
41518
|
const mv = { x: w.x - v.x, y: w.y - v.y };
|
|
@@ -41502,7 +41520,7 @@ function raySegIntersect(v, w, a, b) {
|
|
|
41502
41520
|
const ln = { x: -lv.y, y: lv.x };
|
|
41503
41521
|
const lc = -(ln.x * a.x + ln.y * a.y);
|
|
41504
41522
|
const dt = ln.x * mv.x + ln.y * mv.y;
|
|
41505
|
-
if (Math.abs(dt) <
|
|
41523
|
+
if (Math.abs(dt) < SMALL3) return null;
|
|
41506
41524
|
const s = (ln.x * v.x + ln.y * v.y + lc) / dt;
|
|
41507
41525
|
return { x: v.x - s * mv.x, y: v.y - s * mv.y };
|
|
41508
41526
|
}
|
|
@@ -48218,7 +48236,10 @@ var fdpParms = {
|
|
|
48218
48236
|
C: 0,
|
|
48219
48237
|
Tfact: 1,
|
|
48220
48238
|
K: -1,
|
|
48221
|
-
T0: -1
|
|
48239
|
+
T0: -1,
|
|
48240
|
+
/** Distance beyond which repulsion is 0; HUGE_VAL unless `dot -Lm` (no library
|
|
48241
|
+
* equivalent). @see lib/fdpgen/fdp.h:fdpParms_s.Mlimit */
|
|
48242
|
+
Mlimit: Infinity
|
|
48222
48243
|
};
|
|
48223
48244
|
var parms = {
|
|
48224
48245
|
useGrid: 0,
|
|
@@ -48546,8 +48567,8 @@ function placeByNeighbors(g, np, ctr) {
|
|
|
48546
48567
|
np.info.pos[0] = p.x;
|
|
48547
48568
|
np.info.pos[1] = p.y;
|
|
48548
48569
|
} else if (cnt === 1) {
|
|
48549
|
-
np.info.pos[0] = 0.98
|
|
48550
|
-
np.info.pos[1] = 0.9
|
|
48570
|
+
np.info.pos[0] = fma(0.98, p.x, 0.1 * ctr.x);
|
|
48571
|
+
np.info.pos[1] = fma(0.9, p.y, 0.1 * ctr.y);
|
|
48551
48572
|
} else {
|
|
48552
48573
|
const angle = Math.PI * 2 * drand48();
|
|
48553
48574
|
const radius = 0.9 * drand48();
|
|
@@ -48563,8 +48584,8 @@ function averagePlacedNeighbors(g, np, p) {
|
|
|
48563
48584
|
const op = ep.head === np ? ep.tail : ep.head;
|
|
48564
48585
|
if (!hasPos3(op)) continue;
|
|
48565
48586
|
if (cnt) {
|
|
48566
|
-
p.x = (p.x
|
|
48567
|
-
p.y = (p.y
|
|
48587
|
+
p.x = fma(p.x, cnt, op.info.pos[0]) / (cnt + 1);
|
|
48588
|
+
p.y = fma(p.y, cnt, op.info.pos[1]) / (cnt + 1);
|
|
48568
48589
|
} else {
|
|
48569
48590
|
p.x = op.info.pos[0];
|
|
48570
48591
|
p.y = op.info.pos[1];
|
|
@@ -48626,8 +48647,8 @@ function sizeBoundary(width, height) {
|
|
|
48626
48647
|
function placeWithPorts(g, pp, ctr) {
|
|
48627
48648
|
for (const port of pp) {
|
|
48628
48649
|
const np = port.n;
|
|
48629
|
-
np.info.pos[0] = parms.Wd
|
|
48630
|
-
np.info.pos[1] = parms.Ht
|
|
48650
|
+
np.info.pos[0] = fma(parms.Wd, Math.cos(port.alpha), ctr.x);
|
|
48651
|
+
np.info.pos[1] = fma(parms.Ht, Math.sin(port.alpha), ctr.y);
|
|
48631
48652
|
dndata(np).pinned = P_SET;
|
|
48632
48653
|
}
|
|
48633
48654
|
for (const np of g.nodes.values()) {
|
|
@@ -48689,19 +48710,20 @@ function coincidentDelta() {
|
|
|
48689
48710
|
} while (xdelta === 0 && ydelta === 0);
|
|
48690
48711
|
return { xdelta, ydelta };
|
|
48691
48712
|
}
|
|
48692
|
-
function doRep(p, q, xdelta, ydelta,
|
|
48713
|
+
function doRep(p, q, xdelta, ydelta, dist4) {
|
|
48693
48714
|
let force;
|
|
48694
|
-
if (
|
|
48715
|
+
if (!(dist4 > 0)) {
|
|
48695
48716
|
const d = coincidentDelta();
|
|
48696
48717
|
xdelta = d.xdelta;
|
|
48697
48718
|
ydelta = d.ydelta;
|
|
48698
|
-
|
|
48719
|
+
dist4 = libmHypot(xdelta, ydelta);
|
|
48699
48720
|
}
|
|
48700
|
-
if (
|
|
48701
|
-
|
|
48702
|
-
|
|
48721
|
+
if (dist4 > fdpParms.Mlimit) {
|
|
48722
|
+
force = 0;
|
|
48723
|
+
} else if (parms.useNew) {
|
|
48724
|
+
force = parms.K * parms.K / (dist4 * dist4 * dist4);
|
|
48703
48725
|
} else {
|
|
48704
|
-
force = parms.K * parms.K /
|
|
48726
|
+
force = parms.K * parms.K / (dist4 * dist4);
|
|
48705
48727
|
}
|
|
48706
48728
|
if (isPort(p) && isPort(q)) force *= 10;
|
|
48707
48729
|
const dq = disp(q);
|
|
@@ -48714,7 +48736,7 @@ function doRep(p, q, xdelta, ydelta, dist22) {
|
|
|
48714
48736
|
function applyRep(p, q) {
|
|
48715
48737
|
const xdelta = q.info.pos[0] - p.info.pos[0];
|
|
48716
48738
|
const ydelta = q.info.pos[1] - p.info.pos[1];
|
|
48717
|
-
doRep(p, q, xdelta, ydelta,
|
|
48739
|
+
doRep(p, q, xdelta, ydelta, libmHypot(xdelta, ydelta));
|
|
48718
48740
|
}
|
|
48719
48741
|
function doNeighbor(grid2, i, j, nodes) {
|
|
48720
48742
|
const cellp = grid2.find(i, j);
|
|
@@ -48723,8 +48745,8 @@ function doNeighbor(grid2, i, j, nodes) {
|
|
|
48723
48745
|
for (const q of cellp.nodes) {
|
|
48724
48746
|
const xdelta = q.info.pos[0] - p.info.pos[0];
|
|
48725
48747
|
const ydelta = q.info.pos[1] - p.info.pos[1];
|
|
48726
|
-
const
|
|
48727
|
-
if (
|
|
48748
|
+
const dist4 = libmHypot(xdelta, ydelta);
|
|
48749
|
+
if (dist4 < parms.Cell) doRep(p, q, xdelta, ydelta, dist4);
|
|
48728
48750
|
}
|
|
48729
48751
|
}
|
|
48730
48752
|
}
|
|
@@ -48896,7 +48918,7 @@ function ht2(n) {
|
|
|
48896
48918
|
return xMarg.doAdd ? n.info.height / 2 + xMarg.y : n.info.height * xMarg.y / 2;
|
|
48897
48919
|
}
|
|
48898
48920
|
function rad(n) {
|
|
48899
|
-
return
|
|
48921
|
+
return libmHypot(wd2(n), ht2(n));
|
|
48900
48922
|
}
|
|
48901
48923
|
function xinitParams(n, xpms) {
|
|
48902
48924
|
xParams.K = xpms.K;
|
|
@@ -48931,37 +48953,38 @@ function cntOverlaps(g) {
|
|
|
48931
48953
|
function applyRep2(p, q, rs) {
|
|
48932
48954
|
let xdelta = q.info.pos[0] - p.info.pos[0];
|
|
48933
48955
|
let ydelta = q.info.pos[1] - p.info.pos[1];
|
|
48934
|
-
let
|
|
48935
|
-
if (
|
|
48956
|
+
let dist4 = libmHypot(xdelta, ydelta);
|
|
48957
|
+
if (!(dist4 > 0)) {
|
|
48936
48958
|
const d = coincidentDelta();
|
|
48937
48959
|
xdelta = d.xdelta;
|
|
48938
48960
|
ydelta = d.ydelta;
|
|
48939
|
-
|
|
48961
|
+
dist4 = libmHypot(xdelta, ydelta);
|
|
48940
48962
|
}
|
|
48941
48963
|
const ov = overlap4(p, q) ? 1 : 0;
|
|
48942
|
-
|
|
48964
|
+
let force = ov ? rs.ov / (dist4 * dist4) : rs.nonov / (dist4 * dist4);
|
|
48965
|
+
if (dist4 > fdpParms.Mlimit) force = 0;
|
|
48943
48966
|
const dq = disp(q);
|
|
48944
48967
|
const dp = disp(p);
|
|
48945
|
-
dq[0]
|
|
48946
|
-
dq[1]
|
|
48947
|
-
dp[0]
|
|
48948
|
-
dp[1]
|
|
48968
|
+
dq[0] = fma(xdelta, force, dq[0]);
|
|
48969
|
+
dq[1] = fma(ydelta, force, dq[1]);
|
|
48970
|
+
dp[0] = fms(xdelta, force, dp[0]);
|
|
48971
|
+
dp[1] = fms(ydelta, force, dp[1]);
|
|
48949
48972
|
return ov;
|
|
48950
48973
|
}
|
|
48951
48974
|
function applyAttr2(p, q) {
|
|
48952
48975
|
if (overlap4(p, q)) return;
|
|
48953
48976
|
const xdelta = q.info.pos[0] - p.info.pos[0];
|
|
48954
48977
|
const ydelta = q.info.pos[1] - p.info.pos[1];
|
|
48955
|
-
const dist4 =
|
|
48978
|
+
const dist4 = libmHypot(xdelta, ydelta);
|
|
48956
48979
|
const din = rad(p) + rad(q);
|
|
48957
48980
|
const dout = dist4 - din;
|
|
48958
48981
|
const force = dout * dout / ((xParams.K + din) * dist4);
|
|
48959
48982
|
const dq = disp(q);
|
|
48960
48983
|
const dp = disp(p);
|
|
48961
|
-
dq[0]
|
|
48962
|
-
dq[1]
|
|
48963
|
-
dp[0]
|
|
48964
|
-
dp[1]
|
|
48984
|
+
dq[0] = fms(xdelta, force, dq[0]);
|
|
48985
|
+
dq[1] = fms(ydelta, force, dq[1]);
|
|
48986
|
+
dp[0] = fma(xdelta, force, dp[0]);
|
|
48987
|
+
dp[1] = fma(ydelta, force, dp[1]);
|
|
48965
48988
|
}
|
|
48966
48989
|
function accumForces(g, rs) {
|
|
48967
48990
|
let overlaps2 = 0;
|
|
@@ -48983,7 +49006,7 @@ function moveNodes(g, temp) {
|
|
|
48983
49006
|
if (dndata(n).pinned === P_PIN) continue;
|
|
48984
49007
|
const dx = disp(n)[0];
|
|
48985
49008
|
const dy = disp(n)[1];
|
|
48986
|
-
const len2 = dx
|
|
49009
|
+
const len2 = fma(dx, dx, dy * dy);
|
|
48987
49010
|
if (len2 < temp2) {
|
|
48988
49011
|
n.info.pos[0] += dx;
|
|
48989
49012
|
n.info.pos[1] += dy;
|
|
@@ -49237,7 +49260,7 @@ function deriveClusterNodes(g, dg, infop) {
|
|
|
49237
49260
|
}
|
|
49238
49261
|
}
|
|
49239
49262
|
function deriveRealNodes(g, dg) {
|
|
49240
|
-
for (const n of g
|
|
49263
|
+
for (const n of nodesInSeq(g)) {
|
|
49241
49264
|
if (getDnode(n) !== null) continue;
|
|
49242
49265
|
const par = getParent(n);
|
|
49243
49266
|
if (par !== null && par !== gdata(g).parent) {
|
|
@@ -49279,7 +49302,7 @@ function deriveEdge(dg, byPair, tl, hd) {
|
|
|
49279
49302
|
return de;
|
|
49280
49303
|
}
|
|
49281
49304
|
function deriveEdges(g, dg, byPair) {
|
|
49282
|
-
for (const n of g
|
|
49305
|
+
for (const n of nodesInSeq(g)) {
|
|
49283
49306
|
const tl = getDnode(n);
|
|
49284
49307
|
for (const e of n.outEdges(g)) {
|
|
49285
49308
|
const hd = getDnode(e.head);
|