【问题标题】:dot tool doubles arrows点工具加倍箭头
【发布时间】:2016-12-06 09:05:50
【问题描述】:

我最近一直在使用 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"; } 
}

dot graph

【问题讨论】:

    标签: cluster-computing graphviz dot subgraph


    【解决方案1】:

    我不知道为什么会这样,但添加 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,函数周围的框不会显示这使得解释图形变得更加困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2017-02-05
    • 2017-06-16
    • 1970-01-01
    • 2016-03-16
    相关资源
    最近更新 更多