Cluster computing 点工具双箭头
我最近一直在使用dot创建一个相当复杂的汇编程序的流图和调用图。总的来说,这一切都很好,只是有点打嗝。有时,在从簇内的一个节点到另一个簇中的另一个节点绘制直线时,该直线会以某种方式加倍 我已经添加了一个精简版的问题代码和一个点输出图像 谢谢Cluster computing 点工具双箭头,cluster-computing,graphviz,dot,subgraph,Cluster Computing,Graphviz,Dot,Subgraph,我最近一直在使用dot创建一个相当复杂的汇编程序的流图和调用图。总的来说,这一切都很好,只是有点打嗝。有时,在从簇内的一个节点到另一个簇中的另一个节点绘制直线时,该直线会以某种方式加倍 我已经添加了一个精简版的问题代码和一个点输出图像 谢谢 digraph G { ratio=auto; node[fontsize=12]; label="boot"; newrank=true; { node[shape=plaintext]; 1->2[arrowsize
digraph G {
ratio=auto; node[fontsize=12]; label="boot"; newrank=true;
{
node[shape=plaintext];
1->2[arrowsize=0.7,penwidth=0.1];
}
Reset->uart_init[arrowsize=0.7, penwidth=0.1];
{ rank=same; "Reset"; "1"; }
{ rank=same; "uart_init"; "2"; }
/* terminalhooks cluster */
subgraph cluster42 {
fontsize=12;
label="terminalhooks.asm";
labelloc=b;
type->emit[arrowsize=0.7,penwidth=0.1];
emit[label=<emit<BR/><FONT POINT-SIZE="8">Terminal redirection hooks<BR/>für eventuelle Umleitungen</FONT>>];
}
/* stm-terminal cluster */
subgraph cluster43 {
fontsize=12;
label="stm-terminal.asm";
labelloc=b;
emit->serial_emit->serial_qemit[arrowsize=0.7,penwidth=0.1];
serial_emit[label=<serial_emit<BR/><FONT POINT-SIZE="8">Ausgabe Char via UART</FONT>>];
serial_qemit[label=<serial_qemit<BR/><FONT POINT-SIZE="8">Prüft TXE (Transmit Buffer Empty)</FONT>>];
}
{ rank=same; "type"; "emit"; "serial_emit"; "serial_qemit"; }
}
有向图G{
比率=自动;节点[fontsize=12];label=“boot”;newrank=true;
{
节点[形状=纯文本];
1->2[箭头大小=0.7,笔宽=0.1];
}
重置->uart_初始化[arrowsize=0.7,penwidth=0.1];
{rank=相同;“重置”;“1”}
{rank=same;“uart_init”;“2”}
/*终端钩簇*/
子图簇42{
fontsize=12;
label=“terminalhooks.asm”;
labelloc=b;
类型->发射[arrowsize=0.7,penwidth=0.1];
发射[标签=];
}
/*stm终端集群*/
子图簇43{
fontsize=12;
label=“stm terminal.asm”;
labelloc=b;
发射->串行发射->串行发射[arrowsize=0.7,penwidth=0.1];
串行_发射[标签=];
串行_qemit[标签=];
}
{rank=相同;“类型”;“发射”;“串行发射”;“串行发射”;}
}
我不知道为什么会发生这种情况,但添加
tailport=e
似乎可以解决这个问题:
emit->serial_emit->serial_qemit[tailport=e,arrowsize=0.7,penwidth=0.1];
# -----^-----
编辑:
出现导致问题的newrank
atr
digraph G {
newrank=true;
subgraph cluster42 {
0;
1;
0->1;
}
subgraph cluster43 {
2;
3;
1->2->3;
}
{ rank=same; 0; 1; 2; 3; }
}
制作:
但如果您删除:
newrank=true;
它产生:
编辑2:
对于本例,您可以使用rankdir=LR
并删除rank=same
:
digraph G {
rankdir=LR;
subgraph cluster42 {
0;
1;
0->1;
}
subgraph cluster43 {
2;
3;
1->2->3;
}
}
也许您也可以对复杂的图形执行同样的操作。出于某种原因,它适用于我的示例,尽管它会使箭头有点扭曲。但是,在添加tailport=e的其他几张图中,甚至添加了另一条线……你是对的,是newrank造成的。问题是我使用列组和集群来显示汇编文件的封装。。。如果没有newrank,函数周围的框将无法显示,这使得解释图形变得更加困难。