2014-09-24 297 views
1

我试图避免20-> 40和30-> 70之间的交叉线。有谁知道如何做到这一点?我使用单点来理顺边缘,但我会希望渲染引擎避免这些边缘重叠。这里是我的点代码:Graphviz交叉边缘

digraph { 
graph [splines="ortho", nodesep = "1", overlap = false]; 
node [shape=rectangle, color=lightgrey, style=filled ]; 

10 
20 
30 
40 
50 
60 
70 
80 
90 


node[shape=none, width=0, height=0 label=""]; 
edge[dir=none]; 

{rank=same; 
p1->10 
10->p2 
} 

p1->20 
p2->30 


{rank=same; 
p3->40 
40->p4 
} 

p3->50 
p4->60 


{rank=same; 
p5->70 
70->p6 
} 

p5->80 
p6->90 


20->40 
30->70 
} 

我想张贴图片,但计算器不允许我这样做...你可以明白我的意思,当你将代码复制到:http://stamm-wilbrandt.de/GraphvizFiddle/

我非常感谢你的帮助!

+0

+1的链接GraphvizFiddle - 不知道这个工具,伟大的东西! – marapet 2014-09-24 18:39:43

回答

0

你可以通过添加DP5 P4之间一个看不见的边缘给graphviz的一个暗示:

{ 
    rank=same; 
    p3 -> 40; 
    40 -> p4; 
    p4 -> p5 [style=invis]; // new invisible edge 
    p5 -> 70; 
    70 -> p6; 
} 

如果您无法添加可见边(动态图形生成),确保节点它们是子图的一部分在子图中首先出现,因此避免了前期节点定义。

在这个例子中,我删除了脚本开始处的节点定义并且内联了肘关节节点的样式。

Here's the GraphvizFiddle

digraph { 
graph [splines="ortho", nodesep = "1", overlap = false]; 
node [shape=rectangle, color=lightgrey, style=filled ]; 

//node[shape=none, width=0, height=0, label=""]; 
edge[dir=none]; 

{ 
rank=same; 
p1[shape=none, width=0, height=0, label=""]; 
p2[shape=none, width=0, height=0, label=""]; 
p1->10 
10->p2 
} 

p1->20 
p2->30 

{ 
rank=same; 
p3[shape=none, width=0, height=0, label=""]; 
p4[shape=none, width=0, height=0, label=""]; 
p3->40 
40->p4 
} 


p3->50 
p4->60 

{ 
rank=same; 
p5[shape=none, width=0, height=0, label=""]; 
p6[shape=none, width=0, height=0, label=""]; 
p5->70 
70->p6 
} 

p5->80 
p6->90 


20->40 
30->70 

} 
+0

谢谢,这适用于这个静态示例!我怎样才能在动态模式下完成这项工作?我不知道在什么“级别”节点将显示如此动态添加隐藏的边缘似乎很难......真的感谢你的帮助! – 2014-09-24 18:57:47

+0

我和你在一起,看到无形的边缘!我添加了一个更通用的解决方案,希望它能适用于您的真实案例。 – marapet 2014-09-24 20:28:15

+0

靠近!因此,不提供节点定义使这项工作...不幸的是,我确实需要定义的节点,因为节点的高度和宽度是根据标签大小计算的... – 2014-09-24 21:00:03