2010-04-27 18 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

есть ли способ сделать это выглядеть немного лучше?

B TW: Я пробовал head/tailport, но они не работают над моей версией Graphviz (1.13 на Mac OS X).

Я не ограничен точечным движком, мне нужен только красиво выглядящий график, и мне все равно. о рендерере/языке.

Большое спасибо

ответ

5

Так что, если нашел обходной путь, но на самом деле не ответ на мою проблему.
Фокус в том, чтобы иметь невидимый узел, который подключается к исходному состоянию. начальное состояние тогда не является вершиной иерархии, и у него есть немного больше свободы в размещении узлов. Кроме того, атрибуты head/tailport работают так, как должны. Результат - если не симпатичный, как я бы хотел, чтобы это было - нормально смотреть.

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 или альтернатива для рендеринга конечных автоматов приятным способом.

Смежные вопросы