@antv/layout
Version:
graph layout algorithm
30 lines (27 loc) • 863 B
text/typescript
import type { ID } from '../../../types';
import { DagreGraph } from '../graph';
/**
* 按照数据中的结果设置fixorder
*/
export const initDataOrder = (g: DagreGraph, nodeOrder?: ID[]) => {
const simpleNodes = g.getAllNodes().filter((v) => {
return !g.getChildren(v.id)?.length;
});
const ranks = simpleNodes.map((v) => v.data.rank!);
const maxRank = Math.max(...ranks);
const layers: ID[][] = [];
for (let i = 0; i < maxRank + 1; i++) {
layers[i] = [];
}
nodeOrder?.forEach((n) => {
const node = g.getNode(n);
// 只考虑原有节点,dummy节点需要按照后续算法排出
if (!node || node.data.dummy) {
return;
}
if (!isNaN(node.data.rank!)) {
node.data.fixorder = layers[node.data.rank!].length; // 设置fixorder为当层的顺序
layers[node.data.rank!].push(n);
}
});
};