2015-01-08-01-SVGのUMLツールを - 5 - project-enigma

2015-01-08-01-SVGのUMLツールを - 5

>> Site top >> weblog >> 月別アーカイブ >> 2015年01月のlog >> 2015-01-08-01-SVGのUMLツールを - 5

最終更新日付:2015/01/08 19:00:00


SVGのUMLツールを - 5

2015 年 01 月 08 日

色々考えているうちに良くわからなくなってきたので、具体的なイメージを掴みに行こう。

とりあえず、複合図形の定義を記述するイメージは以下のような感じだ‥‥‥というか、もう完全に Common Lisp でマクロをがっつり書く気になっているな。

(define-structure uml-class (class-name x y)
    (rectangle :x x :y y
               :align :center :valign :center
               :w (+ 20 (width-of  :name))
               :h (+ 20 (height-of :name)))
    (text class-name :key :name :x x :y y
                     :align :center :valign :center))

 

まだまだタリナイけれども、ひとまずはこのあたりから始めるとしよう。define-structure は複合図形を定義し、第一パラメータのシンボルが指す名前に関連付ける。当然これはマクロだ。どんな展開になるのかはまだ問題にしない。それを問題にする頃には、上記のイメージなど見る影もなく変わっているだろうから。

それはさておき、続く(この例では)3要素のリストは、複合図形に与えるパラメータだ。ここではとりあえず、クラス名と描画する位置を指定するものとしてみた。これらのパラメータはそれより下のコードで使用できる。

それ以降にある rectangle とか text というのは、基本図形の描画指定だ。基本図形それぞれに対して様々な情報をキーワードパラメータとして与える感じになる。rectangle の中に登場する width-of や height-of というのは、同じ複合図形内の他の要素の情報を参照するものだ。これを可能にするために、text では :key パラメータで名前を与えている。

乱暴な説明になってしまうが、上記のサンプルは概ね以下のことをする。

  1. 座標 (x, y) を中心として、テキスト class-name の描画サイズ(幅と高さ)にそれぞれ +20 した矩形を描画する。
  2. 同じく座標 (x, y) を中心として、テキスト class-name を描画する。

‥‥‥ひとまず最初のイメージとしてはこんな感じだろうか。現時点でも、「あ、これじゃマズいな」と思うところは沢山ある。少しずつ現実的なものにしていこうか。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : CL-SVG

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.