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 に答える