脚本绘图工具总结(转)

我们总是要写各种文档,演示各种PPT,写各种博客,其中都少不了需要作出一些图形,用于形象的展示出想要表达的信息。Windows自带的画图、Paint.Net,Visio、Rose等各种工具,只要有足够的耐心,并且对这些工具足够熟悉,都可以做出各种强大、各种类型的图形。

但是我作为程序员,非常不擅长这种用鼠标操作的作图工具,迫切需要一款用键盘敲出来的脚本绘图工具,就像写文档时,不喜欢用Word而是用Markdown一样。

经过了解,总算是找到了一些这样的工具,下面分别介绍一下。

graphviz

Graphviz 是一个可以创建图表的灵活应用程序,可以轻松实现脚本化。Graphviz主要使用Dot脚本语言来控制输出的图形,如下: 

digraph G {
subgraph cluster0 {
node [style=filled,color=white];
style=filled;
color=lightgrey;
a0 -> a1 -> a2 -> a3;
label = "process #1";
}
subgraph cluster1 {
node [style=filled];
b0 -> b1 -> b2 -> b3;
label = "process #2";
color=blue
}
start -> a0;
start -> b0;
a1 -> b3;
b2 -> a3;
a3 -> a0;
a3 -> end;
b3 -> end;
start [shape=Mdiamond];
end [shape=Msquare];
}

使用Graphviz执行此脚本,即可生成相应的图片:

相关资料

官方网站;http://www.graphviz.org/

使用 Graphviz 生成自动化系统图

PlantUML

PlantUML是一个开源项目,并支持快速绘制:

以简单并带指引性语言定义各种视图。 ( see PlantUML Language Reference Guide ).

官方示例如下:

@startuml

(*) --> if "Some Test" then

  -->[true] "activity 1"

  if "" then
    -> "activity 3" as a3
  else
    if "Other test" then
      -left-> "activity 5"
    else
      --> "activity 6"
    endif
  endif

else

  ->[false] "activity 2"

endif

a3 --> if "last test" then
  --> "activity 7"
else
  -> "activity 8"
endif

@enduml

生成的图片:

相关资料

官方网站:http://zh.plantuml.com/

UMLGraph

UMLGraph与PlantUML功能类似,支持类图、时序图、流程图等,功能上两个工具各有千秋,各位可自行发掘。

下面是官方示例:

# UML Distilled: Figure 5-2 p. 70

.PS

copy "sequence.pic";

boxwid = 1.3;

# Define the objects
pobject(X);
pobject(T);
pobject(C);
pobject(A1);
pobject(A2);

# Message sequences
cmessage(X,T,"a: Transaction");
active(T);
async();
cmessage(T,C,"a: TransCoord");
inactive(T);
active(C);
cmessage(C,A1,"a1: TransCheck");
active(A1);
cmessage(C,A2,"a2: TransCheck");
active(A2);
message(A1,C,"ok");
        sync();
        step();
        active(C);
        message(C,C,"all done?");
        inactive(C);
        async();
        step();
delete(A1);
inactive(C);
step();
message(A2,C,"ok");
active(C);
        sync();
        step();
        active(C);
        message(C,C,"all done?");
        inactive(C);
        async();
        step();
delete(A2);
message(C,T,"beValid");
inactive(C);
active(T);
step();

complete(T);
complete(C);

.PE

生成的图片:

相关资料

官方网站:http://www.umlgraph.org/

Mscgen

Mscgen工具主要用于处理和生成时序图,它实际是基于Graphviz的,将自己的脚本翻译成Graphviz的Dot脚本,然后使用Graphviz处理脚本,生成图片。虽然直接用Graphviz也可以写出同样的时序图脚本,但是相对于Mscgen来说,Graphviz要复杂的多。

下面是官方的示例:

# MSC for some fictional process
msc {
  hscale = "2";

  a,b,c;

  a->b [ label = "ab()" ] ;
  b->c [ label = "bc(TRUE)"];
  c=>c [ label = "process(1)" ];
  c=>c [ label = "process(2)" ];
  ...;
  c=>c [ label = "process(n)" ];
  c=>c [ label = "process(END)" ];
  a<<=c [ label = "callback()"];
  ---  [ label = "If more to run", ID="*" ];
  a->a [ label = "next()"];
  a->c [ label = "ac1()\nac2()"];
  b<-c [ label = "cb(TRUE)"];
  b->b [ label = "stalled(...)"];
  a<-b [ label = "ab() = FALSE"];
}

生成后的图片:

Mscgen工具要有另外一个功能,可以将脚本嵌入到Doxygen的注释里面,用Doxygen生成后的文档里面就会包含相应的时序图。

注释如下:

/** Sender class. Can be used to send a command to the server.
 *  The receiver will acknowledge the command by calling Ack().
 *  \msc
 *    Sender,Receiver;
 *    Sender->Receiver [label="Command()", URL="\ref Receiver::Command()"];
 *    Sender<-Receiver [label="Ack()", URL="\ref Ack()", ID="1"];
 *  \endmsc
 */
class Sender
{
  public:
    /** Acknowledgment from server */
    void Ack(bool ok);
};
/** Receiver class. Can be used to receive and execute commands.
 *  After execution of a command, the receiver will send an acknowledgment
 *  \msc
 *    Receiver,Sender;
 *    Receiver<-Sender [label="Command()", URL="\ref Command()"];
 *    Receiver->Sender [label="Ack()", URL="\ref Sender::Ack()", ID="1"];
 *  \endmsc
 */
class Receiver
{
  public:
    /** Executable a command on the server */
    void Command(int commandId);
};

相关资料

官方网站:http://www.mcternan.me.uk/mscgen/

Doxygen——msc

Msc-generator

Msc-generator是与Mscgen比较类似的工具,主要用于绘制时序图。Msc-generator从4.0版本开始,也支持Doxygen的调用了。

官方示例:

相关资料

官方网站:https://sites.google.com/site/mscgen2393/home

下载:http://sourceforge.net/projects/msc-generator/

Changing Message Sequence Chart (MSC) Tool for Doxygen

yUML

yUML是一款Web上的UML工具,同样,也是输入一些脚本,然后自动生成相应图形。

官方示例:

// Cool Class Diagram
[Customer|-forname:string;surname:string|doShiz()]<>-orders*>[Order]
[Order]++-0..*>[LineItem]
[Order]-[note:Aggregate root{bg:wheat}]

生成的图片:

yUML还支持外链的方式,下面是外链方式的示例:

<img src="http://yuml.me/diagram/scruffy/class/[note: You can stick notes on diagrams too!{bg:cornsilk}],[Customer]<>1-orders 0..*>[Order], [Order]++*-*>[LineItem], [Order]-1>[DeliveryMethod], [Order]*-*>[Product], [Category]<->[Product], [DeliveryMethod]^[National], [DeliveryMethod]^[International]" >

 

相关资料

官方网站:http://yuml.me/

官方示例:http://yuml.me/diagram/scruffy/class/samples

flowchart.js

Web发展的这么迅速,js的图形、图表库数不胜数,那么也一定会有脚本转换图形的库。flowchart.js就是其中一个还不错的js库,它直接生成SVG图形。

官方示例:

st=>start: Start|past:>http://www.google.com[blank]
e=>end: End|future:>http://www.google.com
op1=>operation: My Operation|past
op2=>operation: Stuff|current
sub1=>subroutine: My Subroutine|invalid
cond=>condition: Yes
or No?|approved:>http://www.google.com
c2=>condition: Good idea|rejected
io=>inputoutput: catch something...|future

st->op1(right)->cond
cond(yes, right)->c2
cond(no)->sub1(left)->op1
c2(yes)->io->e
c2(no)->op2->e

生成的SVG截图:

相关资料

官方网站:http://adrai.github.io/flowchart.js/

源码:https://github.com/adrai/flowchart.js

其他工具

类似的工具还有很多,就不详细的一一展示了,只做一下简单介绍:

总结

现在真是一个百花齐放,百家争鸣的时代,各种工具层出不穷,用脚本生成时序图、流程图的工具都有这么多。

虽然文中列举了这么的工具,但是我也只用过其中的一两个,大部分只是看了官网的介绍以及实例,并没有实际操作,如果有不对的地方,还望指正。

各位,放下鼠标,让你们的双手在键盘上舞动起来吧!

http://www.cnblogs.com/hbccdf/p/Script_drawing_tool_summary.html

 

时间: 2024-11-08 19:59:50

脚本绘图工具总结(转)的相关文章

《深入分析GCC 》——2.4 shell工具及graphviz绘图工具

2.4 shell工具及graphviz绘图工具 为了更好地分析GCC的运行过程,可以使用GCC支持的一些编译选项,例如,-fdump-tree-all.-fudmp-ipa-all.-fdump-rtl-all等,这样编译过程中将产生大量的中间运行结果信息,帮助用户理解GCC的处理细节.另外,用户也可以根据需要在源代码中增加适当的调试代码,从而输出一些运行时的中间信息.对这些输出结果进行高效分析,从中提取有价值的信息是GCC分析过程中非常关键的一种途径. 笔者认为,借助于Linux shell

Kst 2.0.5发布 数据查看和绘图工具

