橋本 Hashimoto   Baku

橋本 Hashimoto   Baku

Glisp Help: はじめてのスケッチ (Scratchpad)

This page is a personal scratchpad.

一番簡単なスケッチの例です。

(circle [50 50] 40)

Open in Editor

関数 circle は、丸のパスを生成する関数です。100 100 は丸の中心、40は半径となります。Glisp のキャンバスは右上が原点です。

しかし、まだ塗りや線が設定されていないので、点線で表示されています。これをトマト色に塗りつぶしてみます。

(style (fill "tomato")
 (circle [50 50] 40))

Open in Editor

style はスタイルを適用する関数です。 1 つめの引数 (fill "red")というスタイルを 2 つめ以降の引数、この場合は (circle [50 50] 40) というパスに適用しています。ちなみにfillもまた、塗りのスタイル情報を返す関数です。

ついでに線色もつけたい場合は、 style を入れ子にします。

(style (fill "RoyalBlue")
 (style (stroke "tomato" 10)
  (circle [50 50] 40)))

Open in Editor

スタイルは外側から順に描画されます。この例では、丸がまずトマト色で塗られてから太さ 10 の青い線で縁取られます。この表記は、style関数の第 2 引数をベクタにすることで、このように縮めて書くこともできます。

(style [(fill "tomato") (stroke "RoyalBlue" 10)]
 (circle [50 50] 40))

Open in Editor

複数のパスにまとめてスタイルを適用することもできます。

(style (stroke "turquoise" 6)
 (circle [50 50] 40)
 (rect [20 40 60 20]))

Open in Editor

rect は右上の位置と幅・高さから四角形のパスを返す関数です。

トランスフォーム

transform関数を使って、グループ全体の位置や角度といったトランスフォーム値を設定することができます。

(transform (translate [30 30])
 (style (fill "gold")
  (rect [0 0 60 40])))

Open in Editor

translate関数は、平行移動のトランスフォーム値(実体は行列)を返します。こうしたトランスフォーム値を返す関数は他にscalerotateなどがありますが、これらはmat2d/*関数で組み合わせることが出来ます。

(transform (mat2d/* (translate [20 10])
                    (rotate (deg 20))
                    (scale [1.5 1]))
 (style (fill "gold")
  (rect [0 0 50 40])))

Open in Editor

rotate はラジアン角を引数に取るので、deg関数で「度」からラジアンへの変換をしています。

細かい話はGlisp Help:トランスフォームを参照してください。