10

使用 doxygen 我想以某种方式生成状态图。doxygen 中是否有任何技巧可以帮助我们实现这一目标?

目前我只是使用预先格式化的文本,然后添加我自己的“自由文本图”,这很难维护并且绘制出来很耗时。

我使用 doxygen 生成的所有其他图表(即继承、关系等),但由于状态机不是“标准”c/c++ 构造(即 eech 设计器可以以不同的方式实现它们)我猜没有自动告诉 doxygen 为您执行此操作的方法。但是是否有某种图表元素的创建,您可以在每个状态旁边进行评论?也许像这个粗略的例子:

\section state Diagram
... description

\state state1...
\value1 returns state2
\value2 returns state1
int myState1Handler(){...}

\state state2...
\value1 returns state1
\value2 returns state2
int myState2Handler(){...}

编辑1:

或者,是否可以使用下面评论中建议的 graphviz 标记语言,并以某种方式将它们与 doxygen 输出集成?

4

3 回答 3

7

Doxygen(至少是最新版本)提供了\dotfile\dot特殊的命令来插入任意 .dot 文件或内联点图描述以使用 graphviz 呈现到生成的文档中。

您还可以考虑使用诸如SMC 之类的工具来管理您的状态机(通过建模、可视化表示和代码生成) 。

于 2013-10-15T23:49:38.953 回答
1

您可以使用点脚本语言在 doxygen 中添加自己的自定义图形,并将脚本放在\dot\enddot

我自己在我的 cpp 代码中测试了这个例子,它与 doxygen 配合得很好:

/*! 
   Class relations expressed via an inline dot graph:
   \dot
   digraph example {
       node [shape=record, fontname=Helvetica, fontsize=10];
       b [ label="class B" URL="\ref B"];
       c [ label="class C" URL="\ref C"];
       b -> c [ arrowhead="open", style="dashed" ];
   }
   \enddot
   Note that the classes in the above graph are clickable
   (in the HTML output).
 */

void main()
{
  //write some code here...
}

结果:

doxygen 输出与您自己的自定义点图

要查看更多点图脚本示例,请参阅以下来源:

  1. https://edotor.net/ - 这实际上向您展示了示例,您可以更改它们并立即在右侧查看结果。
  2. http://msc-generator.sourceforge.net/help/5.4/Graph-Language-Tutorial.html - 很好的例子
  3. https://graphviz.org/documentation/ - 点语言的全部文档,供那些想要深入了解的人使用。
于 2022-01-27T17:11:10.273 回答
-1

我想将植物添加到这个问题中。这是一个基于文本的 uml 图生成器。它的伟大之处在于您可以生成运行时输出(状态图、序列图等)。

例如,每次进行状态转换时,都会将 Plantuml 格式的行打印到文件中。当程序终止时(或在任何时候真正终止),您在输出文件上运行 plantuml(可能需要添加开始/结束标签 - 微不足道),您会得到一个 uml 图!...我已经在 3 个不同的项目中使用了它- 主要用于序列图。

好的,所以这不是真正的“离线”设计文档,在某些方面它更好,因为您可以获得自文档代码,因为生成的图表正是代码正在执行的操作。下面是一个非常简单的 Plantuml 序列图示例:

@startuml
component1 -> component2 : helloMsg
component2 -> component1 : replyMsg
@enduml

如果这是您的程序的输出,那么:

java -jar <path-to-plantuml.jar>/plantuml.jar myoutput.log

这会生成:myoutput.png(图像)。Plantuml.jar 可以从 Plantuml 网站免费下载...免费且简单!

于 2018-03-26T08:14:53.457 回答