Postscript/Ruby


Postscript(PS) のソースを生で編集するのはけっこう大変です。 そこで適当なスクリプトから PS のコードを生成することで, 楽に描画させることを考えてみましょう。

やりたいこと

たとえばこんなメソッド

他に欲しいのは

以上まとめて列挙して,簡単な機能を付けておこう。

 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
   色を設定する

Postscript クラスを作る

クラスライブラリの内容



オプション引数を扱うには

円,多角形,パスの描画では,塗りつぶしするかどうかをオプションで与えられる ような仕様になっていると具合がよい。具体的にはつぎのように指定できるように したいのである。

draw_circle(100,200,20)        #円周のみ
draw_circle(100,200,20,"fill") #塗りつぶし

Ruby リファレンスマニュアルの「クラス/メソッド定義」の項にその記載がある。

サンプルプログラム