DclShadeRegionはユーザー座標系で多角形の内部に網かけをする. 引数の形はDclDrawLineと同じであるが, DclShadeRegion では指定した点列の始点と終点を結んだ多角形の中を塗りつぶす(左下). 座標点に関してDclShadeRegionに渡したものと同じ引数で折れ線を描いているが, 始点と終点は一致する必要のないことがわかる.
DclShadeRegionで行う網かけのパターンの指定は DclSetShadePatternで指定できる. DclShadeRegionのオプションでパターンを同時に指定することもできる. トーン番号とパターンの対応については, 付表を参照のこと.
DclShadeRegionで指定する多角形は単連結領域である必要はない. 右上のように多角形の辺同志が交差する「ねじれた多角形」でも, その図形によってできる閉領域全てを塗りつぶす.
なお, 何も指定しなければ標準的にはハードフィル (ディバイスに依存した網かけ)を行うようになっている. しかし, ハードフィルができないようなディバイス, あるいは DclSetParmで内部変数ENABLE_SOFTFILLを.TRUE.にすると, ソフトフィルによる網かけをおこなう. ここでは, ハードフィルができないようながデバイスも念頭に置いて, ソフトフィルを陽に指定した.
program shade use dcl real :: upx3(3), upy3(3), upx6(6), upy6(6), upxs(61), upys(61) a = 0.8 th = 3.14159 * 2 / 3 do i=1, 3 upx3(i) = a*sin(th*i) upy3(i) = a*cos(th*i) end do th = 3.14159 * 2 / 6 do i=1, 6 upx6(i) = a*sin(th*i) upy6(i) = a*cos(th*i) end do th = 3.14159 * 4 / 60 do i=1, 61 upxs(i) = a*(i-31) / 30. upys(i) = a*sin(th*(i-1)) end do call DclOpenGraphics call DclSetParm( 'ENABLE_SOFTFILL',.true.) ! <-- ソフトフィルの指定 call DclNewFrame call DclSetWindow(-1., 1., -1., 1.) call DclSetViewPort(0., 0.5, 0., 0.5) call DclSetTransNumber( 1) call DclSetTransFunction call DclDrawLine(upx3, upy3) call DclShadeRegion(upx3, upy3) ! <-- 網かけ (左下) call DclNewFig call DclSetWindow(-1., 1., -1., 1.) call DclSetViewPort(0., 0.5, 0.5, 1.) call DclSetTransFunction call DclSetShadePattern(101) call DclShadeRegion(upx6, upy6) ! <-- 横線 (左上) call DclNewFig call DclSetWindow(-1., 1., -1., 1.) call DclSetViewPort(0.5, 1., 0., 0.5) call DclSetTransFunction call DclShadeRegion(upx6, upy6, 201) ! <-- 斜線 (右下) call DclNewFig call DclSetWindow(-1., 1., -1., 1.) call DclSetViewPort(0.5, 1., 0.5, 1.) call DclSetTransFunction call DclShadeRegion(upxs, upys, 601) ! <-- 横線 (右上) call DclCloseGraphics end program |
|
DclShadeRegion (SGTNU,SGTNZU) |
ユーザー座標系で多角形領域を塗りつぶす. |
DclShadeRegionNormalized (SGTNV,SGTNZV) |
正規座標系で多角形領域を塗りつぶす. |
DclShadeRegionProjected (SGTNR,SGTNZR) |
透視座標系で多角形領域を塗りつぶす. |
DclSetShadePattern (SGSTNP) |
トーンパターン番号を設定する. |
* 括弧の中は、対応するf77インターフェイス名.