Skip to content

中継点(ウェイポイント)

既定ではコネクタは始点と終点を結ぶ直線です。中継点 を指定すると、 特定のセルを経由してルーティングでき、他のノードを避けたり意図的な 経路を作ったりできます。

中継点はコネクタの { … } ボディ内で指定します(DSL の位置引数として の短縮形はありません — {col, row} のリストは行内に並べると見づらく なるため)。

基本構文

gg
<from> <arrow> <to> ["<label>"] {
  waypoints: [{ col: N, row: N }, ],
}

座標は 小数可 で、{ col: 2.5, row: 2 } のように書けば隣接する セル中心の中間に置けます。

conn-02-waypoints (SVG, frame 1)

始点 @A1 と終点 @D3 は斜めに離れているため、中継点なしでは @B2 / @C2 を斜めに突っ切る矢印になります。(3,0)(3,1) を 中継点に指定すると、0 行目を右に進んでから 3 列目を下る L 字の経路 になります。

gg
a --> b "via" {
  waypoints: [{ col: 4, row: 1 }, { col: 4, row: 2 }],
}

複数の中継点

gg
a --> b "S-curve" {
  waypoints: [
    { col: 2, row: 2 },
    { col: 2, row: 3 },
    { col: 3, row: 3 },
  ],
}

中継点は宣言順に通過します。中継点間は 直線 で繋がる(自動スムージング はしません)ので、経由点の数 + 1 = 折れ回数になります。

属性が多くなってきたら

経路 + スタイルが組み合わさってきたら、コネクタ全体を doc { connectors: … } に切り出すと見通しが良くなります:

gg
doc {
  connectors: [
    {
      from: 'a', to: 'b', arrow: 'end',
      label: 'routed',
      waypoints: [
        { col: 2.5, row: 1 },
        { col: 2.5, row: 3 },
      ],
      nodeMargin: 0.8,
    },
  ],
}

矢印先端の引き

nodeMargin(0–1、既定 0.6)は、矢印先端をノード中心からどれだけ 手前で止めるかを制御します。大きくすると矢印先端が外側に引っ込むので、 既定で矢印がノードのリングに重なってしまうときに調整します。

このページを編集Last updated: