DOT用法小结

DoxyGEN 的使用与Graphviz 的使用

以下内容摘自维基百科,地址http://zh.wikipedia.org/wiki/Doxygen。 
Doxygen 是一个 C++, C, Java, Objective-C、Python、IDL (CORBA 和 Microsoft flavors)、Fortran、VHDL、PHP、C#和D语言的文档生成器。可以运行在大多数类Unix系统,以及Mac OS X操作系统和Microsoft Windows 。 初始版本的Doxygen借鉴了一些老版本DOC++的代码;随后,Doxygen源代码由Dimitri van Heesch重写。
Doxygen是一个编写软件参考文档的工具。 该文档是直接写在代码中,因此比较容易保持更新。 Doxygen 可以交叉引用文档和代码,使文件的读者可以很容易地引用实际的代码。
KDE 使用Doxygen作为其部分文档且 KDevelop 具有内置的支持。 Doxygen的发布遵守GNU General Public License,并且是自由软件。
需要注意的是在使用doxygen的时候,会自动生成一些类图,以及函数调用关系图,如果要生成这些图,还需要另外一个很牛叉的开源库Graphviz。Graphviz (Graph Visualization Software的缩写)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。它也提供了供其它软件使用的库。Graphviz是一个自由软件,其授权为Common Public License。其Mac版本曾经获得2004年的苹果设计奖。更多关于Graphviz的介绍参考其官方网站:http://www.graphviz.org/

doxgen使用首先打开程序的doxfile文件,

然后进行编译

通过查看show HTML既可以实现查看生成的帮助文档

利用Graphviz 画结构图 转载自http://www.cnblogs.com/sld666666/archive/2010/06/25/1765510.html

1. Graphviz介绍

    Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具。

它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”。

Graphviz提供了dot语言来编写绘图脚本。什么?!画个图也需要一个语言!!

不要急,dot语言是非常简单地,只要看了下面几个列子,就能使用了。

 

2. Graphviz的几个例子

    下面的几个例子都来自于官方文档。详情请见:Graphviz官网.

