Улучшение макета конечного автомата в graphviz

Я новичок в graphviz и мог бы немного помочь с улучшением макета.

Для моего класса uni мне нужно нарисовать граф для конечного автомата. Код следующий:

digraph fsm{
    //rankdir=LR;   //left-right orientation

    node[shape=Mrecord]
    S00[label="{S0|1111111111}"];
    S01[label="{S1|0110010101}"];
    S02[label="{S2|1000010110}"];
    S03[label="{S3|1000010110}"];
    S04[label="{S4|0100010101}"];
    S05[label="{S5|0010110101}"];
    S06[label="{S6|0011001001}"];
    S07[label="{S7|0011001001}"];
    S08[label="{S8|0010100101}"];
    S09[label="{S9|0100100000}"];
    S10[label="{S10|0100100000}"];
    S11[label="{S11|0000000000}"];
    S12[label="{S12|0100100000}"];
    //S0
    S00 -> S00[label="t<8s"];
    S00 -> S01[label="t>8s"];
    S00 -> S09[label="NM"];
    //S1
    S01 -> S01[label="t<1s"];
    S01 -> S02[label="t>1s"];
    S01 -> S09[label="NM"];
    //S2
    S02 -> S02[label="t<6s"];
    S02 -> S03[label="t>6s"];
    S02 -> S09[label="NM"];
    //S3
    S03 -> S03[label="t<7s"];
    S03 -> S04[label="t>7s OR I_NS OR I_HS-F"];
    S03 -> S09[label="NM"];
    //S4
    S04 -> S04[label="t<1s"];
    S04 -> S05[label="t>1s"];
    S04 -> S09[label="NM"];
    //S5
    S05 -> S05[label="t<1s"];
    S05 -> S06[label="t>1s"];
    S05 -> S09[label="NM"];
    //S6
    S06 -> S06[label="t<2s"];
    S06 -> S07[label="t>2s"];
    S06 -> S09[label="NM"];
    //S7
    S07 -> S07[label="t<4s"];
    S07 -> S08[label="t>4s OR I_HS OR I_NS-F"];
    S07 -> S09[label="NM"];
    //S8
    S08 -> S08[label="t<1s"];
    S08 -> S01[label="t>1s"];
    S08 -> S09[label="NM"];
    //S9
    S09 -> S09[label="t<1.5s"];
    S09 -> S10[label="t>1.5s"];
    //S10
    S10 -> S10[label="t<0.5s"];
    S10 -> S11[label="t>0.5s"];
    S10 -> S12[label="t>0.5s"];
    //S11
    S11 -> S11[label="t<0.5s"];
    S11 -> S10[label="t>0.5s"];
    S11 -> S12[label="t>0.5s"];
    //S12
    S12 -> S12[label="t<1.5s"];
    S12 -> S00[label="t>1.5s"];
}

Вывод следующий: График

Так что да, это работает. Но это очень некрасиво.

Есть какие-нибудь советы, как улучшить макет?

Больше всего меня беспокоит небольшое расстояние между краями и текстом, перекрытие краев и изгибы по краям от S4-S7 до S9.

Любой вклад очень ценится.


person namron    schedule 23.03.2017    source источник


Ответы (1)


Вы задали этот вопрос 16 месяцев назад, поэтому я надеюсь, что вы все еще не посещаете тот же универсальный курс. В любом случае, для справки в будущем, установка атрибута для сплайнов на splines=ortho и группировка узлов [S1:S8] в подграф (например: subgraph SGn { (Sxx defs in here) }) значительно продвинут вас на пути к очистке вашего макета.

person AaronDanielson    schedule 14.08.2018
comment
Спасибо за ответ. Я включил загроможденный график для курса, и впоследствии ему никогда не приходилось использовать graphviz - person namron; 15.08.2018