【问题标题】:Strange edge placement in Graphviz DotGraphviz Dot 中奇怪的边缘位置
【发布时间】:2010-11-05 14:47:06
【问题描述】:

我有一个模块可以自动输出(以点格式)用某种汇编语言(我的编译器的 IR)编写的函数。节点是使用“记录”形状打印的基本块。问题是边缘走一条奇怪的路线,例如:

digraph {
node [shape = record];
n0[label="{<name> entry | <body> store i, 0\nstore sum, 0\ngoto test | {<target> target}}"];
n1[label="{<name> test | <body> t2 = load i\nif t4, body,   done | {<true> true | <false> false}}"]
n2[label="{<name> body | <body> t5 = load sum\ngoto test | {<target> target}}"];
n3[color=firebrick3, label="{<name> done | <body> t9 = load sum\nret t9}}"];
n0:target:s -> n1:name:n
n1:true:s -> n2:name:n
n1:false:s -> n3:name:n
n2:target:s -> n1:name:n
}

还有一张图片:

我该怎么做才能使从“目标”到“测试”的边放在左侧?

【问题讨论】:

  • 您能否具体说明一下您希望图表在路由箭头时一般遵循的标准?例如。您想尽量减少交叉路口吗?
  • 我希望从“目标”到“测试”的边缘在左侧布线。现在它看起来真的很奇怪,无法真正理解为什么首先选择这样的路线。

标签: graph graph-theory graphviz


【解决方案1】:

最简单的非大师方法是强制将任性链接附加在“西”侧。

n2:target:w -> n1:name:w

这可能适用于这种情况。一种更通用的方法,但需要更多的思考和编码,但如果您愿意,将允许边缘附加到 :s 和 :n ,添加一个大小为零的不可见节点(颜色=白色,或者可能存在可见性属性)并使用两条边从 n2 到 n1。只在其中一个上有箭头。不可见节点必须位于 n1 或 n2 的左侧。唉,我的 graphvis-fu 不够强大,无法创建一个工作示例;也许其他人可以创建一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多