Kst 是一款快速实时的大型数据集查看和绘图工具,支持内置的数据分析功能. Kst 包含了多种强大的内置功能和可扩展的插件,支持键盘和鼠标的绘图操作,内置的绘图和http://www.aliyun.com/zixun/aggregation/14345.html">数据处理功能(如直方图.方程式和功率谱),内置过滤和曲线拟合功能,便利的命令行界面,非模态对话框的强大图形用户界面,几种常用数据格式的支持,扩展的注释对象类似于矢量图形应用程序,并以高品质的位图或矢量格式输出. Kst 2.0.

FW MX 2004教程(2):绘图工具

教程 和许多主流的图像处理软件一样,Fireworks的绘图工具主要都集中在"工具条"上.利用这些工具可以绘制出各种图形,并可为其设置相应的属性,如颜色.大小.位置等等. Fireworks MX 2004的"工具条"中增加了不少新工具,并与原有的工具在一起被编排为六个类别:选择区.位图.矢量.Web.颜色和视图区.有些工具按钮的右下角有一个小三角,说明这个工具包含有其它几种不同的工具,按住这个工具按钮不放就能显示其它的工具. 我们先来介绍位图区的绘图工具. 1.选

Flash 8 新功能使用技巧实战(4):绘图工具

技巧 上一节:Flash 8 新功能实例使用技巧(3):混合模式 第四部分:Flash 8 绘图工具的改进 Flash 8 的绘图工具也有了一些改进,虽然没有重大功能的改变,但是在细节处理上增添了许多方便我们绘制线条或图形的功能,在本节中,我们就来详细了解这些功能的改进.(下载本文的实例源文件, 9KB) 1.对象的绘制 在以前版本的Flash中,如果我们使用绘图工具绘制两个重叠但不互相结合到一起的对象时,需要分别将两个对象转换为元件,或者单独放在两个图层中才可以实现,否则两个对象会重叠联合在一

用Word 2003绘图工具制作树状结构图

近日,同事找到我说要在Word 2003中制作一个树状结构图,虽然常听说树状结构,却没有真正的制作过.但是想到Microsoft Office作为办公软件中的龙头老大,一定会把这个功能集成到软件中,经过一番摸索后,终于在Word中找到了制作树状结构的方法. 在"绘图"工具栏上,单击"插入组织结构图或其他图示",如图1所示,在接着出现的"图示库"中选择"用于显示层次关系"的第一种后,单击"确定"按钮后会出现一

flash8.0基础绘图工具

在计算机绘图领域中,根据成图原理和绘制方法的不同,分为矢量图和位图两种类型. 矢量图形是由一个个单独的点构成的,每一个点都有其各自的属性,如位置.颜色等.因此,矢量图与分辨率无关,对矢量图进行缩放时,图形对象仍保持原有的清晰度和光滑度,不会发生任何偏差,如图2-0-1所示是放大了16倍的矢量图效果. 图2-0-1 矢量图放大到16倍时依然清晰 位图图像是由象素点构成的,象素点的多少将决定位图图像的显示质量和文件大小,位图图像的分辨率越高,其显示越清晰,文件所占的空间也就越大.因此,位图图像的清晰

利用Shell配合绘图工具GnuPlot图形化监控网络流量

网络流量的监控工具有很多,如:Mrtg.Cacti.Zabbix等等,他们都有着各自的特点,不同的侧重,只为适合不同的应用场景的各种特殊需求.除了网络流量监控工具以外,还有Nagios这样的监控主机状态的工具,不仅能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.还能在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知等功能.除此之外Nagios简单地插件设计使得用户可以方便地扩展自己服务的检测方法.也正

10款最佳HTML5绘图工具

  HTML5无疑是当前最受宠的一项技术,每个web设计者都在热烈的讨论这种神奇的标记语言的兴起.HTML5是一种学起来毫不费力的标记语言,但它却能提供迷人的.富有艺术性的特征,帮助web设计人员完成他们的构思想象.HTML5对于一个设计人员来说能毫不费力的理解,轻松的掌握. 草绘和制图是设计工作者工作中一个重要的特征.HTML5将会这方面显露出不可限量的前途. 今天,我给web设计人员收集了几款最好的HTML5绘图或涂鸦工具.这些绘图工具大多数是用HTML5画布(Canvas)实现的,部分辅以

flash铅笔绘图工具教程

使用铅笔工具可以刻画出线条和其他形状,就像使用真正的铅笔一样.画出线条后,Flash会根据情况对它进行拉直或平滑处理.处理的模式依画线模式的不同而不同,Flash还可以以一定的角度来连接两线.本篇文章就为大家介绍Flash的铅笔绘图工具. "铅笔工具"如下图所示. 铅笔工具是用于绘制线条的工具.按住鼠标左键并在拖动的同时按下"Shift"键,可以绘制出水平或垂直的线条,如下图所示. 选择"铅笔工具"后,可以在工具属件选项中选择伸直.平滑和墨水三种