2010-04-27 121 views
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"]; 
} 

A rendering of the state machine http://img91.imageshack.us/img91/2300/previewom.png

有沒有辦法讓這個看起來好一點?

乙TW:我試過頭/尾端,但它們不適用於我的Graphviz版本(Mac OS X上爲1.13)

我不僅限於點引擎,我只想要一個漂亮的圖形,不關心關於渲染器/語言。

非常感謝

回答

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]; 
}

a rendering of the state machine http://img532.imageshack.us/img532/4083/previewd.png

雖然這工作(對於這個特殊的例子),我仍然非常喜歡在點/ Graphviz的一些意見或在賞心悅目的方式呈現有限狀態機的替代品。