らくらくDCL:描画の基本(2):ユーザー座標系(U-座標系)での基本描画
次のプログラム KIHON7 では, U-座標系でのポリラインやテキストプリ ミティブの出力結果が, ウインドウとビューポートの設定の仕方によってどの ようになるかを示しましょう.
# # kihon7.rb require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath def aplot nmax = 40 x = NArray.sfloat(nmax+1) y = NArray.sfloat(nmax+1) #-- circle ---- dt = 2.0*PI/nmax for n in 0..nmax x[n] = 40.0*sin(n*dt) y[n] = 40.0*cos(n*dt) end Plot.draw(x, y) #-- triangle ---- dt = 2.0*PI/3 for n in 0..3 x[n] = 40.0*sin(n*dt) y[n] = 40.0*cos(n*dt) end Plot.draw(x, y) #-- string ---- Text.draw(0.0, 0.0, 'SGTXU') Frame.pvpr(1) end #-- graph ---- Dev.open #-- frame 1 ---- Frame.new # XMIN, XMAX, YMIN, YMAX Fig.window=[-100.0, 100.0, -100.0, 100.0] Fig.viewport=[ 0.0, 1.0, 0.0, 1.0] Fig.transnum=1 aplot #-- frame 2 ---- Frame.new #-- upper left ---- # XMIN, XMAX, YMIN, YMAX Fig.viewport=[ 0.1, 0.4, 0.6, 0.9] aplot #-- upper right ---- # XMIN, XMAX, YMIN, YMAX Fig.window=[-100.0, 100.0, -40.0, 40.0] Fig.viewport=[ 0.6, 0.9, 0.6, 0.9] aplot #-- lower left ---- # XMIN, XMAX, YMIN, YMAX Fig.window=[-100.0, 100.0, -200.0, 0.0] Fig.viewport=[ 0.1, 0.4, 0.1, 0.4] aplot #-- lower right ---- # XMIN, XMAX, YMIN, YMAX Fig.window=[-100.0, 100.0, 0.0, -200.0] Fig.viewport=[ 0.6, 0.9, 0.1, 0.4] aplot Dev.closePROGRAM KIHON7
1フレームめが基本形で, まず Frame.pvpr ルーチンでビューポートの枠を
描き, U-座標系描画ルーチンの Plot.draw で円と正三角形を描き,
Text.draw で文字列 'SGTXU' を描いています(メソッド aplot).
2フレームめの左上には, 同じ aplot メソッドでビューポートだけ
を小さくして描いてみました. ビューポートが小さくなったのに対応して
Plot.draw で描いた円と三角形は小さくなりましたが, 文字の大きさは1フ
レームめと変わりません. U-座標系でのテキストプリミティブでも, 文字の
大きさはV-座標系の単位で指定するので, ビューポートの大きさが変わっても
文字の大きさは変わらないのです.
次に, ウインドウのy軸の範囲を変えてみました(右上). 範囲を40%に狭め
たので, 図形は縦に引き延ばされて, 円が楕円になりました. この場合にも,
文字は変わりません.
左下の例では, ウインドウの縦横比を元に戻して, UYMIN=-200, UYMAX=0 と y軸負方向に平行移動させました. その結果, 設定したビュー
ポートをはみ出して図形を描いています.
最後に, 右下の例はウインドウのy軸を逆転させた場合です.
UYMIN=0, UYMAX=-200 として, 左下の場合と逆にしました. この
時の三角形を見れば明らかなように, 図形は上下に折り返されています. ただ
し, 文字列は正立のままで折り返されません.
下の2つの例のように, 設定したビューポートをはみ出して図形を描く場合, はみ出した部分を描かないようにすることも出来ます. クリッピングに関す るパラメタ lclip を.TRUE. に してやると, ビューポートをはみ出した部分はラインでも文字でも描かれませ ん.