The goal
The goal of that tutorial is to show you how to create the following layout:
+------+ +---------+ +-----------+ +---------+ | Bonn | --> | Koblenz | ----------------> | Frankfurt | --> | Dresden | +------+ +---------+ +-----------+ +---------+ | ^ | | | | | +-------+ | +-----------> | Trier | ------+ +-------+
Solution
[ Bonn ] --> [ Koblenz ] --> { minlen: 3; } [ Frankfurt ] --> [ Dresden ] [ Koblenz ] --> [ Trier ] { origin: Koblenz; offset: 2, 2; } --> [ Frankfurt ]
Explanation
Imagine you have a row of nodes like this:
[ Bonn ] --> [ Koblenz ] --> [ Frankfurt ] --> [ Dresden ]
This would be rendered like this:
+------+ +---------+ +-----------+ +---------+ | Bonn | --> | Koblenz | --> | Frankfurt | --> | Dresden | +------+ +---------+ +-----------+ +---------+
Now you want to show that there is an alternative route via 'Trier':
[ Bonn ] --> [ Koblenz ] --> [ Frankfurt ] --> [ Dresden ] [ Koblenz ] --> [ Trier ] --> [ Frankfurt ]
Unfortunately, this doesn't render quite right, instead of showing the route via 'Trier' being a bypass, it shows it as the normal route and the route via Frankfurt as a shortcut:
+-----------------------------+ | v +------+ +---------+ +-------+ +-----------+ +---------+ | Bonn | --> | Koblenz | --> | Trier | --> | Frankfurt | --> | Dresden | +------+ +---------+ +-------+ +-----------+ +---------+
The first idea would be to route the edge to 'Trier' to the right:
[ Bonn ] --> [ Koblenz ] --> [ Frankfurt ] --> [ Dresden ] [ Koblenz ] --> { start: right; } [ Trier ] --> [ Frankfurt ]
Unfortunately, the layouter is not so easily defeated:
+------+ +---------+ | Bonn | --> | Koblenz | ------+ +------+ +---------+ | | | | | v v +---------+ +-----------+ +---------+ | Trier | --> | Frankfurt | --> | Dresden | +---------+ +-----------+ +---------+
So lets put the node 'Trier' at a certain offset from Koblenz:
[ Bonn ] --> [ Koblenz ] --> [ Frankfurt ] --> [ Dresden ] [ Koblenz ] --> [ Trier ] { origin: Koblenz; offset: 2, 2; } --> [ Frankfurt ]
This looks almost right:
+------+ +---------+ +-----------+ +---------+ | Bonn | --> | Koblenz | --> | Frankfurt | --> | Dresden | +------+ +---------+ +-----------+ +---------+ | ^ | | | | | +-----------+ +-----------> | Trier | +-----------+
So in addition, we make the edge from 'Koblenz' to 'Frankfurt' longer via the minlen-attribute:
[ Bonn ] --> [ Koblenz ] --> { minlen: 3; } [ Frankfurt ] --> [ Dresden ] [ Koblenz ] --> [ Trier ] { origin: Koblenz; offset: 2, 2; } --> [ Frankfurt ]
+------+ +---------+ +-----------+ +---------+ | Bonn | --> | Koblenz | ----------------> | Frankfurt | --> | Dresden | +------+ +---------+ +-----------+ +---------+ | ^ | | | | | +-------+ | +-----------> | Trier | ------+ +-------+
Et voila! Here is the same graph rendered as SVG:
Contact and Bugreports
If you have questions, feel free to send me an email (Gnupg key). Bugreports should go to rt.cpan.org.