antv/x6_2.0学习使用(五、路由)

X6 默认提供了以下几种路由:

路由名称 说明
normal 默认路由,原样返回路径点
orth 正交路由,由水平或垂直的正交线段组成
oneSide 受限正交路由,由受限的三段水平或垂直的正交线段组成
manhattan 智能正交路由,由水平或垂直的正交线段组成,并自动避开路径上的其他节点(障碍)
metro 智能地铁线路由,由水平或垂直的正交线段和斜角线段组成,类似地铁轨道图,并自动避开路径上的其他节点(障碍)
er 实体关系路由,由 Z 字形的斜角线段组成
  • normal

系统的默认路由,该路由原样返回传入的 vertices 路径点。

  • orth

正交路由,该路由在路径上添加额外的一些点,使边的每一条线段都水平或垂直正交。

支持的参数如下表:

参数名 参数类型 是否必选 默认值 参数说明
padding SideOptions 20 设置锚点距离转角的最小距离

SideOptions 定义如下:

复制代码
export type SideOptions =
  | number
  | {
      vertical?: number
      horizontal?: number
      left?: number
      top?: number
      right?: number
      bottom?: number
    }

例如:

复制代码
graph.addEdge({
  source,
  target,
  vertices: [
    { x: 100, y: 200 },
    { x: 300, y: 120 },
  ],
  router: {
    name: 'orth',
    args: {
      padding: {
        left: 50,
      },
    },
  },
})

以下是效果图

  • oneSide

oneSide 路由是正交路由 orth 的受限版本,该路生成一个严格的三段路由:从起始节点的 side 侧开始,经过中间段,再从终止节点的 side 侧结束路由。需要特别注意的是,使用该路由时请不要同时指定 vertices,否则路由效果会非常差

支持的参数如下表:

参数名 参数类型 是否必选 默认值 参数说明
side 'left' | 'right'| 'top' | 'bottom' 'bottom' 路由的起始/结束方向,默认值为 'bottom'
padding SideOptions 20 设置锚点距离转角的最小距离

例如:

复制代码
graph.addEdge({
  source,
  target,
  router: {
    name: 'oneSide',
    args: { side: 'right' },
  },
})

以下是效果图

  • manhattan
    曼哈顿路由 manhattan 路由是正交路由 orth 的智能版本,该路由由水平或垂直的正交线段组成,并自动避开路径上的其他节点(障碍)。

支持的参数如下表:

参数名 参数类型 是否必选 默认值 参数说明
step number 10 路由算法步进步长,其值越小计算量越大,推荐使用画布的网格大小
excludeTerminals ('source' | 'target')[] [] 忽略起始或终止节点,忽略后不参与障碍物计算
excludeShapes string[] [] 忽略指定形状的节点,忽略后不参与障碍物计算
excludeNodes (Node | string)[] [] 忽略的节点,忽略后不参与障碍物计算忽略的节点,忽略后不参与障碍物计算
startDirections string[] ['top', 'right', 'bottom', 'left'] 支持从哪些方向开始路由
endDirections string[] ['top', 'right', 'bottom', 'left'] 支持从哪些方向结束路由
padding SideOptions - 设置锚点距离转角的最小距离

例如:

复制代码
graph.addEdge({
  source,
  target,
  router: {
    name: 'manhattan',
    args: {
      startDirections: ['top'],
      endDirections: ['bottom'],
    },
  },
})

注意:
manhattan 路由的特性是自动避开路径中的障碍物,如果出现无法避开的情况,就会自动降级到 orth 路由,并在控制台增加了 warn:Unable to execute manhattan algorithm, use orth instead。

以下是效果图

  • metro

地铁路由 metro 是曼哈顿路由 manhattan 的一个变种,它由水平或垂直的正交线段和斜角线段组成,类似地铁轨道图,并自动避开路径上的其他节点(障碍)。其选项与 manhattan 一样,但 maxDirectionChange 的默认值为 45,表示路由线段的最大倾斜角度为 45 度。

例如:

复制代码
graph.addEdge({
  source,
  target,
  router: {
    name: 'metro',
    args: {
      startDirections: ['top'],
      endDirections: ['bottom'],
    },
  },
})

以下是效果图

  • er

实体关系路由 er 由 Z 字形的斜角线段组成,常用于表示 ER 图中的实体之间的连线。

支持的参数如下表:

参数名 参数类型 是否必选 默认值 参数说明
offset number |'center' 32 路由的第一个点和最后一个点与节点之间的距离。当取值为 'center' 时,节点距离的中心作为路由点坐标
min number 16 路由的第一个点和最后一个点与节点之间的最小距离
direction 'T'|'B'|'L'|'R'|'H'|'V' - 路由方向,缺省时将自动选择最优方向

例如:

复制代码
graph.addEdge({
  source,
  target,
  router: {
    name: 'er',
    args: {
      offset: 24,
    },
  },
})

以下是效果图

  • 自定义路由

除了内置路由,还可以按照一定规则来创建自定义路由,例如,实现随机的路由:

复制代码
// 路由参数
interface RandomRouterArgs {
  bounces?: number
}

function randomRouter(
  vertices: Point.PointLike[],
  args: RandomRouterArgs,
  view: EdgeView,
) {
  const bounces = args.bounces || 20
  const points = vertices.map((p) => Point.create(p))

  for (var i = 0; i < bounces; i++) {
    const sourceCorner = view.sourceBBox.getCenter()
    const targetCorner = view.targetBBox.getCenter()
    const randomPoint = Point.random(
      sourceCorner.x,
      targetCorner.x,
      sourceCorner.y,
      targetCorner.y,
    )
    points.push(randomPoint)
  }

  return points
}

Graph.registerRouter('random', randomRouter)
edge.setRouter('random', { bounces: 3 })

以下是效果图

相关推荐
code_YuJun9 小时前
管理系统——应用初始化 Loading 动画
前端
oak隔壁找我9 小时前
JavaScript 模块化演进历程:问题与解决方案。
前端·javascript·架构
Elieal9 小时前
AJAX 知识
前端·ajax·okhttp
Gorgous—l10 小时前
数据结构算法学习:LeetCode热题100-链表篇(下)(随机链表的复制、排序链表、合并 K 个升序链表、LRU 缓存)
数据结构·学习·算法
流星52112210 小时前
GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
java·jvm·笔记·学习·算法
sulikey10 小时前
Qt 入门简洁笔记:从框架概念到开发环境搭建
开发语言·前端·c++·qt·前端框架·visual studio·qt框架
烟袅10 小时前
JavaScript 变量声明报错指南:var、let、const 常见错误解析
javascript
烟袅10 小时前
告别 var!深入理解 JavaScript 中 var、let 和 const 的差异与最佳实践
javascript·面试
井队Tell10 小时前
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第五天)
学习·3d·unity
烛阴10 小时前
循环背后的魔法:Lua 迭代器深度解析
前端·lua