UNPKG

3.96 kBTypeScriptView Raw
1/**
2 * @fileOverview fruchterman layout
3 * @author shiwu.wyy@antfin.com
4 */
5import { OutNode, Edge, PointTuple, IndexMap } from './types';
6import { Base } from './base';
7declare type INode = OutNode & {
8 size: number | PointTuple;
9};
10declare type NodeMap = {
11 [key: string]: INode;
12};
13/**
14 * graphin 中的 force 布局
15 */
16export declare class GForceLayout extends Base {
17 /** 布局中心 */
18 center: PointTuple;
19 /** 停止迭代的最大迭代数 */
20 maxIteration: number;
21 /** 弹簧引力系数 */
22 edgeStrength: number | ((d?: any) => number) | undefined;
23 /** 斥力系数 */
24 nodeStrength: number | ((d?: any) => number) | undefined;
25 /** 库伦系数 */
26 coulombDisScale: number;
27 /** 阻尼系数 */
28 damping: number;
29 /** 最大速度 */
30 maxSpeed: number;
31 /** 一次迭代的平均移动距离小于该值时停止迭代 */
32 minMovement: number;
33 /** 迭代中衰减 */
34 interval: number;
35 /** 斥力的一个系数 */
36 factor: number;
37 /** 每个节点质量的回调函数,若不指定,则默认使用度数作为节点质量 */
38 getMass: ((d?: any) => number) | undefined;
39 /** 每个节点中心力的 xy、强度的回调函数,若不指定,则没有额外中心力 */
40 getCenter: ((d?: any, degree?: number) => number[]) | undefined;
41 /** 理想边长 */
42 linkDistance: number | ((d?: any) => number) | undefined;
43 /** 重力大小 */
44 gravity: number;
45 /** 是否防止重叠 */
46 preventOverlap: boolean;
47 /** 防止重叠时的节点大小,默认从节点数据中取 size */
48 nodeSize: number | number[] | ((d?: any) => number) | undefined;
49 /** 防止重叠时的节点之间最小间距 */
50 nodeSpacing: number | number[] | ((d?: any) => number) | undefined;
51 /** 每次迭代结束的回调函数 */
52 tick: (() => void) | null;
53 /** 是否允许每次迭代结束调用回调函数 */
54 enableTick: boolean;
55 nodes: INode[] | null;
56 edges: Edge[] | null;
57 width: number;
58 height: number;
59 nodeMap: NodeMap;
60 nodeIdxMap: IndexMap;
61 canvasEl: HTMLCanvasElement;
62 onLayoutEnd: () => void;
63 /** 存储节点度数 */
64 private degrees;
65 /** 迭代中的标识 */
66 private timeInterval;
67 constructor(options?: GForceLayout.GForceLayoutOptions);
68 getDefaultCfg(): {
69 maxIteration: number;
70 gravity: number;
71 enableTick: boolean;
72 };
73 /**
74 * 执行布局
75 */
76 execute(): void;
77 run(): void;
78 calRepulsive(accArray: number[], nodes: INode[]): void;
79 calAttractive(accArray: number[], edges: Edge[]): void;
80 calGravity(accArray: number[], nodes: INode[]): void;
81 updateVelocity(accArray: number[], velArray: number[], stepInterval: number, nodes: INode[]): void;
82 updatePosition(velArray: number[], stepInterval: number, nodes: INode[]): void;
83 stop(): void;
84 destroy(): void;
85 getType(): string;
86}
87export declare namespace GForceLayout {
88 interface GForceLayoutOptions {
89 type?: 'gForce';
90 center?: PointTuple;
91 width?: number;
92 height?: number;
93 linkDistance?: number | ((d?: any) => number) | undefined;
94 nodeStrength?: number | ((d?: any) => number) | undefined;
95 edgeStrength?: number | ((d?: any) => number) | undefined;
96 preventOverlap?: boolean;
97 nodeSize?: number | number[] | ((d?: any) => number) | undefined;
98 nodeSpacing?: number | number[] | ((d?: any) => number) | undefined;
99 minMovement?: number;
100 maxIteration?: number;
101 damping?: number;
102 maxSpeed?: number;
103 coulombDisScale?: number;
104 getMass?: ((d?: any) => number) | undefined;
105 getCenter?: ((d?: any, degree?: number) => number[]) | undefined;
106 gravity?: number;
107 tick?: () => void;
108 onLayoutEnd?: () => void;
109 workerEnabled?: boolean;
110 gpuEnabled?: boolean;
111 }
112}
113export {};