據我知道這需要一點點變通;我只會用Graphviz DOT語言來做。我先給你解決方案,然後提供一些關於如何擴展它的解釋。
這是得出的數字:
這是Graphviz的代碼生成的數字:
graph atree {
Item1 [shape=none,label="Item 1",pos="2.2,1.1!"];
Item2 [shape=none,label="Item 2",pos="2.2,0.1!"];
Item3 [shape=none,label="Item 3",pos="2.9,-0.3!"];
A [shape=box,color=lightblue,style=filled,pos="2,3!"];
B [shape=box,color=lightblue,style=filled,pos="1,2.1!"];
C [shape=box,color=lightblue,style=filled,pos="3,2.1!"];
D [shape=box,color=lightblue,style=filled,pos="1.5,1.5!"];
E [shape=box,color=lightblue,style=filled,pos="1.5,0.5!"];
D0 [style=invisible,fixedsize=true,width=0,height=0,pos="2,2.5!",label=""];
D1 [style=invisible,fixedsize=true,width=0,height=0,pos="1,2.5!",label=""];
D2 [style=invisible,fixedsize=true,width=0,height=0,pos="3,2.5!",label=""];
D3 [style=invisible,fixedsize=true,width=0,height=0,pos="1,1.5!",label=""];
D4 [style=invisible,fixedsize=true,width=0,height=0,pos="1,0.5!",label=""];
D5 [style=invisible,fixedsize=true,width=0,height=0,pos="1.5,1.1!",label=""];
D6 [style=invisible,fixedsize=true,width=0,height=0,pos="1.5,0.1!",label=""];
D7 [style=invisible,fixedsize=true,width=0,height=0,pos="2.2,-0.3!",label=""];
A -- D0 -- D1 -- B -- D3 -- D4 -- E [color=blue];
E -- D6 -- Item2 -- D7 -- Item3 [color=blue];
D0 -- D2 -- C [color=blue];
D3 -- D -- D5 -- Item1 [color=blue];
}
如果你把它放在一個文件名爲inputfile.dot
就可以得到結果圖像文件使用命令neato -Tpng inputfile.dot > outfile.png
。
現在有幾條關於它是如何工作的評論:用A, B, C, D, E, Item1, Item2, Item3
構建樹的代碼很簡單(屬性只是設置顏色和框的樣式)。讓直線和正交直線的技巧包括:1)向圖中添加零大小的不可見節點; 2)將所有對象放置在畫布上的絕對座標中。步驟1)需要輔助節點D1, D2, D3, D4, D5, D6, D7
,步驟2)需要選項pos="x,y!"
。請注意,您需要在pos
命令末尾使用!
符號,否則這些位置將不會被視爲最終位置,並且佈局仍會變更。
可以通過第一定位添加附加節點的新節點(通過使用代碼用於節點A ... Item3
作爲模板),添加不可見的,輔助節點(與pos
,使得向和從它的所有連接是正交的),並然後通過<StartingNode> -- <AuxiliaryNode> -- <NewNode>
將連接添加到圖表。
所以它看起來像我的代碼將不得不做搞清楚絕對定位號碼困難的部分! – thomas 2010-06-01 19:17:30
不幸的是,我不知道有什麼方法可以使用Graphviz繪製圖形,並在節點之間建立正交(和分離)的鏈接!如果您不需要這種行爲,Graphviz將爲您完成大部分艱苦的工作。如果你堅持這種行爲,恐怕你將不得不爲佈局做一些手動工作。 – user8472 2010-06-01 21:14:01
謝謝。不幸的是我需要這種行爲。我將不得不編碼這個邏輯。 – thomas 2010-06-01 21:59:12