@antv/layout 0.3.11 → 1.0.0-alpha.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.
Files changed (555) hide show
  1. package/README.md +45 -32
  2. package/dist/3a54d760230d1933f953.worker.js +2 -0
  3. package/dist/3a54d760230d1933f953.worker.js.map +1 -0
  4. package/dist/index.min.js +2 -0
  5. package/dist/index.min.js.map +1 -0
  6. package/lib/Circular.d.ts +40 -0
  7. package/lib/Supervisor.d.ts +65 -0
  8. package/lib/index.d.ts +3 -3
  9. package/lib/registry.d.ts +3 -0
  10. package/lib/types.d.ts +128 -0
  11. package/lib/util/gpu.d.ts +22 -22
  12. package/lib/util/index.d.ts +6 -6
  13. package/lib/util/math.d.ts +9 -4
  14. package/lib/worker.d.ts +3 -0
  15. package/package.json +21 -95
  16. package/dist/layout.min.js +0 -3
  17. package/dist/layout.min.js.LICENSE.txt +0 -1
  18. package/dist/layout.min.js.map +0 -1
  19. package/es/index.d.ts +0 -3
  20. package/es/index.js +0 -6
  21. package/es/index.js.map +0 -1
  22. package/es/layout/base.d.ts +0 -22
  23. package/es/layout/base.js +0 -51
  24. package/es/layout/base.js.map +0 -1
  25. package/es/layout/circular.d.ts +0 -80
  26. package/es/layout/circular.js +0 -314
  27. package/es/layout/circular.js.map +0 -1
  28. package/es/layout/comboCombined.d.ts +0 -54
  29. package/es/layout/comboCombined.js +0 -348
  30. package/es/layout/comboCombined.js.map +0 -1
  31. package/es/layout/comboForce.d.ts +0 -134
  32. package/es/layout/comboForce.js +0 -801
  33. package/es/layout/comboForce.js.map +0 -1
  34. package/es/layout/concentric.d.ts +0 -67
  35. package/es/layout/concentric.js +0 -219
  36. package/es/layout/concentric.js.map +0 -1
  37. package/es/layout/constants.d.ts +0 -12
  38. package/es/layout/constants.js +0 -22
  39. package/es/layout/constants.js.map +0 -1
  40. package/es/layout/dagre/graph.d.ts +0 -91
  41. package/es/layout/dagre/graph.js +0 -4
  42. package/es/layout/dagre/graph.js.map +0 -1
  43. package/es/layout/dagre/index.d.ts +0 -8
  44. package/es/layout/dagre/index.js +0 -31
  45. package/es/layout/dagre/index.js.map +0 -1
  46. package/es/layout/dagre/src/acyclic.d.ts +0 -6
  47. package/es/layout/dagre/src/acyclic.js +0 -52
  48. package/es/layout/dagre/src/acyclic.js.map +0 -1
  49. package/es/layout/dagre/src/add-border-segments.d.ts +0 -3
  50. package/es/layout/dagre/src/add-border-segments.js +0 -32
  51. package/es/layout/dagre/src/add-border-segments.js.map +0 -1
  52. package/es/layout/dagre/src/coordinate-system.d.ts +0 -6
  53. package/es/layout/dagre/src/coordinate-system.js +0 -69
  54. package/es/layout/dagre/src/coordinate-system.js.map +0 -1
  55. package/es/layout/dagre/src/data/list.d.ts +0 -12
  56. package/es/layout/dagre/src/data/list.js +0 -48
  57. package/es/layout/dagre/src/data/list.js.map +0 -1
  58. package/es/layout/dagre/src/debug.d.ts +0 -3
  59. package/es/layout/dagre/src/debug.js +0 -24
  60. package/es/layout/dagre/src/debug.js.map +0 -1
  61. package/es/layout/dagre/src/greedy-fas.d.ts +0 -3
  62. package/es/layout/dagre/src/greedy-fas.js +0 -114
  63. package/es/layout/dagre/src/greedy-fas.js.map +0 -1
  64. package/es/layout/dagre/src/layout.d.ts +0 -3
  65. package/es/layout/dagre/src/layout.js +0 -518
  66. package/es/layout/dagre/src/layout.js.map +0 -1
  67. package/es/layout/dagre/src/nesting-graph.d.ts +0 -6
  68. package/es/layout/dagre/src/nesting-graph.js +0 -117
  69. package/es/layout/dagre/src/nesting-graph.js.map +0 -1
  70. package/es/layout/dagre/src/normalize.d.ts +0 -6
  71. package/es/layout/dagre/src/normalize.js +0 -89
  72. package/es/layout/dagre/src/normalize.js.map +0 -1
  73. package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +0 -3
  74. package/es/layout/dagre/src/order/add-subgraph-constraints.js +0 -27
  75. package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +0 -1
  76. package/es/layout/dagre/src/order/barycenter.d.ts +0 -11
  77. package/es/layout/dagre/src/order/barycenter.js +0 -24
  78. package/es/layout/dagre/src/order/barycenter.js.map +0 -1
  79. package/es/layout/dagre/src/order/build-layer-graph.d.ts +0 -3
  80. package/es/layout/dagre/src/order/build-layer-graph.js +0 -71
  81. package/es/layout/dagre/src/order/build-layer-graph.js.map +0 -1
  82. package/es/layout/dagre/src/order/cross-count.d.ts +0 -3
  83. package/es/layout/dagre/src/order/cross-count.js +0 -65
  84. package/es/layout/dagre/src/order/cross-count.js.map +0 -1
  85. package/es/layout/dagre/src/order/index.d.ts +0 -3
  86. package/es/layout/dagre/src/order/index.js +0 -91
  87. package/es/layout/dagre/src/order/index.js.map +0 -1
  88. package/es/layout/dagre/src/order/init-data-order.d.ts +0 -6
  89. package/es/layout/dagre/src/order/init-data-order.js +0 -25
  90. package/es/layout/dagre/src/order/init-data-order.js.map +0 -1
  91. package/es/layout/dagre/src/order/init-order.d.ts +0 -3
  92. package/es/layout/dagre/src/order/init-order.js +0 -52
  93. package/es/layout/dagre/src/order/init-order.js.map +0 -1
  94. package/es/layout/dagre/src/order/resolve-conflicts.d.ts +0 -19
  95. package/es/layout/dagre/src/order/resolve-conflicts.js +0 -93
  96. package/es/layout/dagre/src/order/resolve-conflicts.js.map +0 -1
  97. package/es/layout/dagre/src/order/sort-subgraph.d.ts +0 -7
  98. package/es/layout/dagre/src/order/sort-subgraph.js +0 -85
  99. package/es/layout/dagre/src/order/sort-subgraph.js.map +0 -1
  100. package/es/layout/dagre/src/order/sort.d.ts +0 -7
  101. package/es/layout/dagre/src/order/sort.js +0 -68
  102. package/es/layout/dagre/src/order/sort.js.map +0 -1
  103. package/es/layout/dagre/src/parent-dummy-chains.d.ts +0 -3
  104. package/es/layout/dagre/src/parent-dummy-chains.js +0 -81
  105. package/es/layout/dagre/src/parent-dummy-chains.js.map +0 -1
  106. package/es/layout/dagre/src/position/bk.d.ts +0 -23
  107. package/es/layout/dagre/src/position/bk.js +0 -370
  108. package/es/layout/dagre/src/position/bk.js.map +0 -1
  109. package/es/layout/dagre/src/position/index.d.ts +0 -3
  110. package/es/layout/dagre/src/position/index.js +0 -51
  111. package/es/layout/dagre/src/position/index.js.map +0 -1
  112. package/es/layout/dagre/src/rank/feasible-tree.d.ts +0 -9
  113. package/es/layout/dagre/src/rank/feasible-tree.js +0 -148
  114. package/es/layout/dagre/src/rank/feasible-tree.js.map +0 -1
  115. package/es/layout/dagre/src/rank/index.d.ts +0 -3
  116. package/es/layout/dagre/src/rank/index.js +0 -53
  117. package/es/layout/dagre/src/rank/index.js.map +0 -1
  118. package/es/layout/dagre/src/rank/network-simplex.d.ts +0 -9
  119. package/es/layout/dagre/src/rank/network-simplex.js +0 -195
  120. package/es/layout/dagre/src/rank/network-simplex.js.map +0 -1
  121. package/es/layout/dagre/src/rank/util.d.ts +0 -11
  122. package/es/layout/dagre/src/rank/util.js +0 -141
  123. package/es/layout/dagre/src/rank/util.js.map +0 -1
  124. package/es/layout/dagre/src/util.d.ts +0 -31
  125. package/es/layout/dagre/src/util.js +0 -261
  126. package/es/layout/dagre/src/util.js.map +0 -1
  127. package/es/layout/dagre.d.ts +0 -71
  128. package/es/layout/dagre.js +0 -433
  129. package/es/layout/dagre.js.map +0 -1
  130. package/es/layout/dagreCompound.d.ts +0 -121
  131. package/es/layout/dagreCompound.js +0 -391
  132. package/es/layout/dagreCompound.js.map +0 -1
  133. package/es/layout/er/core.d.ts +0 -1
  134. package/es/layout/er/core.js +0 -107
  135. package/es/layout/er/core.js.map +0 -1
  136. package/es/layout/er/forceGrid.d.ts +0 -8
  137. package/es/layout/er/forceGrid.js +0 -88
  138. package/es/layout/er/forceGrid.js.map +0 -1
  139. package/es/layout/er/grid.d.ts +0 -26
  140. package/es/layout/er/grid.js +0 -162
  141. package/es/layout/er/grid.js.map +0 -1
  142. package/es/layout/er/index.d.ts +0 -29
  143. package/es/layout/er/index.js +0 -54
  144. package/es/layout/er/index.js.map +0 -1
  145. package/es/layout/er/mysqlWorkbench.d.ts +0 -6
  146. package/es/layout/er/mysqlWorkbench.js +0 -324
  147. package/es/layout/er/mysqlWorkbench.js.map +0 -1
  148. package/es/layout/er/type.d.ts +0 -35
  149. package/es/layout/er/type.js +0 -2
  150. package/es/layout/er/type.js.map +0 -1
  151. package/es/layout/force/force-in-a-box.d.ts +0 -28
  152. package/es/layout/force/force-in-a-box.js +0 -330
  153. package/es/layout/force/force-in-a-box.js.map +0 -1
  154. package/es/layout/force/force.d.ts +0 -100
  155. package/es/layout/force/force.js +0 -340
  156. package/es/layout/force/force.js.map +0 -1
  157. package/es/layout/force/index.d.ts +0 -1
  158. package/es/layout/force/index.js +0 -2
  159. package/es/layout/force/index.js.map +0 -1
  160. package/es/layout/force2/ForceNBody.d.ts +0 -7
  161. package/es/layout/force2/ForceNBody.js +0 -94
  162. package/es/layout/force2/ForceNBody.js.map +0 -1
  163. package/es/layout/force2/index.d.ts +0 -119
  164. package/es/layout/force2/index.js +0 -608
  165. package/es/layout/force2/index.js.map +0 -1
  166. package/es/layout/forceAtlas2/body.d.ts +0 -33
  167. package/es/layout/forceAtlas2/body.js +0 -89
  168. package/es/layout/forceAtlas2/body.js.map +0 -1
  169. package/es/layout/forceAtlas2/index.d.ts +0 -115
  170. package/es/layout/forceAtlas2/index.js +0 -484
  171. package/es/layout/forceAtlas2/index.js.map +0 -1
  172. package/es/layout/forceAtlas2/quad.d.ts +0 -27
  173. package/es/layout/forceAtlas2/quad.js +0 -96
  174. package/es/layout/forceAtlas2/quad.js.map +0 -1
  175. package/es/layout/forceAtlas2/quadTree.d.ts +0 -20
  176. package/es/layout/forceAtlas2/quadTree.js +0 -103
  177. package/es/layout/forceAtlas2/quadTree.js.map +0 -1
  178. package/es/layout/fruchterman.d.ts +0 -73
  179. package/es/layout/fruchterman.js +0 -296
  180. package/es/layout/fruchterman.js.map +0 -1
  181. package/es/layout/gForce.d.ts +0 -96
  182. package/es/layout/gForce.js +0 -399
  183. package/es/layout/gForce.js.map +0 -1
  184. package/es/layout/gpu/fruchterman.d.ts +0 -57
  185. package/es/layout/gpu/fruchterman.js +0 -267
  186. package/es/layout/gpu/fruchterman.js.map +0 -1
  187. package/es/layout/gpu/fruchtermanShader.d.ts +0 -4
  188. package/es/layout/gpu/fruchtermanShader.js +0 -201
  189. package/es/layout/gpu/fruchtermanShader.js.map +0 -1
  190. package/es/layout/gpu/gForce.d.ts +0 -68
  191. package/es/layout/gpu/gForce.js +0 -330
  192. package/es/layout/gpu/gForce.js.map +0 -1
  193. package/es/layout/gpu/gForceShader.d.ts +0 -4
  194. package/es/layout/gpu/gForceShader.js +0 -218
  195. package/es/layout/gpu/gForceShader.js.map +0 -1
  196. package/es/layout/grid.d.ts +0 -83
  197. package/es/layout/grid.js +0 -317
  198. package/es/layout/grid.js.map +0 -1
  199. package/es/layout/index.d.ts +0 -22
  200. package/es/layout/index.js +0 -25
  201. package/es/layout/index.js.map +0 -1
  202. package/es/layout/layout.d.ts +0 -26
  203. package/es/layout/layout.js +0 -97
  204. package/es/layout/layout.js.map +0 -1
  205. package/es/layout/mds.d.ts +0 -39
  206. package/es/layout/mds.js +0 -122
  207. package/es/layout/mds.js.map +0 -1
  208. package/es/layout/radial/index.d.ts +0 -1
  209. package/es/layout/radial/index.js +0 -2
  210. package/es/layout/radial/index.js.map +0 -1
  211. package/es/layout/radial/mds.d.ts +0 -15
  212. package/es/layout/radial/mds.js +0 -38
  213. package/es/layout/radial/mds.js.map +0 -1
  214. package/es/layout/radial/radial.d.ts +0 -74
  215. package/es/layout/radial/radial.js +0 -420
  216. package/es/layout/radial/radial.js.map +0 -1
  217. package/es/layout/radial/radialNonoverlapForce.d.ts +0 -50
  218. package/es/layout/radial/radialNonoverlapForce.js +0 -123
  219. package/es/layout/radial/radialNonoverlapForce.js.map +0 -1
  220. package/es/layout/random.d.ts +0 -35
  221. package/es/layout/random.js +0 -62
  222. package/es/layout/random.js.map +0 -1
  223. package/es/layout/types.d.ts +0 -432
  224. package/es/layout/types.js +0 -2
  225. package/es/layout/types.js.map +0 -1
  226. package/es/registy/index.d.ts +0 -3
  227. package/es/registy/index.js +0 -41
  228. package/es/registy/index.js.map +0 -1
  229. package/es/util/array.d.ts +0 -1
  230. package/es/util/array.js +0 -2
  231. package/es/util/array.js.map +0 -1
  232. package/es/util/function.d.ts +0 -6
  233. package/es/util/function.js +0 -56
  234. package/es/util/function.js.map +0 -1
  235. package/es/util/gpu.d.ts +0 -52
  236. package/es/util/gpu.js +0 -239
  237. package/es/util/gpu.js.map +0 -1
  238. package/es/util/index.d.ts +0 -6
  239. package/es/util/index.js +0 -7
  240. package/es/util/index.js.map +0 -1
  241. package/es/util/math.d.ts +0 -43
  242. package/es/util/math.js +0 -253
  243. package/es/util/math.js.map +0 -1
  244. package/es/util/number.d.ts +0 -3
  245. package/es/util/number.js +0 -7
  246. package/es/util/number.js.map +0 -1
  247. package/es/util/object.d.ts +0 -2
  248. package/es/util/object.js +0 -25
  249. package/es/util/object.js.map +0 -1
  250. package/es/util/string.d.ts +0 -2
  251. package/es/util/string.js +0 -16
  252. package/es/util/string.js.map +0 -1
  253. package/lib/index.js +0 -24
  254. package/lib/index.js.map +0 -1
  255. package/lib/layout/base.d.ts +0 -22
  256. package/lib/layout/base.js +0 -56
  257. package/lib/layout/base.js.map +0 -1
  258. package/lib/layout/circular.d.ts +0 -80
  259. package/lib/layout/circular.js +0 -337
  260. package/lib/layout/circular.js.map +0 -1
  261. package/lib/layout/comboCombined.d.ts +0 -54
  262. package/lib/layout/comboCombined.js +0 -384
  263. package/lib/layout/comboCombined.js.map +0 -1
  264. package/lib/layout/comboForce.d.ts +0 -134
  265. package/lib/layout/comboForce.js +0 -826
  266. package/lib/layout/comboForce.js.map +0 -1
  267. package/lib/layout/concentric.d.ts +0 -67
  268. package/lib/layout/concentric.js +0 -243
  269. package/lib/layout/concentric.js.map +0 -1
  270. package/lib/layout/constants.d.ts +0 -12
  271. package/lib/layout/constants.js +0 -25
  272. package/lib/layout/constants.js.map +0 -1
  273. package/lib/layout/dagre/graph.d.ts +0 -91
  274. package/lib/layout/dagre/graph.js +0 -28
  275. package/lib/layout/dagre/graph.js.map +0 -1
  276. package/lib/layout/dagre/index.d.ts +0 -8
  277. package/lib/layout/dagre/index.js +0 -36
  278. package/lib/layout/dagre/index.js.map +0 -1
  279. package/lib/layout/dagre/src/acyclic.d.ts +0 -6
  280. package/lib/layout/dagre/src/acyclic.js +0 -57
  281. package/lib/layout/dagre/src/acyclic.js.map +0 -1
  282. package/lib/layout/dagre/src/add-border-segments.d.ts +0 -3
  283. package/lib/layout/dagre/src/add-border-segments.js +0 -34
  284. package/lib/layout/dagre/src/add-border-segments.js.map +0 -1
  285. package/lib/layout/dagre/src/coordinate-system.d.ts +0 -6
  286. package/lib/layout/dagre/src/coordinate-system.js +0 -71
  287. package/lib/layout/dagre/src/coordinate-system.js.map +0 -1
  288. package/lib/layout/dagre/src/data/list.d.ts +0 -12
  289. package/lib/layout/dagre/src/data/list.js +0 -52
  290. package/lib/layout/dagre/src/data/list.js.map +0 -1
  291. package/lib/layout/dagre/src/debug.d.ts +0 -3
  292. package/lib/layout/dagre/src/debug.js +0 -26
  293. package/lib/layout/dagre/src/debug.js.map +0 -1
  294. package/lib/layout/dagre/src/greedy-fas.d.ts +0 -3
  295. package/lib/layout/dagre/src/greedy-fas.js +0 -144
  296. package/lib/layout/dagre/src/greedy-fas.js.map +0 -1
  297. package/lib/layout/dagre/src/layout.d.ts +0 -3
  298. package/lib/layout/dagre/src/layout.js +0 -535
  299. package/lib/layout/dagre/src/layout.js.map +0 -1
  300. package/lib/layout/dagre/src/nesting-graph.d.ts +0 -6
  301. package/lib/layout/dagre/src/nesting-graph.js +0 -119
  302. package/lib/layout/dagre/src/nesting-graph.js.map +0 -1
  303. package/lib/layout/dagre/src/normalize.d.ts +0 -6
  304. package/lib/layout/dagre/src/normalize.js +0 -91
  305. package/lib/layout/dagre/src/normalize.js.map +0 -1
  306. package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +0 -3
  307. package/lib/layout/dagre/src/order/add-subgraph-constraints.js +0 -29
  308. package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +0 -1
  309. package/lib/layout/dagre/src/order/barycenter.d.ts +0 -11
  310. package/lib/layout/dagre/src/order/barycenter.js +0 -26
  311. package/lib/layout/dagre/src/order/barycenter.js.map +0 -1
  312. package/lib/layout/dagre/src/order/build-layer-graph.d.ts +0 -3
  313. package/lib/layout/dagre/src/order/build-layer-graph.js +0 -73
  314. package/lib/layout/dagre/src/order/build-layer-graph.js.map +0 -1
  315. package/lib/layout/dagre/src/order/cross-count.d.ts +0 -3
  316. package/lib/layout/dagre/src/order/cross-count.js +0 -67
  317. package/lib/layout/dagre/src/order/cross-count.js.map +0 -1
  318. package/lib/layout/dagre/src/order/index.d.ts +0 -3
  319. package/lib/layout/dagre/src/order/index.js +0 -96
  320. package/lib/layout/dagre/src/order/index.js.map +0 -1
  321. package/lib/layout/dagre/src/order/init-data-order.d.ts +0 -6
  322. package/lib/layout/dagre/src/order/init-data-order.js +0 -27
  323. package/lib/layout/dagre/src/order/init-data-order.js.map +0 -1
  324. package/lib/layout/dagre/src/order/init-order.d.ts +0 -3
  325. package/lib/layout/dagre/src/order/init-order.js +0 -54
  326. package/lib/layout/dagre/src/order/init-order.js.map +0 -1
  327. package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +0 -19
  328. package/lib/layout/dagre/src/order/resolve-conflicts.js +0 -98
  329. package/lib/layout/dagre/src/order/resolve-conflicts.js.map +0 -1
  330. package/lib/layout/dagre/src/order/sort-subgraph.d.ts +0 -7
  331. package/lib/layout/dagre/src/order/sort-subgraph.js +0 -90
  332. package/lib/layout/dagre/src/order/sort-subgraph.js.map +0 -1
  333. package/lib/layout/dagre/src/order/sort.d.ts +0 -7
  334. package/lib/layout/dagre/src/order/sort.js +0 -70
  335. package/lib/layout/dagre/src/order/sort.js.map +0 -1
  336. package/lib/layout/dagre/src/parent-dummy-chains.d.ts +0 -3
  337. package/lib/layout/dagre/src/parent-dummy-chains.js +0 -83
  338. package/lib/layout/dagre/src/parent-dummy-chains.js.map +0 -1
  339. package/lib/layout/dagre/src/position/bk.d.ts +0 -23
  340. package/lib/layout/dagre/src/position/bk.js +0 -409
  341. package/lib/layout/dagre/src/position/bk.js.map +0 -1
  342. package/lib/layout/dagre/src/position/index.d.ts +0 -3
  343. package/lib/layout/dagre/src/position/index.js +0 -64
  344. package/lib/layout/dagre/src/position/index.js.map +0 -1
  345. package/lib/layout/dagre/src/rank/feasible-tree.d.ts +0 -9
  346. package/lib/layout/dagre/src/rank/feasible-tree.js +0 -152
  347. package/lib/layout/dagre/src/rank/feasible-tree.js.map +0 -1
  348. package/lib/layout/dagre/src/rank/index.d.ts +0 -3
  349. package/lib/layout/dagre/src/rank/index.js +0 -58
  350. package/lib/layout/dagre/src/rank/index.js.map +0 -1
  351. package/lib/layout/dagre/src/rank/network-simplex.d.ts +0 -9
  352. package/lib/layout/dagre/src/rank/network-simplex.js +0 -205
  353. package/lib/layout/dagre/src/rank/network-simplex.js.map +0 -1
  354. package/lib/layout/dagre/src/rank/util.d.ts +0 -11
  355. package/lib/layout/dagre/src/rank/util.js +0 -146
  356. package/lib/layout/dagre/src/rank/util.js.map +0 -1
  357. package/lib/layout/dagre/src/util.d.ts +0 -31
  358. package/lib/layout/dagre/src/util.js +0 -280
  359. package/lib/layout/dagre/src/util.js.map +0 -1
  360. package/lib/layout/dagre.d.ts +0 -71
  361. package/lib/layout/dagre.js +0 -462
  362. package/lib/layout/dagre.js.map +0 -1
  363. package/lib/layout/dagreCompound.d.ts +0 -121
  364. package/lib/layout/dagreCompound.js +0 -429
  365. package/lib/layout/dagreCompound.js.map +0 -1
  366. package/lib/layout/er/core.d.ts +0 -1
  367. package/lib/layout/er/core.js +0 -147
  368. package/lib/layout/er/core.js.map +0 -1
  369. package/lib/layout/er/forceGrid.d.ts +0 -8
  370. package/lib/layout/er/forceGrid.js +0 -97
  371. package/lib/layout/er/forceGrid.js.map +0 -1
  372. package/lib/layout/er/grid.d.ts +0 -26
  373. package/lib/layout/er/grid.js +0 -177
  374. package/lib/layout/er/grid.js.map +0 -1
  375. package/lib/layout/er/index.d.ts +0 -29
  376. package/lib/layout/er/index.js +0 -80
  377. package/lib/layout/er/index.js.map +0 -1
  378. package/lib/layout/er/mysqlWorkbench.d.ts +0 -6
  379. package/lib/layout/er/mysqlWorkbench.js +0 -326
  380. package/lib/layout/er/mysqlWorkbench.js.map +0 -1
  381. package/lib/layout/er/type.d.ts +0 -35
  382. package/lib/layout/er/type.js +0 -3
  383. package/lib/layout/er/type.js.map +0 -1
  384. package/lib/layout/force/force-in-a-box.d.ts +0 -28
  385. package/lib/layout/force/force-in-a-box.js +0 -357
  386. package/lib/layout/force/force-in-a-box.js.map +0 -1
  387. package/lib/layout/force/force.d.ts +0 -100
  388. package/lib/layout/force/force.js +0 -388
  389. package/lib/layout/force/force.js.map +0 -1
  390. package/lib/layout/force/index.d.ts +0 -1
  391. package/lib/layout/force/index.js +0 -18
  392. package/lib/layout/force/index.js.map +0 -1
  393. package/lib/layout/force2/ForceNBody.d.ts +0 -7
  394. package/lib/layout/force2/ForceNBody.js +0 -98
  395. package/lib/layout/force2/ForceNBody.js.map +0 -1
  396. package/lib/layout/force2/index.d.ts +0 -119
  397. package/lib/layout/force2/index.js +0 -643
  398. package/lib/layout/force2/index.js.map +0 -1
  399. package/lib/layout/forceAtlas2/body.d.ts +0 -33
  400. package/lib/layout/forceAtlas2/body.js +0 -93
  401. package/lib/layout/forceAtlas2/body.js.map +0 -1
  402. package/lib/layout/forceAtlas2/index.d.ts +0 -115
  403. package/lib/layout/forceAtlas2/index.js +0 -509
  404. package/lib/layout/forceAtlas2/index.js.map +0 -1
  405. package/lib/layout/forceAtlas2/quad.d.ts +0 -27
  406. package/lib/layout/forceAtlas2/quad.js +0 -100
  407. package/lib/layout/forceAtlas2/quad.js.map +0 -1
  408. package/lib/layout/forceAtlas2/quadTree.d.ts +0 -20
  409. package/lib/layout/forceAtlas2/quadTree.js +0 -107
  410. package/lib/layout/forceAtlas2/quadTree.js.map +0 -1
  411. package/lib/layout/fruchterman.d.ts +0 -73
  412. package/lib/layout/fruchterman.js +0 -320
  413. package/lib/layout/fruchterman.js.map +0 -1
  414. package/lib/layout/gForce.d.ts +0 -96
  415. package/lib/layout/gForce.js +0 -421
  416. package/lib/layout/gForce.js.map +0 -1
  417. package/lib/layout/gpu/fruchterman.d.ts +0 -57
  418. package/lib/layout/gpu/fruchterman.js +0 -361
  419. package/lib/layout/gpu/fruchterman.js.map +0 -1
  420. package/lib/layout/gpu/fruchtermanShader.d.ts +0 -4
  421. package/lib/layout/gpu/fruchtermanShader.js +0 -8
  422. package/lib/layout/gpu/fruchtermanShader.js.map +0 -1
  423. package/lib/layout/gpu/gForce.d.ts +0 -68
  424. package/lib/layout/gpu/gForce.js +0 -415
  425. package/lib/layout/gpu/gForce.js.map +0 -1
  426. package/lib/layout/gpu/gForceShader.d.ts +0 -4
  427. package/lib/layout/gpu/gForceShader.js +0 -8
  428. package/lib/layout/gpu/gForceShader.js.map +0 -1
  429. package/lib/layout/grid.d.ts +0 -83
  430. package/lib/layout/grid.js +0 -339
  431. package/lib/layout/grid.js.map +0 -1
  432. package/lib/layout/index.d.ts +0 -22
  433. package/lib/layout/index.js +0 -59
  434. package/lib/layout/index.js.map +0 -1
  435. package/lib/layout/layout.d.ts +0 -26
  436. package/lib/layout/layout.js +0 -102
  437. package/lib/layout/layout.js.map +0 -1
  438. package/lib/layout/mds.d.ts +0 -39
  439. package/lib/layout/mds.js +0 -144
  440. package/lib/layout/mds.js.map +0 -1
  441. package/lib/layout/radial/index.d.ts +0 -1
  442. package/lib/layout/radial/index.js +0 -18
  443. package/lib/layout/radial/index.js.map +0 -1
  444. package/lib/layout/radial/mds.d.ts +0 -15
  445. package/lib/layout/radial/mds.js +0 -42
  446. package/lib/layout/radial/mds.js.map +0 -1
  447. package/lib/layout/radial/radial.d.ts +0 -74
  448. package/lib/layout/radial/radial.js +0 -445
  449. package/lib/layout/radial/radial.js.map +0 -1
  450. package/lib/layout/radial/radialNonoverlapForce.d.ts +0 -50
  451. package/lib/layout/radial/radialNonoverlapForce.js +0 -127
  452. package/lib/layout/radial/radialNonoverlapForce.js.map +0 -1
  453. package/lib/layout/random.d.ts +0 -35
  454. package/lib/layout/random.js +0 -84
  455. package/lib/layout/random.js.map +0 -1
  456. package/lib/layout/types.d.ts +0 -432
  457. package/lib/layout/types.js +0 -3
  458. package/lib/layout/types.js.map +0 -1
  459. package/lib/registy/index.d.ts +0 -3
  460. package/lib/registy/index.js +0 -65
  461. package/lib/registy/index.js.map +0 -1
  462. package/lib/util/array.js +0 -5
  463. package/lib/util/array.js.map +0 -1
  464. package/lib/util/function.js +0 -65
  465. package/lib/util/function.js.map +0 -1
  466. package/lib/util/gpu.js +0 -250
  467. package/lib/util/gpu.js.map +0 -1
  468. package/lib/util/index.js +0 -23
  469. package/lib/util/index.js.map +0 -1
  470. package/lib/util/math.js +0 -266
  471. package/lib/util/math.js.map +0 -1
  472. package/lib/util/number.js +0 -13
  473. package/lib/util/number.js.map +0 -1
  474. package/lib/util/object.js +0 -43
  475. package/lib/util/object.js.map +0 -1
  476. package/lib/util/string.js +0 -20
  477. package/lib/util/string.js.map +0 -1
  478. package/src/index.ts +0 -7
  479. package/src/layout/base.ts +0 -57
  480. package/src/layout/circular.ts +0 -370
  481. package/src/layout/comboCombined.ts +0 -391
  482. package/src/layout/comboForce.ts +0 -873
  483. package/src/layout/concentric.ts +0 -289
  484. package/src/layout/constants.ts +0 -22
  485. package/src/layout/dagre/graph.ts +0 -104
  486. package/src/layout/dagre/index.ts +0 -31
  487. package/src/layout/dagre/src/acyclic.ts +0 -58
  488. package/src/layout/dagre/src/add-border-segments.ts +0 -47
  489. package/src/layout/dagre/src/coordinate-system.ts +0 -77
  490. package/src/layout/dagre/src/data/list.ts +0 -60
  491. package/src/layout/dagre/src/debug.ts +0 -30
  492. package/src/layout/dagre/src/greedy-fas.ts +0 -144
  493. package/src/layout/dagre/src/layout.ts +0 -579
  494. package/src/layout/dagre/src/nesting-graph.ts +0 -143
  495. package/src/layout/dagre/src/normalize.ts +0 -96
  496. package/src/layout/dagre/src/order/add-subgraph-constraints.ts +0 -29
  497. package/src/layout/dagre/src/order/barycenter.ts +0 -26
  498. package/src/layout/dagre/src/order/build-layer-graph.ts +0 -82
  499. package/src/layout/dagre/src/order/cross-count.ts +0 -77
  500. package/src/layout/dagre/src/order/index.ts +0 -105
  501. package/src/layout/dagre/src/order/init-data-order.ts +0 -27
  502. package/src/layout/dagre/src/order/init-order.ts +0 -56
  503. package/src/layout/dagre/src/order/resolve-conflicts.ts +0 -152
  504. package/src/layout/dagre/src/order/sort-subgraph.ts +0 -105
  505. package/src/layout/dagre/src/order/sort.ts +0 -76
  506. package/src/layout/dagre/src/parent-dummy-chains.ts +0 -102
  507. package/src/layout/dagre/src/position/bk.ts +0 -493
  508. package/src/layout/dagre/src/position/index.ts +0 -82
  509. package/src/layout/dagre/src/rank/feasible-tree.ts +0 -165
  510. package/src/layout/dagre/src/rank/index.ts +0 -54
  511. package/src/layout/dagre/src/rank/network-simplex.ts +0 -225
  512. package/src/layout/dagre/src/rank/util.ts +0 -166
  513. package/src/layout/dagre/src/util.ts +0 -309
  514. package/src/layout/dagre.ts +0 -460
  515. package/src/layout/dagreCompound.ts +0 -518
  516. package/src/layout/er/core.ts +0 -117
  517. package/src/layout/er/forceGrid.ts +0 -95
  518. package/src/layout/er/grid.ts +0 -185
  519. package/src/layout/er/index.ts +0 -68
  520. package/src/layout/er/mysqlWorkbench.ts +0 -345
  521. package/src/layout/er/type.ts +0 -39
  522. package/src/layout/force/force-in-a-box.ts +0 -400
  523. package/src/layout/force/force.ts +0 -391
  524. package/src/layout/force/index.ts +0 -1
  525. package/src/layout/force2/ForceNBody.ts +0 -128
  526. package/src/layout/force2/index.ts +0 -741
  527. package/src/layout/forceAtlas2/body.ts +0 -115
  528. package/src/layout/forceAtlas2/index.ts +0 -556
  529. package/src/layout/forceAtlas2/quad.ts +0 -115
  530. package/src/layout/forceAtlas2/quadTree.ts +0 -107
  531. package/src/layout/fruchterman.ts +0 -361
  532. package/src/layout/gForce.ts +0 -488
  533. package/src/layout/gpu/fruchterman.ts +0 -314
  534. package/src/layout/gpu/fruchtermanShader.ts +0 -203
  535. package/src/layout/gpu/gForce.ts +0 -407
  536. package/src/layout/gpu/gForceShader.ts +0 -220
  537. package/src/layout/grid.ts +0 -404
  538. package/src/layout/index.ts +0 -47
  539. package/src/layout/layout.ts +0 -110
  540. package/src/layout/mds.ts +0 -140
  541. package/src/layout/radial/index.ts +0 -1
  542. package/src/layout/radial/mds.ts +0 -51
  543. package/src/layout/radial/radial.ts +0 -500
  544. package/src/layout/radial/radialNonoverlapForce.ts +0 -189
  545. package/src/layout/random.ts +0 -75
  546. package/src/layout/types.ts +0 -496
  547. package/src/registy/index.ts +0 -43
  548. package/src/util/array.ts +0 -1
  549. package/src/util/function.ts +0 -64
  550. package/src/util/gpu.ts +0 -256
  551. package/src/util/index.ts +0 -6
  552. package/src/util/math.ts +0 -272
  553. package/src/util/number.ts +0 -8
  554. package/src/util/object.ts +0 -28
  555. package/src/util/string.ts +0 -18
