4

いくつかの反射遷移を持つ小さな有限状態マシンを描画する必要があります(遷移の開始状態と終了状態が等しいことを意味します)。

問題は、Graphvizでそれをレンダリングすると醜い結果になることです。

digraph finite_state_machine {  
    edge [fontsize=11];
    
    S0 -> S0 [label = "td=1\n-/e2"];   
    S0 -> S1 [label = "td=3 \n-/e3" ];  
    S1 -> S0 [label = "td=3\n-/-\nt=0"];  
    S0 -> S2 [label = "P:i1/e4"];  
    S2 -> S0 [label = "td=0\n-/-" ];  
    S0 -> S0 [label = "i1/e1\ntd+=1"];  
}

ステートマシンのレンダリング

これを少し見栄えよくする方法はありますか?

ところで:ヘッド/テールポートを試しましたが、私のバージョンのGraphviz(Mac OS Xでは1.13)では機能しません

私はドットエンジンに限定されていません。見栄えの良いグラフだけが必要で、レンダラー/言語は気にしません。

どうもありがとう

4

1 に答える 1

5

したがって、回避策が見つかった場合でも、実際には私の問題に対する答えではありません。
秘訣は、開始状態に接続する非表示のノードを作成することです。その場合、開始状態は階層の最上位ではなく、ノードを配置する際の自由度が少し高くなります。また、ヘッド/テールポートの属性は正常に機能します。結果は-私が望むようにきれいではないにしても-見て大丈夫です。

digraph finite_state_machine {  
  edge [fontsize=7];
  fontsize = 11;
  rankdir=LR;
  {rank = same;null}
  {rank = same; S0}
  {rank = same; S1 S2}
  nodesep = 1;
  ranksep = 1;

  null [shape = plaintext label=""];
  null -> S0;
  S0 -> S0 [label = "td=1\n-/e2", tailport = n, headport = n]; 
  S0 -> S1 [label = "td=3 \n-/e3" ];
  S1 -> S0 [label = "td=3\n-/-\nt=0"];
  S0 -> S2 [label = "P:i1/e4"];
  S2 -> S0 [label = "td=0\n-/-" ];
  S0 -> S0 [label = "i1/e1\ntd+=1" headport = s tailport = s];
}

ステートマシンのレンダリングhttp://img532.imageshack.us/img532/4083/previewd.png

これは機能しますが(この特定の例では)、dot/Graphvizまたは有限状態マシンを快適な方法でレンダリングするための代替案に関するアドバイスが必要です。

于 2010-04-27T23:30:34.200 に答える