10.1 トーンパターンを指定する

2.2節の例のように, ただ負の領域に斜線のハッチをつける だけでは芸がありません. UEPACK を活用すれば, トーンをつけるレベルやパ ターンを指定することができるようになります(U2D5).

トーンの指定は, 必要なレベルの分だけ UESTLV ルーチンを呼ぶことに よっておこないます(37行め). 最初の2つの引数によってぬりわけるレベルの 下限値と上限値を指定し, 最後の引数でトーンパターン番号を指定します. トー ンパターンは巻末付録を御覧下さい. UESTLN というルーチンを用いれ ば, 複数の塗り分けるレベルとパターンを配列で一度に指定することもできま す. また, UDGCLA, UDGCLB ルーチンと同様のトーンレベル生成 ルーチン UEGTLA, UEGTLB もあります.

この例も, 第2.2節と同じようにコンターとの重ね書きをおこ なっていますが, プログラム構成で異なるところがあります. それは, SGLSET ルーチンで内部変数 'LSOFTF'.TRUE. として, ソフ トフィルを指定しているために, 座標軸の描画やコンタリングのあとで UETONE ルーチンを呼んでも問題ないということです. UEPACK のハッチング は SGPACK のトーンプリミティブを用いていますが, トーンプリミティブは出 力装置の能力に応じてハードフィルとソフトフィルとを切替えることができま す. ハードフィルによるぬりわけを行なう場合, 出力装置によっては先に描か れた図形が消えてしまうことがあるので, QUICK4 のプログラム例では, UETONE を最初に呼んでいるわけです. しかし, この例ではソフトフィ ルを指定したので, 描く順番を気にしなくてもよいわけです.

      PROGRAM U2D5

      PARAMETER( NX=37, NY=37 )
      PARAMETER( XMIN=0, XMAX=360, YMIN=-90, YMAX=90 )
      PARAMETER( PI=3.14159, DRAD=PI/180 )
      REAL P(NX,NY)

      DO 10 J=1,NY
      DO 10 I=1,NX
        ALON = ( XMIN + (XMAX-XMIN)*(I-1)/(NX-1) ) * DRAD
        ALAT = ( YMIN + (YMAX-YMIN)*(J-1)/(NY-1) ) * DRAD
        SLAT = SIN(ALAT)
        P(I,J) = 3*SQRT(1-SLAT**2)*SLAT*COS(ALON) - 0.5*(3*SLAT**2-1)
   10 CONTINUE

      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL SGPWSN
      READ (*,*) IWS

      CALL GROPN( IWS )
      CALL SGLSET( 'LSOFTF', .TRUE. )
      CALL GRFRM

      CALL GRSWND( XMIN, XMAX, YMIN, YMAX )
      CALL GRSVPT(  0.2,  0.8,  0.2,  0.8 )
      CALL GRSTRN( 1 )
      CALL GRSTRF

      DO 20 K=-5,3
        TLEV1 = 0.4*K
        TLEV2 = TLEV1 + 0.4
        IF(K.LE.-1) THEN
          IPAT = 600 + ABS(K+1)
        ELSE
          IPAT =  30 + K
        END IF
        CALL UESTLV( TLEV1, TLEV2, IPAT )
   20 CONTINUE

      CALL USDAXS
      CALL UDGCLB( P, NX, NX, NY, 0.4 )
      CALL UDCNTR( P, NX, NX, NY )
      CALL UETONE( P, NX, NX, NY )

      CALL GRCLS

      END
PROGRAM U2D5

\resizebox{10cm}{!}{\includegraphics{u2d2/u2d5.eps}}
u2d5.f: frame1