2010年2月22日月曜日

cl-dotでお絵描き

cl-dotはGraphvizというツール群を使ってグラフを書くためのCommonLispライブラリ。日本語は出力できないらしい。

デバイスの階層っぽい図を書いてみた。クラス階層なんかも同じ要領で書けそう。

(asdf:oos 'asdf:load-op :cl-dot)

;;;デバイスの階層を表現
(defparameter *resources*
`("Device"
("CharacterDevice"
("Keyboard")
("Mouse"))
("BlockDevice"
("HardDisk")
("FloppyDisk"))))

(defmethod cl-dot:graph-object-node ((graph (eql 'resources)) (object list))
(make-instance 'cl-dot:node
:attributes
(list :label (first object)
:shape :box
:fontname "Arial"
;; :style :filled
;; :fillcolor "#ffffff"
:color :black)))

(defmethod cl-dot:graph-object-points-to ((graph (eql 'resources)) (object list))
(cdr object))

(defun run (path &key (format :png))
(let ((graph
(cl-dot:generate-graph-from-roots 'resources (list *resources*))))
(cl-dot:dot-graph graph path :format format)))

;;(run "test.png")

0 件のコメント:

コメントを投稿