端口
边的起点和终点
在我们继续讨论布局的相对方向和绝对方向之前,我们先来看一看节点的端口数目和边的条数;
..................................................: : : : : : : :: 0,0 :north,0:north,1: 3,0 : 4,0 : 5,0 : 6,0 :: :left,0 :left,1 : : : : :: : : : : : : :..................................................: :+-------------+: : : : ::west,0:| |:east,0 : 4,1 : 5,1 : 6,1 ::back,1:| |:front,0: : : :: :| |: : : : :........| Node |...........................: :| |: : : : ::west,1:| |:east,1 : 4,2 : 5,2 : 6,2 ::back,1:| |:front,1: : : :: :+-------------+: : : : :.................................................: : : : : : : :: 0,3 :south,0:south,1: 3,3 : 4,3 : 5,3 : 6,3 :: :right,0:right,1: : : : :: : : : : : : :.................................................
可以给节点的每一条都命名,之所以每一个边都有两个名字(比如北和左)和整个图或者分组有关;使用绝对方向的话,那么这个边的方向就与节点的方向无关;比如南方永远是南方;但是,如果使用相对方向的话,那么就是相对当前节点的前方;比如右边指的是当前节点前方然后向右;下面是一个具体的例子:
[ C ] -> { start: south; } [ S ] { origin: C; offset: 0,2; }[ C ] -> { start: north; } [ N ] { origin: C; offset: 0,-2; }[ C ] -> { start: east; } [ E ] { origin: C; offset: 2,0; }[ C ] -> { start: west; } [ W ] { origin: C; offset: -2,0; }
+---+| N |+---+^||+---+ +---+ +---+| W | <-- | C | --> | E |+---+ +---+ +---+||v+---+| S |+---+
[ C ] -> { start: right; } [ R ] { origin: C; offset: 0,2; }[ C ] -> { start: left; } [ L ] { origin: C; offset: 0,-2; }[ C ] -> { start: front; } [ F ] { origin: C; offset: 2,0; }[ C ] -> { start: back; } [ B ] { origin: C; offset: -2,0; }
+---+| L |+---+^||+---+ +---+ +---+| B | <-- | C | --> | F |+---+ +---+ +---+||v+---+| R |+---+
上面的两个图看起来是一样的,好像使用向右和向南并没有什么区别,但是,如果改变整个图的方向,就会有一些区别了:
graph { flow: down; }[ C ] -> { start: south; } [ S ] { origin: C; offset: 0,2; }[ C ] -> { start: north; } [ N ] { origin: C; offset: 0,-2; }[ C ] -> { start: east; } [ E ] { origin: C; offset: 2,0; }[ C ] -> { start: west; } [ W ] { origin: C; offset: -2,0; }
+---+| N |+---+^||+---+ +---+ +---+| W | <-- | C | --> | E |+---+ +---+ +---+||v+---+| S |+---+
graph { flow: down; }[ C ] -> { start: right; } [ R ] { origin: C; offset: 0,2; }[ C ] -> { start: left; } [ L ] { origin: C; offset: 0,-2; }[ C ] -> { start: front; } [ F ] { origin: C; offset: 2,0; }[ C ] -> { start: back; } [ B ] { origin: C; offset: -2,0; }
+---+| L | <++---+ ||+---------+ |v | |+---+ +---+ | +---+| B | +- | C | -+ | F |+---+ | +---+ +---+| | ^| +---------+|| +---++> | R |+---+
可以看到第一个图根本没有什么变化;但是第二个图就完全不一样了,由于节点的偏移是固定的(不会随着整个图的方向变化而变化),因此所有的节点的位置不会发生改变,但是,从节点发出的边的方向发生了变化。
总结:如果希望图与方向无关,最嗨使用绝对的方向,比如东南西北;如果希望图可以旋转,那么就使用相对方向。
端口数目
通过设置一个边的起点和终点,可以指导布局器把边放置在那个端口上。
[ Left ] -> { start: left; end: left; } [ Right ]
+------------+| v+------+ +-------+| Left | | Right |+------+ +-------+
