You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Microsoft Automatic Graph Layout(Rectilinear)避免重合边?

解决MSAGL直角边路由中重合边的问题

我正在使用Microsoft Automatic Graph Layout(MSAGL)的直角边路由工具处理节点间的边路由,但遇到了一个问题:工具完全不会尝试避免重合边(即多条边完全重叠的情况)。

当前生成的路由效果:

+--------+     +--------+ 
| Node A |     | Node B |
+--------+     +--------+
     |             |
     |             |
     +-------------+
     | +----------------------------+ 
     | |       Obstacle Node        |
     | +----------------------------+
     +-------------+
     |             |
     |             |
+--------+     +--------+ 
| Node X |     | Node Y |
+--------+     +--------+

我期望的效果是让边错开,避免重合(交叉可以接受,只要能区分边的走向):

+--------+     +--------+ 
| Node A |     | Node B |
+--------+     +--------+
     |             |
   +-+             |
   | +-------------+
   | | +----------------------------+ 
   | | |       Obstacle Node        |
   | | +----------------------------+
   | +-------------+
   +-+             |
     |             |
+--------+     +--------+ 
| Node X |     | Node Y |
+--------+     +--------+

可行的解决办法

  • 调整边的偏移参数:MSAGL的OrthogonalEdgeRouter类提供了EdgePadding参数,通过设置一个微小的偏移值(比如1-2像素),让原本重合的边在路由时自动错开。实例化路由工具时可配置该参数:
    var router = new OrthogonalEdgeRouter();
    router.EdgePadding = 2; // 设置边之间的最小间距
    router.Route(graph);
    
  • 手动添加虚拟控制点:如果自动偏移效果不理想,可以在重合边的潜在路径上手动插入微小的虚拟控制点,强制工具为不同边生成差异化的路由路径。注意需要隐藏这些虚拟节点,避免影响视觉效果。
  • 扩展自定义路由逻辑:继承OrthogonalEdgeRouter类,重写核心路由计算方法,在检测到边路径重合时主动调整拐点位置,确保边之间保持可区分的间距。
  • 放宽节点位置约束:检查是否为节点设置了过于严格的固定位置约束,适当放宽限制,让布局算法有更多空间调整边的走向以避免重合。

内容的提问来源于stack exchange,提问作者Mike Nakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:07:26