Next:折れ線を描く Up:基本描画 Previous:V座標系で線分を描く

U座標系で線分を描く

次にU座標系で線分を描いてみよう.


sgpk02.f:page1


sgpk02.f:page2

ウインドウとビューポート:

U座標系で線分を描くには,SGFRMを実行したあとで 変換関数を定義する以下の4つのルーチンを呼ぶ:

このうち最初の3つを呼ぶ順番は任意であるが,SGSTRFは 必ず最後に呼ばなければならない. ここではU座標系の (0-1)×(0-1) の空間(ウインドウ)を V座標系の (0-1)×(0-1) の空間(ビューポート)に投影するように 変換関数を定義しているので, 恒等変換となり, V座標系とU座標系は等しくなる. (実は, SGFRMを実行した段階で, この恒等変換が定義されているので, 作画例の1ページ目については,SGSWNDなどによって 変換関数を改めて指定しなくても同じ結果になる.) ここで, ウインドウとはU座標系上に描く図形のうち我々が実際に見たい領域であり, ビューポートはその見たい領域を投影するV座標系上の領域である. このウインドウとビューポートという言葉は今後よくでてくるので よく覚えておいてほしい.

また, SGSTRNの引数は変換関数番号で, 1ならば線形座標, 4ならば両対数座標というように座標系のタイプを指定する. 変換関数に関する以上の情報はSGSTRFを呼んではじめて有効になる. そのあとに呼んでいる SLPVPRはビューポートの枠を描く SLPACK のサブルーチンである (GRPH1/SLPACK参照).

線分描画(U座標系):

前出の SGSLNIによりラインインデクスを設定して, SGLNUSGLNZUを使って実際の線分を描画する (このほかにR座標系で作画するルーチンもあるが, ここでは述べない). それぞれ, 根回し型と上意下達型のルーチンである. ここで, SGLNZUで指定したラインインデクスは, SGLNUのラインインデクスへ影響を及ぼさないことに 注意していただきたい.

いろいろなウインドウ / ビューポート:

SGFRMにより改ページをして, 新しいページの左上に前のページと同じ図形を描いてみる. ウインドウとビューポートの設定に関しては, SGSVPTによるビューポートの指定のみが前のページのものと異なる. ウインドウ, ビューポート, 変換関数番号に関する情報はすべて SGPACK の内部変数管理ルーチン SGpGET/SGpSET (SG Parameter GET/SET)が保持している. (以下でも同様の表記をするが, 一般にpR/I/L/Cのどれかで, それぞれ, 実数, 整数, 論理変数, 文字変数用のルーチンに対応することを あらわす. ) したがって, 変更部分のみを指定した上で, SGSTRFによって 変換関数を確定してやればよい (その意味では, この部分に関する SGSWNDの指定も実際にはいらない). その結果,左上に前のページと同じ図形が縮小されて描かれる.

その右側には SGSWNDのウインドウ指定で, UYMIN > UYMAXとし上下逆さまのウインドウを表示してみた.

クリッピング:

ウインドウとはU座標系上の我々が見たい部分であると書いたが, SGSWNDで小さなウインドウを指定して図形の一部だけ表示させようとしても, これだけでは作画しようとする図形がビューポートをはみ出してしまう. ビューポートをはみ出す部分を描かないようにするためには SGLSETによって, クリッピングを制御する内部変数 'LCLIP'.TRUE.にしてやればよい.

Source:sgpack/sgpk02.f


地球流体電脳倶楽部 DCL-5.0
Last modified: Wed Apr 30 13:59:59 1997