Postscript(PS) のソースを生で編集するのはけっこう大変です。 そこで適当なスクリプトから PS のコードを生成することで, 楽に描画させることを考えてみましょう。
[[100,50],[120,70],[150,20],[60,90]]
100 100 200 250 exch 2 copy 6 4 roll exch 2 copy 8 1 roll m l l l closepath stroke
100 170 30 0 360 arc stroke
以上まとめて列挙して,簡単な機能を付けておこう。
initialize(file)
PS ファイルのインスタンス @ps を生成する。
いくつかのデフォルトを設定する。
close
ファイルが開いていたら閉じる。
put_header
ヘッダと BoundingBox の設定を行い,
使用回数の多い下の命令を短縮形で登録する(生成するPSファイルを軽くできる)。
moveto: m; lineto: l;
rmoveto: rm; rlineto: rl;
stroke: s; setlinewidth: lw;
setrgbcolor: col;
draw_path
配列で与えられたデータを線で結ぶ。
オプション変数で末端を結んで閉じる,塗りつぶすを指定する。
draw_rect
対角線上の2点の座標を受け取って,矩形を描く
配列で与えられたデータを線で結ぶ。
オプション変数で閉じる,塗りつぶすを指定する。
draw_cirlce
中心の座標,半径を与えて円を描く。
オプション変数で閉じる,塗りつぶすを指定する。
draw_polygon
正n角形を描く
draw_curve
3次のベジエ曲線を描く。ベジエの PS 命令は次の通り。
x1 y1 x2 y2 x3 y3 curveto append Bezier cubic section
draw_arrow
矢印を描く: Blue Book に書いてあるプログラムを使う。
set_font
フォント種とサイズを指定する。ただし直接フォント名を指定するのではなく,
略称を使う。
roman, bold, italic, mincho, gothic, その他
put_string
決められた位置に文字列を出力する。
set_linewidth
線幅を設定する
set_color
色を設定する
円,多角形,パスの描画では,塗りつぶしするかどうかをオプションで与えられる ような仕様になっていると具合がよい。具体的にはつぎのように指定できるように したいのである。
draw_circle(100,200,20) #円周のみ draw_circle(100,200,20,"fill") #塗りつぶしRuby リファレンスマニュアルの「クラス/メソッド定義」の項にその記載がある。