elk
elk copied to clipboard
Unfortunate hyperedge routing
Hyperedges with multiple sources and targets distributed over several layers are not always routed as well as possible. Consider the following example:

The wakeUsec edge has two sources (CtrlMotor and setSpeeds) and two targets (the pre(wakeUsec) register and SimTime). The algorithm decided that it would be a good idea to give the edge two horizontal segments: one each above and below CtrlMotor. That's bad, mkay?
Wouldn't it make more sense to eliminate the vertical segment to the left of CtrlMotor?
Eliminating either of the horizontal segments would cause segments of the edges to have a both-way flow of direction.
Eliminating either of the horizontal segments would cause segments of the edges to have a both-way flow of direction.
That wouldn't have to be a problem; it's a hyperedge, after all. It just has to be understandable. One solution we thought about was based on giving a hyperedge only a single horizontal segment, as a sort of "backbone", and branch of from there. Might be a lot clearer, possibly at the expense of longer edges or more edge crossings.