2013-04-05 67 views
3

我想爲許多嵌套箱的GStreamer應用程序生成圖。每個容器都有一些元素,但父容器的容器看起來像任何其他具有容器(接收器和源)的公共元素。我想要可視化它,但在Graphviz中我不能生成嵌套節點,所以我必須通過子圖來完成。不幸的是,子圖沒有像記錄形狀這樣的節點選項。在我的圖中,每個節點都有記錄形狀,但是子圖不能。例如: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 [] 
     } 
    } 
} 

enter image description here

,你可以看到現在的源和匯的垃圾箱都像正常的元素,但我希望他們看起來像記錄「OBJ1」。怎麼做?如果不可能,也許還有其他語言會具有該功能?

+0

gstreamer中的graphviz支持不夠好嗎?查看GST_DEBUG_DUMP_DOT_DIR envvar和相關的宏。 – ensonic 2013-04-06 14:47:41

+0

這對我來說不夠好,因爲我想讓它變得更好;) – 2013-04-07 13:06:53

+0

那麼請問在graphviz郵件列表上呢?我花了相當多的時間來提出目前的形式。有節點和集羣上的端口確實很好。 – ensonic 2013-04-08 13:29:13

回答

0

Graphviz子圖是容器。他們不支持您正在查找的記錄符號或形狀屬性。 shape僅限於節點,子圖不是。