【发布时间】:2015-10-06 10:01:48
【问题描述】:
直到今天,我一直在使用 doxygen (+dot) 的“古代”版本 (1.4.7),它通常绘制垂直方向的图形,例如
.. 但是最近的一个(通过 Ubuntu 分发的 1.8.6),图表似乎是水平的,即
水平方向的问题在于,许多图形在窗口的右边缘都很好,因此您必须进行“2D”滚动才能查看数据。
我查看了 doxygen 网页,但看不到是否有选项告诉 dot 以垂直方向绘制它们。有谁知道这样的选项是否存在?
【问题讨论】:
直到今天,我一直在使用 doxygen (+dot) 的“古代”版本 (1.4.7),它通常绘制垂直方向的图形,例如
.. 但是最近的一个(通过 Ubuntu 分发的 1.8.6),图表似乎是水平的,即
水平方向的问题在于,许多图形在窗口的右边缘都很好,因此您必须进行“2D”滚动才能查看数据。
我查看了 doxygen 网页,但看不到是否有选项告诉 dot 以垂直方向绘制它们。有谁知道这样的选项是否存在?
【问题讨论】:
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?
【讨论】:
dot 本身制作了一个脚本包装器,它将真正的dot 称为dot -Grankdir="LR"——它似乎也能正常工作。
参考迈克尔的回答,
我写了一个小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)
【讨论】:
svg 文件的可能性(将很难,因为也完成了一些映射。请注意,对于较新的 doxygen 版本,关于呼叫/呼叫者的 LR / RL 方向有一个小的改进图表。