6.2 usgrphの分解

ここで, プログラム uspac1 で呼んだ usgrph メソッド(元サブルーチン)がどのようなルーチンで構成されているか, 見てみましょう. 実は,

NumRu::DCL.usgrph(x,y)
というメソッド(元サブルーチン)・コールは, 次の5つのメソッド(元サブルーチン)を順に呼ぶことと同 じなのです.
NumRu::DCL.usspnt(x,y)
CALL uspfit
CALL grstrf
CALL usdaxs
NumRu::DCL.uulin(upx,upy)
データを自動的にスケーリングするためには, まず, 描きたいデータすべての なかから最大値と最小値を見つける必要があります. メソッド(元サブルーチン) usspnt がこれを行ないます. つぎの uspfit ルーチンでは, これらの データの最大値・最小値を切りの良い数値に丸めてウインドウを決め, ほかの 正規化変換のパラメータも「おまかせ」で決めます. そして, grstrf ルーチンで正規化変換を確定します.

ここで, 「おまかせ」の中身を見てみましょう.

まず, MATH1 の SYSLIB パッケージが管理する内部変数 rundef のお話 です. これはDCL全体で使用する内部変数のひとつで, glrget/glrsetルー チンによって参照/変更できます. rundef は「ユーザーが陽に指定し ていない」ことを表す実数値で, 「未定義値」と呼びます. 初期値は-999.です.

さて, この未定義値 rundef ですが, grfrm ルーチンで新しい作 画領域を設定する際に使われます. grfrm を呼ぶと, ウインドウ, ビュー ポート, および変換メソッド(元関数)番号の正規化変換に関する変数に rundef が代 入され, これらが未定義状態になります. ここで, usspntuspfit を呼ぶと, ウインドウについては最大値・最小値を切りの良い数値に 丸めて設定し, それ以外の未定義状態にある変数には次の初期値を設定します:

ビューポート: (0.2, 0.8, 0.2, 0.8)
変換メソッド(元関数)番号: 1 (直角一様座標)
当然ながら, uspfit ルーチンの前に grswnd, grsvpt, ま たは grstrn でこれらの変数を設定していると, それは未定義状態では なくなっているので, その値のまま grstrf ルーチンで確定されます.

grstrf ルーチンの次の usdaxs は「おまかせ」で座標軸を描く ルーチンです. 次章以降で説明する座標軸ルーチンを使っているのですが, す でに見たように座標軸ラベルがデータに合わせて自動的に付けられます(第 2.1節, quick2.rb).

折れ線を描いているのは, UUPACK の uulin ルーチンです. 基本的には, SGPACK のポリラインプリミティブに対応するものですが, 次節以降で具体的に 見るように別の機能が付け加えられています.