Gstreamer 看起来像记录形状节点的Graphviz子图

Gstreamer 看起来像记录形状节点的Graphviz子图,gstreamer,graphviz,dot,subgraph,Gstreamer,Graphviz,Dot,Subgraph,我正在尝试为GStreamer应用程序生成图形,其中有许多嵌套的容器。每个存储单元都有一些元素,但父存储单元的存储单元看起来像其他具有焊盘(汇和源)的公共元素。我想把它可视化,但在Graphviz中我不能生成嵌套节点,所以我必须通过子图来实现。不幸的是,子图没有像记录形状这样的节点选项。在我的图中,每个节点都有记录形状,但子图不能。例如: digraph G { graph [rankdir = TD] node [shape = record] subgraph cl

我正在尝试为GStreamer应用程序生成图形,其中有许多嵌套的容器。每个存储单元都有一些元素,但父存储单元的存储单元看起来像其他具有焊盘(汇和源)的公共元素。我想把它可视化,但在Graphviz中我不能生成嵌套节点,所以我必须通过子图来实现。不幸的是,子图没有像记录形状这样的节点选项。在我的图中,每个节点都有记录形状,但子图不能。例如:

digraph G
{
    graph [rankdir = TD]
    node [shape = record]

    subgraph cluster_player
    {
        label = "player"        

        subgraph cluster_bin1
        {
            label = "bin1"

            bin1_sink1 [label = "sink1"]
            bin1_sink2 [label = "sink2"]
            obj1 [
                label = "{ { <sink1> sink1 | <sink2> sink2 } | obj1 | { <src1> src1 | <src2> src2 } }"
            ]           
            bin1_src1 [label = "src1"]
            bin1_src2 [label = "src2"]

            bin1_sink1:s -> obj1:sink1:n []
            bin1_sink2:s -> obj1:sink2:n []
            obj1:src1:s -> bin1_src1:n []
            obj1:src2:s -> bin1_src2:n []
        }

        bin1_src1:s -> bin2_sink1:n []
        bin1_src2:s -> bin2_sink2:n []

        subgraph cluster_bin2
        {
            label = "bin2"

            bin2_sink1 [label = "sink1"]
            bin2_sink2 [label = "sink2"]            
            bin2_obj1 [
                label = "{ { <sink1> sink1 | <sink2> sink2 } | obj1 | { <src1> src1 } }"
            ]       
            bin2_obj2 [
                label = "{ { <sink1> sink1 } | obj2 | { <src1> src1 } }"
            ]       
            bin2_src1 [label = "src1"]

            bin2_sink1:s -> bin2_obj1:sink1:n []
            bin2_sink2:s -> bin2_obj1:sink2:n []
            bin2_obj1:src1:s -> bin2_obj2:sink1:n []
            bin2_obj2:src1:s -> bin2_src1:n []
        }
    }
}
有向图G
{
图[rankdir=TD]
节点[形状=记录]
子图簇
{
label=“播放器”
子图簇
{
label=“bin1”
bin1_sink1[label=“sink1”]
bin1_sink2[label=“sink2”]
obj1[
label=“{sink1 | sink2}| obj1 |{src1 | src2}}”
]           
bin1_src1[label=“src1”]
bin1_src2[label=“src2”]
bin1_sink1:s->obj1:sink1:n[]
bin1_sink2:s->obj1:sink2:n[]
obj1:src1:s->bin1\U src1:n[]
obj1:src2:s->bin1\U src2:n[]
}
bin1_src1:s->bin2_sink1:n[]
bin1_src2:s->bin2_sink2:n[]
子图簇
{
label=“bin2”
bin2_sink1[label=“sink1”]
bin2_sink2[label=“sink2”]
bin2_obj1[
label=“{sink1 | sink2}| obj1 |{src1}}”
]       
bin2_obj2[
label=“{sink1}|obj2}{src1}”
]       
bin2_src1[label=“src1”]
bin2_sink1:s->bin2_obj1:sink1:n[]
bin2_sink2:s->bin2_obj1:sink2:n[]
bin2_obj1:src1:s->bin2_obj2:sink1:n[]
bin2_obj2:src1:s->bin2_src1:n[]
}
}
}


正如您现在看到的,存储箱中的源和汇与普通元素类似,但我希望它们看起来像“obj1”中的记录。怎么做?如果这是不可能的,也许还有其他语言将具有该功能?

Graphviz子图是容器。它们不支持您正在查找的记录符号或形状属性。仅限于节点,而子图则不是。

gstreamer中的graphviz支持对您来说不够好吗?查看GST_DEBUG_DUMP_DOT_DIR envvar和相关的宏。它对我来说不够好,因为我想让它变得更好;)不如在graphviz邮件列表上提问?我花了相当多的时间来设计当前的表单。在节点和集群上拥有端口确实不错。