@@ -1,115 +0,0 @@
1
- import Quad from './quad';
2
-
3
- /**
4
- * @fileOverview body
5
- * @author shiwu.wyy@antfin.com
6
- */
7
-
8
- type BodyProps = {
9
- id?: Number;
10
- rx: number;
11
- ry: number;
12
- fx?: number;
13
- fy?: number;
14
- mass: number;
15
- degree: number;
16
- g?: number;
17
- };
18
-
19
- // represents a body(a point mass) and its position
20
- export default class Body {
21
- public id: Number;
22
- public rx: number;
23
- public ry: number;
24
- public fx: number;
25
- public fy: number;
26
- public mass: number;
27
- public degree: number;
28
- public g: number;
29
-
30
- constructor(params: BodyProps) {
31
- /**
32
- * the id of this body, the same with the node id
33
- * @type {number}
34
- */
35
- this.id = params.id || 0;
36
- /**
37
- * the position of this body
38
- * @type {number}
39
- */
40
- this.rx = params.rx;
41
- /**
42
- * the position of this body
43
- * @type {number}
44
- */
45
- this.ry = params.ry;
46
- /**
47
- * the force acting on this body
48
- * @type {number}
49
- */
50
- this.fx = 0;
51
- /**
52
- * the force acting on this body
53
- * @type {number}
54
- */
55
- this.fy = 0;
56
- /**
57
- * the mass of this body, =1 for a node
58
- * @type {number}
59
- */
60
- this.mass = params.mass;
61
- /**
62
- * the degree of the node represented by this body
63
- * @type {number}
64
- */
65
- this.degree = params.degree;
66
- /**
67
- * the parameter for repulsive force, = kr
68
- * @type {number}
69
- */
70
- this.g = params.g || 0;
71
- }
72
- // returns the euclidean distance
73
- distanceTo(bo: Body) {
74
- const dx = this.rx - bo.rx;
75
- const dy = this.ry - bo.ry;
76
- return Math.hypot(dx, dy);
77
- }
78
- setPos(x: number, y: number) {
79
- this.rx = x;
80
- this.ry = y;
81
- }
82
- // resets the forces
83
- resetForce() {
84
- this.fx = 0;
85
- this.fy = 0;
86
- }
87
- addForce(b: Body) {
88
- const dx = b.rx - this.rx;
89
- const dy = b.ry - this.ry;
90
- let dist = Math.hypot(dx, dy);
91
- dist = dist < 0.0001 ? 0.0001 : dist;
92
- // the repulsive defined by force atlas 2
93
- const F = (this.g * (this.degree + 1) * (b.degree + 1)) / dist;
94
- this.fx += F * dx / dist;
95
- this.fy += F * dy / dist;
96
- }
97
- // if quad contains this body
98
- in(quad: Quad) {
99
- return quad.contains(this.rx, this.ry);
100
- }
101
- // returns a new body
102
- add(bo: Body) {
103
- const nenwMass = this.mass + bo.mass;
104
- const x = (this.rx * this.mass + bo.rx * bo.mass) / nenwMass;
105
- const y = (this.ry * this.mass + bo.ry * bo.mass) / nenwMass;
106
- const dg = this.degree + bo.degree;
107
- const params: BodyProps = {
108
- rx: x,
109
- ry: y,
110
- mass: nenwMass,
111
- degree: dg
112
- };
113
- return new Body(params);
114
- }
115
- }
@@ -1,556 +0,0 @@
1
- /**
2
- * @fileOverview force atlas 2
3
- * @author shiwu.wyy@antfin.com
4
- */
5
- import { PointTuple, OutNode, Edge, ForceAtlas2LayoutOptions } from "../types";
6
- import { Base } from "../base";
7
- import { getEdgeTerminal, isArray, isNumber, isObject } from "../../util";
8
- import Body from './body';
9
- import Quad from './quad';
10
- import QuadTree from './quadTree';
11
-
12
- export class ForceAtlas2Layout extends Base {
13
- /** 布局中心 */
14
- public center: PointTuple = [0, 0];
15
-
16
- /** 宽度 */
17
- public width: number = 300;
18
-
19
- /** 高度 */
20
- public height: number = 300;
21
-
22
- public nodes: OutNode[] = [];
23
-
24
- public edges: Edge[] = [];
25
-
26
- /**
27
- * the parameter for repulsive forces,
28
- * it will scale the layout but won't change the layout
29
- * larger the kr, looser the layout
30
- * @type {number}
31
- */
32
- public kr: number = 5;
33
-
34
- /**
35
- * the parameter for gravity forces
36
- * @type {number}
37
- */
38
- public kg: number = 1;
39
-
40
- /**
41
- * modes:
42
- * 'normal' for normal using
43
- * 'linlog' for compact clusters.
44
- * @type {string}
45
- */
46
- public mode: 'normal' | 'linlog' = 'normal';
47
-
48
- /**
49
- * whether preventing the node overlapping
50
- * @type {boolean}
51
- */
52
- public preventOverlap: boolean = false;
53
-
54
- /**
55
- * whether active the dissuade hub mode
56
- * true: grant authorities (nodes with a high indegree)
57
- * a more central position than hubs (nodes with a high outdegree)
58
- * @type {boolean}
59
- */
60
- public dissuadeHubs: boolean = false;
61
-
62
- /**
63
- * whether active the barnes hut optimization on computing repulsive forces
64
- * @type {boolean}
65
- */
66
- public barnesHut: boolean | undefined = undefined;
67
-
68
- /**
69
- * the max iteration number
70
- * @type {number}
71
- */
72
- public maxIteration: number = 0;
73
-
74
- /**
75
- * control the global velocity
76
- * defualt: 0.1(gephi)
77
- * @type {number}
78
- */
79
- public ks: number = 0.1;
80
-
81
- /**
82
- * the max global velocity
83
- * @type {number}
84
- */
85
- public ksmax: number = 10;
86
-
87
- /**
88
- * the tolerance for the global swinging
89
- * @type {number}
90
- */
91
- public tao: number = 0.1;
92
-
93
- /**
94
- * the function of layout complete listener, display the legend and minimap after layout
95
- * @type {function}
96
- */
97
- public onLayoutEnd: () => void = () => {};
98
-
99
- public tick: () => void;
100
-
101
- /**
102
- * activate prune or not.
103
- * prune the leaves during most iterations, layout the leaves in the last 50 iteraitons.
104
- * if prune === '', it will be activated when the nodes number > 100
105
- * note that it will reduce the quality of the layout
106
- * @type {boolean}
107
- */
108
- public prune: boolean | undefined = undefined;
109
-
110
- public getWidth: (node: any) => number;
111
- public getHeight: (node: any) => number;
112
-
113
- constructor(options?: ForceAtlas2LayoutOptions) {
114
- super();
115
- this.updateCfg(options);
116
- }
117
-
118
- public getDefaultCfg() {
119
- return {};
120
- }
121
-
122
- // execute the layout
123
- public execute() {
124
- const self = this;
125
- const {
126
- nodes,
127
- onLayoutEnd,
128
- prune,
129
- } = self;
130
- let maxIteration = self.maxIteration;
131
-
132
- if (!self.width && typeof window !== "undefined") {
133
- self.width = window.innerWidth;
134
- }
135
- if (!self.height && typeof window !== "undefined") {
136
- self.height = window.innerHeight;
137
- }
138
-
139
- // the whidth of each nodes
140
- const sizes = [];
141
- const nodeNum = nodes.length;
142
- for (let i = 0; i < nodeNum; i += 1) {
143
- const node = nodes[i] as any;
144
- let nodeWidth = 10;
145
- let nodeHeight = 10;
146
- if (isNumber(node.size)) {
147
- nodeWidth = node.size;
148
- nodeHeight = node.size;
149
- }
150
- if (isArray(node.size)) {
151
- if (!isNaN(node.size[0])) nodeWidth = node.size[0];
152
- if (!isNaN(node.size[1])) nodeHeight = node.size[1];
153
- } else if (isObject(node.size)) {
154
- nodeWidth = node.size.width;
155
- nodeHeight = node.size.height;
156
- }
157
- if (self.getWidth && !isNaN(self.getWidth(node))) nodeHeight = self.getWidth(node);
158
- if (self.getHeight && !isNaN(self.getHeight(node))) nodeWidth = self.getHeight(node);
159
-
160
- const maxSize = Math.max(nodeWidth, nodeHeight);
161
- sizes.push(maxSize);
162
- }
163
-
164
- if (self.barnesHut === undefined && nodeNum > 250) self.barnesHut = true;
165
- if (self.prune === undefined && nodeNum > 100) self.prune = true;
166
- if (this.maxIteration === 0 && !self.prune) {
167
- maxIteration = 250;
168
- if (nodeNum <= 200 && nodeNum > 100) maxIteration = 1000;
169
- else if (nodeNum > 200) maxIteration = 1200;
170
- this.maxIteration = maxIteration;
171
- } else if (this.maxIteration === 0 && prune) {
172
- maxIteration = 100;
173
- if (nodeNum <= 200 && nodeNum > 100) maxIteration = 500;
174
- else if (nodeNum > 200) maxIteration = 950;
175
- this.maxIteration = maxIteration;
176
- }
177
-
178
- if (!self.kr) {
179
- self.kr = 50;
180
- if (nodeNum > 100 && nodeNum <= 500) self.kr = 20;
181
- else if (nodeNum > 500) self.kr = 1;
182
- }
183
- if (!self.kg) {
184
- self.kg = 20;
185
- if (nodeNum > 100 && nodeNum <= 500) self.kg = 10;
186
- else if (nodeNum > 500) self.kg = 1;
187
- }
188
- this.nodes = self.updateNodesByForces(sizes);
189
- onLayoutEnd();
190
- }
191
-
192
-
193
- updateNodesByForces(sizes: number[]) {
194
- const self = this;
195
- const { edges, maxIteration } = self;
196
- let nodes = self.nodes;
197
-
198
- const nonLoopEdges = edges.filter((edge: any) => {
199
- const source = getEdgeTerminal(edge, 'source');
200
- const target = getEdgeTerminal(edge, 'target');
201
- return source !== target;
202
- });
203
- const size = nodes.length;
204
- const esize = nonLoopEdges.length;
205
-
206
- const degrees = [];
207
- const idMap: {[key: string]: number} = {};
208
- const edgeEndsIdMap: {[key: number]: {sourceIdx: number, targetIdx: number}} = {};
209
-
210
- // tslint:disable-next-line
211
- const Es = []
212
- for (let i = 0; i < size; i += 1) {
213
- idMap[nodes[i].id] = i;
214
- degrees[i] = 0;
215
- if (nodes[i].x === undefined || isNaN(nodes[i].x)) { nodes[i].x = Math.random() * 1000; }
216
- if (nodes[i].y === undefined || isNaN(nodes[i].y)) { nodes[i].y = Math.random() * 1000; }
217
- Es.push({ x: nodes[i].x, y: nodes[i].y });
218
- }
219
- for (let i = 0; i < esize; i += 1) {
220
- let node1;
221
- let node2;
222
- let sIdx = 0;
223
- let tIdx = 0;
224
-
225
- for (let j = 0; j < size; j += 1) {
226
- const source = getEdgeTerminal(nonLoopEdges[i], 'source');
227
- const target = getEdgeTerminal(nonLoopEdges[i], 'target');
228
- if (nodes[j].id === source) {
229
- node1 = nodes[j];
230
- sIdx = j;
231
- } else if (nodes[j].id === target) {
232
- node2 = nodes[j];
233
- tIdx = j;
234
- }
235
- edgeEndsIdMap[i] = { sourceIdx: sIdx, targetIdx: tIdx };
236
- }
237
- if (node1) degrees[idMap[node1.id]] += 1;
238
- if (node2) degrees[idMap[node2.id]] += 1;
239
- }
240
-
241
- let iteration = maxIteration;
242
- nodes = this.iterate(iteration, idMap, edgeEndsIdMap, esize, degrees, sizes);
243
-
244
- // if prune, place the leaves around their parents, and then re-layout for several iterations.
245
- if (self.prune) {
246
- for (let j = 0; j < esize; j += 1) {
247
- if (degrees[edgeEndsIdMap[j].sourceIdx] <= 1) {
248
- nodes[edgeEndsIdMap[j].sourceIdx].x = nodes[edgeEndsIdMap[j].targetIdx].x;
249
- nodes[edgeEndsIdMap[j].sourceIdx].y = nodes[edgeEndsIdMap[j].targetIdx].y;
250
-
251
- } else if (degrees[edgeEndsIdMap[j].targetIdx] <= 1) {
252
- nodes[edgeEndsIdMap[j].targetIdx].x = nodes[edgeEndsIdMap[j].sourceIdx].x;
253
- nodes[edgeEndsIdMap[j].targetIdx].y = nodes[edgeEndsIdMap[j].sourceIdx].y;
254
- }
255
- }
256
- self.prune = false;
257
- self.barnesHut = false;
258
- iteration = 100;
259
- nodes = this.iterate(
260
- iteration,
261
- idMap,
262
- edgeEndsIdMap,
263
- esize,
264
- degrees,
265
- sizes
266
- );
267
- }
268
- return nodes;
269
- }
270
- iterate(
271
- iteration: number,
272
- idMap: {[key: string]: number},
273
- edgeEndsIdMap: {[key: number]: {sourceIdx: number, targetIdx: number}},
274
- esize: number,
275
- degrees: number[],
276
- sizes: number[],
277
- ) {
278
-
279
- const self = this;
280
- let { nodes } = self;
281
- const { kr, preventOverlap } = self;
282
- const { barnesHut } = self;
283
-
284
- const nodeNum = nodes.length;
285
- let sg = 0;
286
- const krPrime = 100;
287
- let iter = iteration;
288
- const prevoIter = 50;
289
- let forces = [];
290
- const preForces = [];
291
- const bodies = [];
292
-
293
- for (let i = 0; i < nodeNum; i += 1) {
294
- forces[2 * i] = 0;
295
- forces[2 * i + 1] = 0;
296
-
297
- if (barnesHut) {
298
- const params = {
299
- id: i,
300
- rx: nodes[i].x,
301
- ry: nodes[i].y,
302
- mass: 1,
303
- g: kr,
304
- degree: degrees[i]
305
- };
306
- bodies[i] = new Body(params);
307
- }
308
- }
309
-
310
- while (iter > 0) {
311
- for (let i = 0; i < nodeNum; i += 1) {
312
- preForces[2 * i] = forces[2 * i];
313
- preForces[2 * i + 1] = forces[2 * i + 1];
314
- forces[2 * i] = 0;
315
- forces[2 * i + 1] = 0;
316
- }
317
- // attractive forces, existing on every actual edge
318
- forces = this.getAttrForces(
319
- iter,
320
- prevoIter,
321
- esize,
322
- idMap,
323
- edgeEndsIdMap,
324
- degrees,
325
- sizes,
326
- forces
327
- );
328
-
329
- // repulsive forces and Gravity, existing on every node pair
330
- // if preventOverlap, using the no-optimized method in the last prevoIter instead.
331
- if (barnesHut && ((preventOverlap && iter > prevoIter) || !preventOverlap)) {
332
- forces = this.getOptRepGraForces(forces, bodies, degrees);
333
- } else {
334
- forces = this.getRepGraForces(iter, prevoIter, forces, krPrime, sizes, degrees);
335
- }
336
- // update the positions
337
- const res = this.updatePos(forces, preForces, sg, degrees);
338
- nodes = res.nodes;
339
- sg = res.sg;
340
- iter --;
341
- if (self.tick) self.tick();
342
- }
343
-
344
- return nodes;
345
- }
346
- getAttrForces(
347
- iter: number,
348
- prevoIter: number,
349
- esize: number,
350
- idMap: {[key: string]: number},
351
- edgeEndsIdMap: {[key: number]: {sourceIdx: number, targetIdx: number}},
352
- degrees: number[],
353
- sizes: number[],
354
- forces: number[],
355
- ): number[] {
356
- const self = this;
357
- const { nodes, preventOverlap, dissuadeHubs, mode, prune } = self;
358
- for (let i = 0; i < esize; i += 1) {
359
- const sourceNode = nodes[edgeEndsIdMap[i].sourceIdx];
360
- const sourceIdx = edgeEndsIdMap[i].sourceIdx;
361
- const targetNode = nodes[edgeEndsIdMap[i].targetIdx];
362
- const targetIdx = edgeEndsIdMap[i].targetIdx;
363
-
364
- if (prune && (degrees[sourceIdx] <= 1 || degrees[targetIdx] <= 1)) continue;
365
-
366
- const dir = [ targetNode.x - sourceNode.x, targetNode.y - sourceNode.y ];
367
- let eucliDis = Math.hypot(dir[0], dir[1]);
368
- eucliDis = eucliDis < 0.0001 ? 0.0001 : eucliDis;
369
- dir[0] = dir[0] / eucliDis;
370
- dir[1] = dir[1] / eucliDis;
371
-
372
- if (preventOverlap && iter < prevoIter) eucliDis = eucliDis - sizes[sourceIdx] - sizes[targetIdx];
373
- let Fa1 = eucliDis // tslint:disable-line
374
- let Fa2 = Fa1 // tslint:disable-line
375
- if (mode === 'linlog') {
376
- Fa1 = Math.log(1 + eucliDis);
377
- Fa2 = Fa1;
378
- }
379
- if (dissuadeHubs) {
380
- Fa1 = eucliDis / degrees[sourceIdx];
381
- Fa2 = eucliDis / degrees[targetIdx];
382
- }
383
- if (preventOverlap && iter < prevoIter && eucliDis <= 0) {
384
- Fa1 = 0;
385
- Fa2 = 0;
386
- } else if (preventOverlap && iter < prevoIter && eucliDis > 0) {
387
- Fa1 = eucliDis;
388
- Fa2 = eucliDis;
389
- }
390
- forces[2 * idMap[sourceNode.id]] += Fa1 * dir[0];
391
- forces[2 * idMap[targetNode.id]] -= Fa2 * dir[0];
392
- forces[2 * idMap[sourceNode.id] + 1] += Fa1 * dir[1];
393
- forces[2 * idMap[targetNode.id] + 1] -= Fa2 * dir[1];
394
- }
395
- return forces;
396
- }
397
- getRepGraForces(iter: number, prevoIter: number, forces: number[], krPrime: number, sizes: number[], degrees: number[]) {
398
- const self = this;
399
- const { nodes, preventOverlap, kr, kg, center, prune } = self;
400
- const nodeNum = nodes.length;
401
- for (let i = 0; i < nodeNum; i += 1) {
402
- for (let j = i + 1; j < nodeNum; j += 1) {
403
-
404
- if (prune && (degrees[i] <= 1 || degrees[j] <= 1)) continue;
405
-
406
- const dir = [ nodes[j].x - nodes[i].x, nodes[j].y - nodes[i].y ];
407
- let eucliDis = Math.hypot(dir[0], dir[1]);
408
- eucliDis = eucliDis < 0.0001 ? 0.0001 : eucliDis;
409
- dir[0] = dir[0] / eucliDis;
410
- dir[1] = dir[1] / eucliDis;
411
-
412
- if (preventOverlap && iter < prevoIter) eucliDis = eucliDis - sizes[i] - sizes[j];
413
-
414
- let Fr = kr * (degrees[i] + 1) * (degrees[j] + 1) / eucliDis // tslint:disable-line
415
-
416
- if (preventOverlap && iter < prevoIter && eucliDis < 0) {
417
- Fr = krPrime * (degrees[i] + 1) * (degrees[j] + 1);
418
- } else if (preventOverlap && iter < prevoIter && eucliDis === 0) {
419
- Fr = 0;
420
- } else if (preventOverlap && iter < prevoIter && eucliDis > 0) {
421
- Fr = kr * (degrees[i] + 1) * (degrees[j] + 1) / eucliDis;
422
- }
423
- forces[2 * i] -= Fr * dir[0];
424
- forces[2 * j] += Fr * dir[0];
425
- forces[2 * i + 1] -= Fr * dir[1];
426
- forces[2 * j + 1] += Fr * dir[1];
427
- }
428
-
429
- // gravity
430
- const dir = [ nodes[i].x - center[0], nodes[i].y - center[1] ];
431
- const eucliDis = Math.hypot(dir[0], dir[1]);
432
- dir[0] = dir[0] / eucliDis;
433
- dir[1] = dir[1] / eucliDis;
434
- const Fg = kg * (degrees[i] + 1) // tslint:disable-line
435
- forces[2 * i] -= Fg * dir[0];
436
- forces[2 * i + 1] -= Fg * dir[1];
437
- }
438
- return forces;
439
- }
440
-
441
- getOptRepGraForces(forces: number[], bodies: any, degrees: number[]) {
442
- const self = this;
443
- const { nodes, kg, center, prune } = self;
444
- const nodeNum = nodes.length;
445
- let minx = 9e10;
446
- let maxx = -9e10;
447
- let miny = 9e10;
448
- let maxy = -9e10;
449
- for (let i = 0; i < nodeNum; i += 1) {
450
- if (prune && (degrees[i] <= 1)) continue;
451
- bodies[i].setPos(nodes[i].x, nodes[i].y);
452
- if (nodes[i].x >= maxx) maxx = nodes[i].x;
453
- if (nodes[i].x <= minx) minx = nodes[i].x;
454
- if (nodes[i].y >= maxy) maxy = nodes[i].y;
455
- if (nodes[i].y <= miny) miny = nodes[i].y;
456
- }
457
-
458
- const width = Math.max(maxx - minx, maxy - miny);
459
-
460
- const quadParams = {
461
- xmid: (maxx + minx) / 2,
462
- ymid: (maxy + miny) / 2,
463
- length: width,
464
- massCenter: center,
465
- mass: nodeNum
466
- };
467
- const quad = new Quad(quadParams);
468
- const quadTree = new QuadTree(quad);
469
-
470
- // build the tree, insert the nodes(quads) into the tree
471
- for (let i = 0; i < nodeNum; i += 1) {
472
-
473
- if (prune && (degrees[i] <= 1)) continue;
474
-
475
- if (bodies[i].in(quad)) quadTree.insert(bodies[i]);
476
- }
477
- // update the repulsive forces and the gravity.
478
- for (let i = 0; i < nodeNum; i += 1) {
479
-
480
- if (prune && (degrees[i] <= 1)) continue;
481
-
482
- bodies[i].resetForce();
483
- quadTree.updateForce(bodies[i]);
484
- forces[2 * i] -= bodies[i].fx;
485
- forces[2 * i + 1] -= bodies[i].fy;
486
-
487
- // gravity
488
- const dir = [ nodes[i].x - center[0], nodes[i].y - center[1] ];
489
- let eucliDis = Math.hypot(dir[0], dir[1]);
490
- eucliDis = eucliDis < 0.0001 ? 0.0001 : eucliDis;
491
- dir[0] = dir[0] / eucliDis;
492
- dir[1] = dir[1] / eucliDis;
493
- const Fg = kg * (degrees[i] + 1) // tslint:disable-line
494
- forces[2 * i] -= Fg * dir[0];
495
- forces[2 * i + 1] -= Fg * dir[1];
496
- }
497
- return forces;
498
- }
499
-
500
- updatePos(
501
- forces: number[],
502
- preForces: number[],
503
- sg: number,
504
- degrees: number[]
505
- ): { nodes: any, sg: number } {
506
- const self = this;
507
- const { nodes, ks, tao, prune, ksmax } = self;
508
- const nodeNum = nodes.length;
509
- const swgns = [];
510
- const trans = [];
511
- // swg(G) and tra(G)
512
- let swgG = 0;
513
- let traG = 0;
514
- for (let i = 0; i < nodeNum; i += 1) {
515
-
516
- if (prune && (degrees[i] <= 1)) continue;
517
-
518
- const minus = [ forces[2 * i] - preForces[2 * i],
519
- forces[2 * i + 1] - preForces[2 * i + 1]
520
- ];
521
- const minusNorm = Math.hypot(minus[0], minus[1]);
522
- const add = [ forces[2 * i] + preForces[2 * i],
523
- forces[2 * i + 1] + preForces[2 * i + 1]
524
- ];
525
- const addNorm = Math.hypot(add[0], add[1]);
526
-
527
- swgns[i] = minusNorm;
528
- trans[i] = addNorm / 2;
529
-
530
- swgG += (degrees[i] + 1) * swgns[i];
531
- traG += (degrees[i] + 1) * trans[i];
532
- }
533
-
534
- const preSG = sg;
535
- sg = tao * traG / swgG // tslint:disable-line
536
- if (preSG !== 0) {
537
- sg = sg > (1.5 * preSG) ? (1.5 * preSG) : sg // tslint:disable-line
538
- }
539
- // update the node positions
540
- for (let i = 0; i < nodeNum; i += 1) {
541
- if (prune && (degrees[i] <= 1)) continue;
542
- if (isNumber(nodes[i].fx) && isNumber(nodes[i].fy)) continue;
543
-
544
- let sn = ks * sg / (1 + sg * Math.sqrt(swgns[i]));
545
- let absForce = Math.hypot(forces[2 * i], forces[2 * i + 1]);
546
- absForce = absForce < 0.0001 ? 0.0001 : absForce;
547
- const max = ksmax / absForce;
548
- sn = sn > max ? max : sn;
549
- const dnx = sn * forces[2 * i];
550
- const dny = sn * forces[2 * i + 1];
551
- nodes[i].x += dnx;
552
- nodes[i].y += dny;
553
- }
554
- return { nodes, sg };
555
- }
556
- }