3

在 Graphviz 中,是否可以从子记录的中心而不是边界开始绘制出边?

这张图原始文章)看起来是这样,但是示例代码是错误的,我在 Graphviz 2.29 中测试了清单 1 中的代码(绘制了这个,但我twopi改用了),结果不同(边缘从记录边界开始) .

有任何想法吗?

提前致谢。

4

1 回答 1

5

链接的文章是从 2004 年开始的,从那时起对 graphviz 进行了一些更改。

以下是如何调整清单°1 显示源自记录形状单元中心的边缘:

在定义边缘之前添加以下行:

edge[headclip=false, tailclip=false];

这告诉 graphviz 将边缘绘制到末尾,而不是在边框的节点处剪裁它们。

但是在这种情况下这还不够,因为边缘已经使用了一个端口——我们可以添加一个罗盘点来指示放置边缘的结束/开始的位置。例如,为了让第一条边从 的中心J到 的边界E

        "node0":f1:c -> "node1":f1;

或者只是省略端口和罗盘点以使用节点的中心:

        "node0" -> "node1":f1;

为了让所有边都起源和结束于记录节点的中心:

digraph G
{
    node [shape = record];
    edge[headclip=false, tailclip=false];

    node0 [ label ="<f0> | <f1> J | <f2> "];
    node1 [ label ="<f0> | <f1> E | <f2> "];
    node4 [ label ="<f0> | <f1> C | <f2> "];
    node6 [ label ="<f0> | <f1> I | <f2> "];
    node2 [ label ="<f0> | <f1> U | <f2> "];
    node5 [ label ="<f0> | <f1> N | <f2> "];
    node9 [ label ="<f0> | <f1> Y | <f2> "];
    node8 [ label ="<f0> | <f1> W | <f2> "];
    node10 [ label ="<f0> | <f1> Z | <f2> "];
    node7 [ label ="<f0> | <f1> A | <f2> "];
    node3 [ label ="<f0> | <f1> G | <f2> "];

    // identical result: "node0" -> "node1";
    "node0":f1:c -> "node1":f1:c;
    "node0":f1:c -> "node2":f1:c;

    "node1":f1:c -> "node4":f1:c;
    "node1":f1:c -> "node6":f1:c;
    "node4":f1:c -> "node7":f1:c;
    "node4":f1:c -> "node3":f1:c;

    "node2":f1:c -> "node5":f1:c;
    "node2":f1:c -> "node9":f1:c;

    "node9":f1:c -> "node8":f1:c;
    "node9":f1:c -> "node10":f1:c;
}

记录节点居中

于 2012-12-16T19:32:24.710 回答