Chinaunix首页 | 论坛 | 博客
  • 博客访问: 960045
  • 博文数量: 134
  • 博客积分: 7443
  • 博客等级: 少将
  • 技术积分: 1411
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 20:18
文章分类

全部博文(134)

文章存档

2012年(7)

2011年(29)

2010年(16)

2009年(6)

2008年(18)

2007年(58)

分类: 项目管理

2010-04-11 08:06:38

介绍sml4asy 是Asymptote(简称asy)的一个扩展模块,sml4asy的目标: 能够使用asy语言,快速的绘制UML图。sml的全称是Simple Model Languate。保持简单性,是sml的重要原则。最开始,我就有一个想法,绘制一个UML图,所使用的代码行数不能超过UML图中重要元素的个数。

动机
  1. 想在latex文档中插入UML图。因为asy代码能够嵌入到latex文档中,然后编译生成包含UML图的pdf文档。但直接使用asy绘制UML太麻烦了,有必要开发一个扩展模块。
  2. 许多的所见即所得的绘制UML图的工具不够理想,太强调规范的不够灵活,太灵活的又很容易画出不规范的UML图。也许实现一个完美的WYSIWYG的UML工具目标太大了,为什么尝试一下使用编码的方式绘制?
  3. 我想通过开发这个模块,掌握Asympote语言。最好的学习是使用嘛。

sml4asy链接项目主页:
最新版本下载:
SVN获取最新代码: svn checkout http://sml4asy.googlecode.com/svn/trunk/ sml4asy-read-only

Asympote相关链接Asympote的主页:

因为Asympte要使用latex,获取一个好用的asympte环境的最直接方式,是得到一个tex发布套装。我在Debian Linux下使用的是Texlive2009(也支持windows), Texlive的主页还可以使用针对windows平台的Miktex:   还有包含更好中文支持的Ctex套装(基于Miktex)

Ctex论坛是是获取更多信息和寻求帮助的好地方: 演示 用例图1 源代码:


import sml;

symbol a = mkactor("Programer");
symbol c = mkcase("Design In UML");
symbol c1 = mkcase("Code in asy");
symbol c2 = mkcase("Complie asy");

dock(0.3*AVG,MID,-45,a,c,hdock(c1,c2)).add();

(a--c).draw();
(c--c1).style(dep).ml("include").draw();
(c--c2).style(dep).ml("include").draw();


输出结果:说明:实际的输出结果为eps或者pdf格式的矢量图,这里使用ImageMagick的convert命令转换成了jpeg格式。

显示组合设计模式的一个类图 源代码:

import sml;

symbol data = mkclass(mkcname("Record","type"));
symbol dh = mkclass(mkcname("DataHandler","interface",true),
                   blank,
                   mkopers("+PushData(fd:Record)"));
symbol sdh = mkclass("StoreHandler");
symbol chd = mkclass("CheckingHandler");
symbol comdh = mkclass(mkcname("CompositeHandler"),
                       "-hdset: DataHandler[]",
                        mkopers("+PushData(fd:Record)"));
symbol sdh1 = mkclass("DataBaseImp");
symbol sdh2 = mkclass("CsvFileImp");


vdock(1.5*AVG,
      LEFT,
      hdock(1.2*AVG,MID,data,dh),
      hdock(0.3*AVG,space*1cm,sdh,chd,comdh),
      hdock(0.2AVG,sdh1,sdh2)).add();

(dh--data).style(dep).ml("use").draw();
(dh--pyw(-2cm)--hv--(new symbol[]{sdh,chd,comdh})).style(rea).draw();
(sdh--pyw(-2cm)--hv--(new symbol[]{sdh1,sdh2})).style(gen).draw();
(comdh--pxw(1cm)--vh--dh).style(com).sl("1").dl("*").draw();

输出结果

有嵌套结构的包图 源代码:

import sml;

symbol ld = mkpack(hdock(4bp,
                         mkbox("plead"),
                         mkbox("mlead"),
                         mkbox("nlead")),"lead");

symbol ln = mknote("A smart way to specify line between symbols, "
                   "I like this ideal");

symbol paks= mkpack(hdock(4bp,TOE,
                           mkpack(mkpack("actor"),
                                  "symbol"),
                           ld,
                           mkpack("utility")),
                     "sml");

vdock(0.5*AVG,RIGHT,ln,paks).add();

(ln--ld).style(dashline).draw();

输出结果:

有托球结构的组件图 源代码

import sml;

symbol scheduler = mkcom(":Scheduler");
symbol im = mkiball("MakeReservations",E);
symbol planner = mkcom(":Planner");
symbol ip =mkiball("UpdatePlans",N);
symbol gui = mkcom(":TripGUI");

vdock(LEFT,hdock(MID,scheduler,im),
      hdock(MID,space*1.5cm,planner,ip,gui)).add();

(scheduler--im).draw();
(planner--hv--im).style(req_i).draw();
(planner--ip).draw();
(gui--ip).style(req_i).draw();


输出结果
阅读(3333) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

cuichaox2012-03-06 00:44:44

夏冰软件: 你做的太棒了.....
谢谢

夏冰软件2012-03-05 14:26:52

你做的太棒了

chinaunix网友2010-12-02 13:56:03

崔兄啊,支持下 现在只记得那句话,做程序员要有个好屁股

chinaunix网友2010-04-22 10:34:44

太有意思了。 用编程来画图

cuichaox2010-04-11 09:33:31

TODO: 按照如下顺序 1. 使用一个全新的创意实现对序列图的支持(之前创意被否定)。 2. 编写一个教程和一个手册。 3. 支持更多的布局策略 4. 实现对PAD图的支持 - 老喜欢这种图啦,就是没有发现支持的工具。