efb8c8a848e1993c3c365ad9395bb0160b88cab741761b5d446acad6cd0464d0950e4dc223f4f3d807dbe465ede0fd4cdc4f6f65e533c11d636812bb4e1d94 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import * as vec2 from 'zrender/lib/core/vector.js';
  2. import { RectLike } from 'zrender/lib/core/BoundingRect.js';
  3. interface InputNode {
  4. p?: vec2.VectorArray;
  5. fixed?: boolean;
  6. /**
  7. * Weight
  8. */
  9. w: number;
  10. /**
  11. * Repulsion
  12. */
  13. rep: number;
  14. }
  15. interface InputEdge {
  16. ignoreForceLayout?: boolean;
  17. n1: InputNode;
  18. n2: InputNode;
  19. /**
  20. * Distance
  21. */
  22. d: number;
  23. }
  24. interface LayoutCfg {
  25. gravity?: number;
  26. friction?: number;
  27. rect?: RectLike;
  28. }
  29. export declare function forceLayout<N extends InputNode, E extends InputEdge>(inNodes: N[], inEdges: E[], opts: LayoutCfg): {
  30. warmUp: () => void;
  31. setFixed: (idx: number) => void;
  32. setUnfixed: (idx: number) => void;
  33. /**
  34. * Before step hook
  35. */
  36. beforeStep: (cb: (nodes: N[], edges: E[]) => void) => void;
  37. /**
  38. * After step hook
  39. */
  40. afterStep: (cb: (nodes: N[], edges: E[], finished: boolean) => void) => void;
  41. /**
  42. * Some formulas were originally copied from "d3.js"
  43. * https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js
  44. * with some modifications made for this project.
  45. * See the license statement at the head of this file.
  46. */
  47. step: (cb?: (finished: boolean) => void) => void;
  48. };
  49. export {};