图形绘制工具函数
2024年10月30日小于 1 分钟
节点寻址
在 AntV/X6 中实现节点寻址功能
AntV/X6 版本为:2.18.1
/**
* 根据BFS算法查找路径
* @param graph 画布实例
* @param startId 开始节点ID
* @param endId 结束节点ID
* @returns {string[]} 返回路径上的边
*/
function findPath(graph, startId, endId) {
// 广度优先搜索的队列
const queue = [];
// 访问过的节点
const visited = new Set();
// 路径上的边
const paths = {};
queue.push(startId);
visited.add(startId);
paths[startId] = [];
while (queue.length > 0) {
const current = queue.shift();
if (current === endId) {
return paths[current]; // 返回路径
}
const edges = graph.getEdges();
edges.forEach((edge) => {
const source = edge.getSourceCell().id;
const target = edge.getTargetCell().id;
if (source === current && !visited.has(target)) {
visited.add(target);
queue.push(target);
// 保存路径上的边
// 1表示从源到目标,用来表示边的走向
paths[target] = [...paths[current], { edge: edge.id, direction: 1 }];
} else if (target === current && !visited.has(source)) {
visited.add(source);
queue.push(source);
// 保存路径上的边
// -1表示从目标到源,用来表示边的走向
paths[source] = [...paths[current], { edge: edge.id, direction: -1 }];
}
});
}
// 如果没有路径
return [];
}