2011年05月20日

blockdiagがとても楽しい

みんなもblockdiagでUMLを書こう!
blockdiag以外の派生もいくつかあります.actdiagとかネットワーク図に対応したものとか.

でもblockdiagだけでもオブジェクトの形が複数選択できて,色付けできて,矢印の種類や方向も変えられるので色々遊べます.

使ってて楽しいツールの存在って本当に嬉しい.

PlantUMLもGUI用ソフトもあったりでいいんだけど日本語が使えないのが残念.

もともとこれらに挑戦してたのはsphinxに埋め込みたいという理由があったのだけど,実はまだうまく動いていない.でも単体でもPDFやsvgファイル,画像ファイルと出力できるのでこれでも十分.画像ファイルは文字の解像度が悪いのが難点かな…

PDFで作成することにしてるので回避手段はあるから気にしない.さて,インストールについて,つまずいた点をメモする.


blockdiagを使ってみようと思ってインストールしたのですがエラーが出たので
その対応をメモ.
blockdiag.
http://tk0miya.bitbucket.org/blockdiag/build/html/introduction.html#by-easy-install


上記でダウンロード・インストール方法,使い方が書かれています.


blockdiagを使うメリット.

・テキストの追加・削除で図が変更できるので修正が簡単.
(図の挿入は,整形に非常に気を使う.)

・テキスト管理になるのでバージョン管理もできる.
が挙げられる.


↓このプレゼン資料に共感した方は試してみて!






私を今日悩ませたエラーくん.


-------------------------------------
% blockdiag.exe test.diag

Traceback (most recent call last):
File "C:\Python27\Scripts\blockdiag-script.py", line 8, in
load_entry_point('blockdiag==0.8.0', 'console_scripts', 'blockdiag')()
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\command.py", line 133, in main
draw.draw()
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\DiagramDraw.py", line 110, in draw
self.node(node, **kwargs)
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\DiagramDraw.py", line 245, in node
font=self.font, badgeFill=self.badgeFill)
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\noderenderer\__init__.py", line 54, in render
self.render_label(drawer, **kwargs)
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\noderenderer\__init__.py", line 68, in render_label
lineSpacing=self.metrix.lineSpacing)
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\ImageDrawEx.py", line 251, in textarea
lines = TextFolder(box, string, scale=self.scale_ratio, **kwargs)
File "C:\Python27\lib\site-packages\blockdiag-0.8.0-py2.7.egg\blockdiag\utils\PILTextFolder.py", line 14, in __init__
self.ttfont = ImageFont.truetype(font, fontsize)
File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 218, in truetype
return FreeTypeFont(filename, size, index, encoding)
File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 134, in __init__
self.font = core.getfont(file, size, index, encoding)
File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 34, in __getattr__
raise ImportError("The _imagingft C module is not installed")
ImportError: The _imagingft C module is not installed

-------------------------------------

と言われてしまう.
でもイメージモジュール Python Imaging Library 1.1.5 or later.はインストールしてるよ.

% python
>> import PIL
>>



PILがインストールされていないと,"import PIL"を実行した時点でエラーになります.それが出ないのでインストールはされている.

調べると,エラーに書いてあるとおり,自分のインストールしているPILはlibfreetype なしでコンパイルされていることが原因らしい.

なので,libfreetypeを含んでコンパイルしたものをインストールする必要があり,そのWindows向けインストーラは以下に置いてあります.

http://www.lfd.uci.edu/~gohlke/pythonlibs/


他にもここにはPython Cモジュールがたくさんあります.これで無事ブロック図が作成された.

その他オプション:
参考:"blockdiag でいろいろ書いてみる ? Stop Making Sense"
http://99blues.dyndns.org/blog/2010/12/blockdiag-%E3%81%A7%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%82%8B/


'--antialias'オプションを付けると、文字のギザギザがなくなり綺麗になります。

$ blockdiag --antialias bom.txt




改行する時は '\n' を挿入します。


'--' で無向グラフ(矢印なしの線) になります。
有効グラフ(矢印あり)の場合、'->', '<-', '<->' が使えます。



↓こんな感じで書くと,色で括られます.

group{
color = aquamarine;
submarine; submarine1; submarine2;
}


-T オプションでSVG/PDF出力.

- SVG
% blockdiag -Tsvg sample.diag


- PDF
% blockdiag -Tpdf sample.diag



"//"以降の同じ行内はコメント扱い.

posted by maplewine at 20:00| Comment(0) | TrackBack(0) | Computer | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック