形状の追加

正弦曲線を描画した後,SINE プログラムdrawshapes を呼び出して,画面上に 2 つの矩形と 2 つの楕円を描画します。塗り潰しフラグには $GBORDER$GFILLINTERIOR を交互に使用します。

!	DRAWSHAPES:2 つの矩形と 2 つの楕円を描画します。
!
	SUBROUTINE drawshapes( )
	  USE DFLIB
	  EXTERNAL newx, newy
	  INTEGER(2) dummy, newx, newy
!
!	  マスク (塗り潰し) パターンを作成します。
	  INTEGER(1) diagmask(8), horzmask(8)
	  DATA diagmask / #93, #C9, #64, #B2, #59, #2C, #96, #4B /
	  DATA horzmask / #FF, #00, #7F, #FE, #00, #00, #00, #CC /
!
!	  矩形を描画します。
	  CALL SETLINESTYLE( INT2(#FFFF ))
	  CALL SETFILLMASK( diagmask )
	  dummy = RECTANGLE( $GBORDER,newx(INT2(50)),newy(INT2(-325)), &
	  &		newx(INT2(200)),newy(INT2(-425)))
	  dummy = RECTANGLE( $GFILLINTERIOR,newx(INT2(550)), &
	  &		newy(INT2(-325)),newx(INT2(700)), &
	  &		newy(INT2(-425)))
!
!	  楕円を描画します。
	  CALL SETFILLMASK( horzmask )
	  dummy = ELLIPSE( $GBORDER,newx(INT2(50)),newy(INT2(325)), &
	  &		newx(INT2(200)),newy(INT2(425)))
	  dummy = ELLIPSE( $GFILLINTERIOR,newx(INT2(550)), &
	  &		znewy(INT2(325)),newx(INT2(700)),&
	  &		newy(INT2(425)))
	END

SETLINESTYLE の呼び出しは,線パターンを実線にリセットします。このルーチンを省略すると,前に呼び出した drawlines サブルーチンが線種をダッシュに変更しているために,最初の矩形はダッシュで境界が表示されます。

ELLIPSERECTANGLE に似たパラメタを使って楕円を描画します。やはり塗り潰しフラグと境界矩形の 2 隅の値が必要です。次図は,楕円が境界矩形をどのように使用するかを示しています。

境界矩形

$GFILLINTERIOR 定数は,形状を現在の塗り潰しパターンで塗り潰します。パターンを作成するには,SETFILLMASK に 8 バイトの配列アドレスを渡します。drawshapes では,diagmask 配列は次の塗り潰しパターンに初期化されています。

ビット・パターン			diagmask 中の値
ビット番号	7 6 5 4 3 2 1 0
		x o o x o o x x	diagmask(1) = #93
		x x o o x o o x	diagmask(2) = #C9
		o x x o o x o o	diagmask(3) = #64
		x o x x o o x o	diagmask(4) = #B2
		o x o x x o o x	diagmask(5) = #59
		o o x o x x o o	diagmask(6) = #2C
		x o o x o x x o	diagmask(7) = #96
		o x o o x o x x	diagmask(8) = #4B