紙を一杯に使う

用紙の形は長方形なのに, そこに内接する正方形の領域をとって, その中だけ に図を描くのではもったいない, 紙一杯に図を描きたい, という時にも SLPACK を活用しましょう.

layout04.f90
program layout04

  use dcl

    call DclOpenGraphics()

    call DclSetParm( 'GRAPH:lfull', .true. )
    call DclSetFrameMargin( 0., 0., 0.08, 0.08 )
    call DclSetAspectRatio( 1., 0.6 )
    call DclSetFrameTitle( 'figure title', 't',  0.,  0., 0.03, 1 )
    call DclSetFrameTitle( 'program.name', 'b', -1., -1., 0.02, 2 )
    call DclSetFrameTitle( 'page:#page',   'b',  1., -1., 0.02, 3 )

    call DclNewFrame
    call DclSetViewPort( 0.1,0.9,0.06,0.54 )
    call DclDrawViewportFrame( 1 )
    call DclDrawTextNormalized( 0.5, 0.5, 'figure' )

    call DclCloseGraphics

end program


物理的な描画範囲一杯に作画したい時は, SGPACK の SGLSET を用いて 論理型内部変数 'LFULL'.TRUE. にします. これが, .FALSE.(初期値)の時には, 最大内接する正方形が作画可能な範囲となります. 物理的な描画範囲はデバイスによって違いますから,'LFULL'.TRUE.にしたときは, 異なるデバイスに出力する際にエラーを起こして出力 できなくなる可能性があります. そこで, 11行めのように SLRAT を使っ て「私は $1 \times 0.6 $ の領域に図を描きたいのだ」と宣言しておくことを お勧めします. SLRATで縦横比が指定されると, このフレームが最大内 接するように描画領域を設定するので, どんなデバイスに出力してもエラーは 起こりません.

この例では, 作画領域の上下に8%ずつのマージンをとってタイトル等のスペー スを確保した後に, $1 \times 0.6 $ の領域を宣言しています. まだ, 上下に 余裕がありますので, 左右にはいっぱいにフレームが確保できました. 上下の マージンを大きくとると, この縦横比を保つために, 左右にもマージンが自動 的にできるようになります.



SLPACK では基本的に最大描画領域に対する比率でマージンなどをとるように なっていますが, 目的によっては絶対的な長さ(例えば10cm)を指定したい場合 もあるでしょう. SLSIZE または SLFORM で第1レベルめのフレー ムを再設定しておけば, その範囲が物理的に描画できる範囲内である限り, 異 なったデバイスでも同じ大きさの図が出力できます. SLFORM は描画範 囲を A4, B5 等の規格の大きさで, また, SLSIZE は cm 単位で指定し ます. 通常 A4 の用紙の最大描画範囲は用紙そのものの大きさよりも小さいの で, A4 の紙に SLSIZEで A4 を指定するとエラーとなりますから, ご注 意下さい. また, コンソールディスプレイなど, 物理的な大きさがはっきり しないデバイスに対しては, 適当な大きさが仮定されています.

関連リンク