Рисование исходящих ребер, начиная с центра элементов записи в Graphviz

81
8

В Graphviz можно ли выводить исходящие ребра из подзаписей, начиная с их центров, а не из их границ?


Эта диаграмма (оригинальная статья) заставляет это казаться поэтому, но код примера неверен, и я проверил код из листинга 1 (рисует этот, но вместо этого использовал twopi) в Graphviz 2.29 и результат отличается (края начинаются с границ записи).


Любые идеи?


Спасибо заранее.

спросил(а) 2012-12-16T05:42:00+04:00 7 лет, 10 месяцев назад
1
Решение
91

Связанная статья с 2004 года, некоторые изменения были внесены в Graphviz с тех пор.


Здесь, как адаптировать список ° 1, отображают края, происходящие из центра ячеек формы записи:


Добавьте перед следующей строкой следующую строку:


edge[headclip=false, tailclip=false];

Это говорит Graphviz, чтобы нарисовать края до конца, а не обрезать их на границе node.


Но этого недостаточно в этом случае, потому что края используют уже порт - мы можем добавить компас, чтобы указать, где разместить конец/начало края. Например, чтобы первое ребро, идущее от центра J до границы E:


        "node0":f1:c -> "node1":f1;

Или просто оставьте точку порта и компаса, чтобы использовать центр node:


        "node0" -> "node1":f1;

Чтобы все ребра начинались и заканчивались в центре узлов записи:


digraph G
{
node [shape = record];
edge[headclip=false, tailclip=false];

node0 [ label ="<f0> | <f1> J | <f2> "];
node1 [ label ="<f0> | <f1> E | <f2> "];
node4 [ label ="<f0> | <f1> C | <f2> "];
node6 [ label ="<f0> | <f1> I | <f2> "];
node2 [ label ="<f0> | <f1> U | <f2> "];
node5 [ label ="<f0> | <f1> N | <f2> "];
node9 [ label ="<f0> | <f1> Y | <f2> "];
node8 [ label ="<f0> | <f1> W | <f2> "];
node10 [ label ="<f0> | <f1> Z | <f2> "];
node7 [ label ="<f0> | <f1> A | <f2> "];
node3 [ label ="<f0> | <f1> G | <f2> "];

// identical result: "node0" -> "node1";
"node0":f1:c -> "node1":f1:c;
"node0":f1:c -> "node2":f1:c;

"node1":f1:c -> "node4":f1:c;
"node1":f1:c -> "node6":f1:c;
"node4":f1:c -> "node7":f1:c;
"node4":f1:c -> "node3":f1:c;

"node2":f1:c -> "node5":f1:c;
"node2":f1:c -> "node9":f1:c;

"node9":f1:c -> "node8":f1:c;
"node9":f1:c -> "node10":f1:c;
}


record nodes centered

ответил(а) 2012-12-16T22:32:00+04:00 7 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема