ref*_*ged 4 graph state-machine rendering-engine graphviz
我必须绘制一个具有一些自反转换的小型有限状态机(意味着转换的开始和结束状态相等).
问题是在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"];
}
Run Code Online (Sandbox Code Playgroud)
状态机的渲染http://img91.imageshack.us/img91/2300/previewom.png
有没有办法让这个看起来好一点?
BTW:我尝试过head/tailport,但它们不能用于我的Graphviz版本(Mac OS X上的1.13)
我不仅限于点引擎,我只想要一个漂亮的图形而不关心渲染器/语言.
非常感谢
所以,如果找到一个解决方法,但不是我的问题的真正答案.
诀窍是有一个不可见的节点连接到起始状态.然后,起始状态不是层次结构的顶部,并且在放置节点时具有更多的自由度.此外,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];
}Run Code Online (Sandbox Code Playgroud)
状态机的渲染http://img532.imageshack.us/img532/4083/previewd.png
虽然这是有效的(对于这个特定的例子),我仍然非常喜欢dot/Graphviz上的一些建议,或者是以令人愉悦的方式呈现有限状态机的替代方案.
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |