Cluster computing 点工具双箭头

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

我最近一直在使用dot创建一个相当复杂的汇编程序的流图和调用图。总的来说,这一切都很好,只是有点打嗝。有时,在从簇内的一个节点到另一个簇中的另一个节点绘制直线时,该直线会以某种方式加倍

我已经添加了一个精简版的问题代码和一个点输出图像

谢谢

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,函数周围的框将无法显示,这使得解释图形变得更加困难。