【问题标题】:Doxygen: Is it possible to control the orientation of dependency graphs?Doxygen:是否可以控制依赖图的方向?
【发布时间】:2015-10-06 10:01:48
【问题描述】:

直到今天,我一直在使用 doxygen (+dot) 的“古代”版本 (1.4.7),它通常绘制垂直方向的图形,例如

.. 但是最近的一个(通过 Ubuntu 分发的 1.8.6),图表似乎是水平的,即

水平方向的问题在于,许多图形在窗口的右边缘都很好,因此您必须进行“2D”滚动才能查看数据。

我查看了 doxygen 网页,但看不到是否有选项告诉 dot 以垂直方向绘制它们。有谁知道这样的选项是否存在?

【问题讨论】:

    标签: doxygen dot


    【解决方案1】:

    2014 年有一个类似的问题,我重复回答: Flip doxygen's graphs from top-to-bottom orientation to left-to-right

    在自己寻找相同的东西但一无所获之后,我能提供的最好的方法是使用图形属性 rankdir 进行破解。

    第 1 步)确保 Doxygen 保留点文件。将 DOT_CLEANUP=NO 放入您的配置文件中。

    第 2 步)找到 Doxygen 生成的点文件。应采用 *__incl.dot 的形式。对于以下步骤,我将此文件称为<source>.dot

    步骤 3a) 假设 dot 文件没有明确指定 rankdir(通常默认为 TB"),使用此命令重新生成输出。

    dot -Grankdir="LR" -Tpng -o<source>.png -Tcmapx -o<source>.map <source>.dot 
    

    步骤 3b) 如果出于某种原因在 dot 文件中指定了 rankdir,请进入该文件并添加 rankdir="LR"(默认情况下它们是 rankdir 设置为 "TB")。

    digraph "AppMain"
    {
      rankdir="LR";
    ...
    

    然后使用以下命令重新生成输出:

    dot -Tpng -o<source>.png -Tcmapx -o<source>.map <source>.dot 
    

    您需要在每次运行 Doxygen 后重新执行此操作。批处理文件可能很方便,特别是如果您想处理所有文件。对于步骤 3b,批量替换文本不在此答案的范围内:)。但这里似乎是一个很好的答案:

    How can you find and replace text in a file using the Windows command-line environment?

    【讨论】:

    • 谢谢。当我使用 GNU make 在 Linux 中构建所有东西时,运行“类似批处理”的东西应该不是问题。
    • 谢谢。我为dot 本身制作了一个脚本包装器,它将真正的dot 称为dot -Grankdir="LR"——它似乎也能正常工作。
    【解决方案2】:

    参考迈克尔的回答, 我写了一个小python3脚本来后处理 点图,使它们成为 LR。 这对我来说非常方便,也许对某人有用。 调整输出路径"../../doxygen_output" 指向你的 doxygen 输出, 然后只需使用当前工作目录 = 脚本路径运行脚本。

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    """ This script postprocesses a doxygen output to change the dot graphs having rankdir="LR"."""
    import os
    
    for path,dirs,files in os.walk("../../doxygen_output"):
        for f in files:
            if len(f) > 5: # prevent index out of range error
                if f[-4:] == ".dot":
                    source = os.path.join(path,f.replace(".dot",""))
                    cmdTpl = 'dot -Grankdir="LR" -Tpng -o<source>.png -Tcmapx -o<source>.map <source>.dot'
                    cmd = cmdTpl.replace("<source>",source)
                    os.system(cmd)
    
    

    【讨论】:

    • 您使用的是哪个 doxygen 版本?请注意,您没有考虑到 svg 文件的可能性(将很难,因为也完成了一些映射。请注意,对于较新的 doxygen 版本,关于呼叫/呼叫者的 LR / RL 方向有一个小的改进图表。
    • 我查看了在线文档,但没有找到如何“覆盖”rankdir 或如何控制图形方向。我假设在线文档反映了最新版本。无论如何,我的脚本适用于旧版本,因此,至少,它可能对不使用最新版本的人有用,无论出于何种原因。作为一个例子,我用它来分析陈旧的大型嵌入式 c 项目的“架构”,以用于维护目的。对我来说,事情必须尽快完成,因为我和许多其他人一样,需要完成大量工作。
    • 从外部无法控制图形的方向。我的评论是针对用于呼叫/呼叫者图表的默认箭头方向。
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2018-05-03
    相关资源
    最近更新 更多