定制的SDL节点形状

4

Graphviz支持SDL形状,这是一个外部图像库:

enter image description here

如何使用SDL节点形状?我已经尝试了:

digraph foo {
    rankdir=LR;
    a [shape=sdl_stop, label=""];
    b;
    a -> b;
}

随着:

dot -Tpng sdl.dot  -o sdl.png

这会出现以下警告:

Warning: using box for unknown shape sdl_stop

这段代码,包括makefile,可以在github上找到

我该如何使用SDL形状作为graphviz节点图像?


我想做同样的事情吗?这个问题有进展吗? - Ferda-Ozdemir-Sonmez
这些形状被识别为传统的PostScript函数。它们不适用于任何其他输出格式。最新的SDL标准修订是从2010年开始的。由于Graphviz不再受电信实体支持,因此似乎不太可能会改变这种情况。 - Pekka
有没有其他方法来制作/使用这些类型的形状。基本形状对我的目的不足,我不知道如何在Python中扩展。 - Ferda-Ozdemir-Sonmez
2个回答

0

需要使用-l标志包含sdl.ps文件,例如:

dot -Tps -l sdl.ps tcp.dot -o tcp.ps
# Optionally, to convert to png.
gs -q -dBATCH -dNOPAUSE -sDEVICE=png256 -sOutputFile=tcp.png tcp.ps

使用以下输入文件(基于this fsm的一半)

digraph G {
    state_start         [shape=sdl_start, peripheries=0, label="Start"];
    state_closed        [shape=sdl_state, peripheries=0, label="CLOSED"];
    state_syn_sent      [shape=sdl_state, peripheries=0, label="SYN-SENT"];
    state_established   [shape=sdl_state, peripheries=0, label="ESTABLISHED"];
    state_listen        [shape=sdl_state, peripheries=0, label="LISTEN"];
    state_syn_received  [shape=sdl_state, peripheries=0, label="SYN-RECEIVED"];

    input_active_open   [shape=sdl_input_from_left, peripheries=0, label="Active open"];
    input_passive_open  [shape=sdl_input_from_left, peripheries=0, label="Passive open"];

    input_syn           [shape=sdl_input_from_left, peripheries=0, label="SYN"]
    input_syn2          [shape=sdl_input_from_left, peripheries=0, label="SYN"]
    input_syn_ack       [shape=sdl_input_from_left, peripheries=0, label="SYN-ACK"]
    input_ack           [shape=sdl_input_from_left, peripheries=0, label="ACK"]

    output_syn          [shape=sdl_output_to_right, peripheries=0, label="SYN"]
    output_syn_ack      [shape=sdl_output_to_right, peripheries=0, label="SYN-ACK"]
    output_ack          [shape=sdl_output_to_right, peripheries=0, label="ACK"]
    output_ack2         [shape=sdl_output_to_right, peripheries=0, label="ACK"]

    state_start -> state_closed;

    state_closed -> input_active_open;
    input_active_open -> output_syn;
    output_syn -> state_syn_sent;

    state_syn_sent -> input_syn_ack;
    input_syn_ack -> output_ack;
    output_ack -> state_established;

    state_closed -> input_passive_open;
    input_passive_open -> state_listen;

    state_listen -> input_syn;
    input_syn -> output_syn_ack;
    output_syn_ack -> state_syn_received;

    state_syn_received -> input_ack;
    input_ack -> state_established;

    state_syn_sent -> input_syn2;
    input_syn2 -> output_ack2;
    output_ack2 -> state_syn_received;

}

上述命令生成以下输出:

png output (cropped)


0

Graphviz Shapes文档中所述,这些是遗留形状,"可用作PostScript函数"。您正在使用.png输出处理器,因此它们不可用。

您可能希望自己绘制它们(或从您拥有的图像中剪切),然后使用<IMG SRC=... />符号在类似HTML的节点中引用位图图像来包含它们。


我们如何使用Python实现这个?非常感谢。 - Ferda-Ozdemir-Sonmez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接