2.1 Fancy graph

 digraph G{
size = "<span style="COLOR: #8b0000">4, 4</span>";<span style="COLOR: #008000">//图片大小</span>
main[shape=box];<span style="COLOR: #008000">/*形状*/</span>

main-&gt;parse;
parse-&gt;execute;

main-&gt;init[style = dotted];<span style="COLOR: #008000">//虚线</span>

main-&gt;cleanup;

execute-&gt;{make_string; <span style="COLOR: #0000ff">printf</span>}<span style="COLOR: #008000">//连接两个</span>

init-&gt;make_string;

edge[color = red]; <span style="COLOR: #008000">// 连接线的颜色</span>

main-&gt;<span style="COLOR: #0000ff">printf</span>[style=bold, label="<span style="COLOR: #8b0000">100 times</span>"];<span style="COLOR: #008000">//线的 label</span>

make_string[label = "<span style="COLOR: #8b0000">make a\nstring</span>"]<span style="COLOR: #008000">// \n, 这个node的label,注意和上一行的区别</span>

node[shape = box, style = filled, color = "<span style="COLOR: #8b0000">.7.3 1.0</span>"];<span style="COLOR: #008000">//一个node的属性</span>

execute-&gt;compare;

}

从上面的代码可以看出,dot语言非常简单,就是一个纯描述性的语言而已。

大家可以把上面的代码和下图中的连接对应起来看。

                                       1

                                              <图1. Fancy graph>

 

2.2 Polygon graph

 digraph G{
    size = "4, 4"
    a->b->c;
    b->d;
a[shape = polygon, sides = 5, peripheries=3, color = lightblue, style = filled];
<span style="COLOR: #008000">//我的形状是多边形,有五条边,3条边框, 颜色的淡蓝色, 样式为填充</span>
c[shape = polygon, sides = 4, skew= 0.4, lable = "<span style="COLOR: #8b0000">hello world</span>"];
<span style="COLOR: #008000">//我的形状是4变形, 角的弯曲度0.4, 里面的内容为"hello world"</span>
d[shape = invtriange];
<span style="COLOR: #008000">//我是三角形</span>
e[shape = polygon, side = 4, distortion = .7];
<span style="COLOR: #008000">//我是梯形啊</span>

}

 

 

下面是对应的图片:

                                          polygon

                                       <图2. Polygon graph>

2.3 连接点的方向

     我们可以用“n”,”ne”,”e”,””se”, “sw”,”w”,”nw”,

分别表示冲哪一个方向连接这个节点(图形)-“north, northeast……”

如:

 digraph G{
    //b->c[tailport = se];
    b->c:se;
}

 

 

                                         se

                                           <图3. Se graph>

 

2.4 数据结构图

    数据结构图是我们很容易用到的一类图形,一个简单地数据结构图代码如下:

 digraph g{
    node [shape = record,height=.1//我定义了我下面的样式;  
     node0[label = "<f0> |<f1> G|<f2> "];  
    //我是一个node,我有三个属性,第二个的名字为G,其他两个为空
        node1[label = "<f0> |<f1> E|<f2> "];  
       node2[label = "<f0> |<f1> B|<f2> "];  
       node3[label = "<f0> |<f1> F|<f2> "];  
       node4[label = "<f0> |<f1> R|<f2> "];  
       node5[label = "<f0> |<f1> H|<f2> "];  
       node6[label = "<f0> |<f1> Y|<f2> "];  
       node7[label = "<f0> |<f1> A|<f2> "];  
       node8[label = "<f0> |<f1> C|<f2> "];  
"<span style="COLOR: #8b0000">node0</span>": f2-&gt;"<span style="COLOR: #8b0000">node4</span>":f1;
<span style="COLOR: #008000">//我的第三个属性连到node4的第二个属性</span>
"<span style="COLOR: #8b0000">node0</span>": f0-&gt;"<span style="COLOR: #8b0000">node1</span>":f1;
"<span style="COLOR: #8b0000">node1</span>": f0-&gt;"<span style="COLOR: #8b0000">node2</span>":f1;
"<span style="COLOR: #8b0000">node1</span>": f2-&gt;"<span style="COLOR: #8b0000">node3</span>":f1;
"<span style="COLOR: #8b0000">node2</span>": f2-&gt;"<span style="COLOR: #8b0000">node8</span>":f1;
"<span style="COLOR: #8b0000">node2</span>": f0-&gt;"<span style="COLOR: #8b0000">node7</span>":f1;
"<span style="COLOR: #8b0000">node4</span>": f2-&gt;"<span style="COLOR: #8b0000">node6</span>":f1;
"<span style="COLOR: #8b0000">node4</span>": f0-&gt;"<span style="COLOR: #8b0000">node5</span>":f1;

}

 

 

                                         data

                                               <图4. Data graph>

2.5 Hash table graph

 digraph g {
    nodesep = .05;
    rankdir = LR;
node[shape = record, width = .1, height = .1];

node0[label = "<span style="COLOR: #8b0000">&lt;f0&gt; |&lt;f1&gt; |&lt;f2&gt; |&lt;f3&gt; |&lt;f4&gt; |&lt;f5&gt; |&lt;f6&gt; |</span>", height = 2.5];
<span style="COLOR: #008000">//我是一个节点,我有7个属性</span>
node [width = 1.5];
node1[label = "<span style="COLOR: #8b0000">{&lt;n&gt; n14 | 719 |&lt;p&gt;}</span>"];
<span style="COLOR: #008000">//我还是一个节点, 也定义了三个属性</span>
node2[label = "<span style="COLOR: #8b0000">{&lt;n&gt; a1 | 719 |&lt;p&gt;}</span>"];
node3[label = "<span style="COLOR: #8b0000">{&lt;n&gt; i9 | 512 |&lt;p&gt;}</span>"];
node4[label = "<span style="COLOR: #8b0000">{&lt;n&gt; e5 | 632 |&lt;p&gt;}</span>"];
node5[label = "<span style="COLOR: #8b0000">{&lt;n&gt; t20 | 959 |&lt;p&gt;}</span>"];
node6[label = "<span style="COLOR: #8b0000">{&lt;n&gt; o15 | 794 |&lt;p&gt;}</span>"];
node7[label = "<span style="COLOR: #8b0000">{&lt;n&gt; s19 | 659 |&lt;p&gt;}</span>"];

<span style="COLOR: #008000">//好了,我开始连接了</span>
node0:f0-&gt;node1:n;
node0:f1-&gt;node2:n;
node0:f2-&gt;node3:n;
node0:f5-&gt;node4:n;
node0:f6-&gt;node5:n;
node2:p-&gt;node6:n;
node4:p-&gt;node7:n;

}

 

这是一个简单地哈希表,如下图所示

                                             Hash

                                                          <图5. Hash table graph>

 

 

2.6 Process grahp

下面画一个轻量级的流程图。

 digraph g {
    subgraph cluster0 {
        //我是一个子图,subgraph定义了我,
        node[style = filled, color = white];
        //我之内的节点都是这种样式
        style = filled;
        //我的样式是填充
        color = lightgrey;
        //我的颜色
        a0->a1->a2->a3;
        label = "prcess #1"
        //我的标题
    }
subgraph cluster1 {
    <span style="COLOR: #008000">//我也是一个子图</span>
    node[style = filled];
    b0-&gt;b1-&gt;b2-&gt;b3;
    label = "<span style="COLOR: #8b0000">process #2</span>";
    color = blue;
}

<span style="COLOR: #008000">//定义完毕之后,下面还是连接了</span>
start-&gt;a0;
start-&gt;b0;
a1-&gt;b3;
b2-&gt;a3;
a3-&gt;end;
b3-&gt;end;

start[shape=Mdiamond];
end[shape=Msquare];

}

 

 

 

结果输出图形如下:

                                             Process

                                                <图6. Hash table graph>

 

3. 小结

    相信这几个列子下来,各位看官对graphviz也有了了解了吧,我个人用了一遍下来发现太爽了。

而对于dot语言,作为一个描述性的语言就非常简单了, 只要有编程基础的人,模仿几个列子下来

应该就能应用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值