При переключении с «обычных» подграфов на кластеры rank=same
больше не работает.
Чтобы показать мою проблему, взгляните на следующий пример графика.
digraph INV_X1 {
rankdir = "LR";
edge [penwidth = "2"];
/* Component styles */
M_i_0 [shape=none;image = "res/nmos.jpg"];
M_i_1 [shape=none;image = "res/pmos.jpg"];
/* Node styles */
A [style=filled;color=green];
ZN [style=filled;color=green];
/* Connections */
M_i_0:n -> ZN;
A -> M_i_0:w;
/* Put M_i_0 and _VSS_0 on the same rank. */
subgraph g_VSS_0 {
rank=same;
label = "_VSS_0";
_VSS_0 [shape=none;image = "res/gnd.jpg";label = ""];
M_i_0 -> _VSS_0 [arrowhead=none];
}
M_i_1:s -> ZN;
A -> M_i_1:w;
/* Put M_i_1 and _VDD_1 on the same rank. */
subgraph g_VDD_1 {
rank=same;
label = "_VDD_1";
_VDD_1 [shape=none;image = "res/pwr.jpg";label = ""];
_VDD_1 -> M_i_1 [arrowhead=none];
}
}
Результат показан на следующем рисунке. Я надеюсь, что это не слишком запутанно, так как я использовал несколько изображений для узлов. Я создал два подграфа, чтобы сгруппировать по два узла в каждом и поместить их в один и тот же ранг. Один подграф находится в центре вверху, другой — в центре внизу.
Теперь я хочу переключиться с подграфов на кластеры, чтобы убедиться, что сгруппированные узлы всегда расположены близко друг к другу, и я хочу иметь границы и метки, чтобы сделать кластеры видимыми. Но когда я просто меняю имена подграфов на "cluster_...", это выглядит так.
В чем проблема? Почему rank=same
больше не работает должным образом? Также данный положение порта больше не работает должным образом (край больше не соединен с югом/севером узла).
Я попытался вытащить rank=same
из кластера в собственное выражение, но это, кажется, полностью перезаписывает предыдущее выражение кластера, поскольку граница и метки исчезают. Кроме того, я пытался использовать constraint=false
для соединений узлов, но это искажало порядок узлов, поэтому меня не очень удовлетворил такой подход.
Любая помощь приветствуется. Вы можете найти использованные изображения здесь, если хотите воссоздать график.
Вы правы, поскольку документация состояния, атрибут "ранг" работает Только с подграфами (кластер больше не является подграфом). Но в чем проблема, поместите внутрь своего кластера еще один подграф!
digraph INV_X1 {
rankdir = "LR";
edge [penwidth = "2"];
/* Component styles */
M_i_0 [shape=none;image = "res/nmos.jpg"];
M_i_1 [shape=none;image = "res/pmos.jpg"];
/* Node styles */
A [style=filled;color=green];
ZN [style=filled;color=green];
/* Connections */
M_i_0:n -> ZN;
A -> M_i_0:w;
subgraph cluster_a{
/* Put M_i_0 and _VSS_0 on the same rank. */
label = "_VSS_0";
subgraph g_VSS_0 {
rank=same;
_VSS_0 [shape=none;image = "res/gnd.jpg";label = ""];
_VSS_0 -> M_i_0 [arrowhead=none];
}
}
M_i_1:s -> ZN;
A -> M_i_1:w;
/* Put M_i_1 and _VDD_1 on the same rank. */
subgraph cluster_b {
label = "_VDD_1";
subgraph g_VDD_1 {
rank=same;
_VDD_1 [shape=none;image = "res/pwr.jpg";label = ""];
M_i_1 -> _VDD_1 [arrowhead=none];
}
}
}
Также обратите внимание, что я изменил порядок ваших ребер M_i_1 -> _VDD_1
и _VSS_0 -> M_i_0
, по какой-то причине они были перевернуты.
Результат: