網かけ・色ぬりをする

領域網かけ:

DclShadeRegionはユーザー座標系で多角形の内部に網かけをする. 引数の形はDclDrawLineと同じであるが, DclShadeRegion では指定した点列の始点と終点を結んだ多角形の中を塗りつぶす(左下). 座標点に関してDclShadeRegionに渡したものと同じ引数で折れ線を描いているが, 始点と終点は一致する必要のないことがわかる.

DclShadeRegionで行う網かけのパターンの指定は DclSetShadePatternで指定できる. DclShadeRegionのオプションでパターンを同時に指定することもできる. トーン番号とパターンの対応については, 付表を参照のこと.

DclShadeRegionで指定する多角形は単連結領域である必要はない. 右上のように多角形の辺同志が交差する「ねじれた多角形」でも, その図形によってできる閉領域全てを塗りつぶす.

ハードフィル / ソフトフィル:

なお, 何も指定しなければ標準的にはハードフィル (ディバイスに依存した網かけ)を行うようになっている. しかし, ハードフィルができないようなディバイス, あるいは DclSetParmで内部変数ENABLE_SOFTFILL.TRUE.にすると, ソフトフィルによる網かけをおこなう. ここでは, ハードフィルができないようながデバイスも念頭に置いて, ソフトフィルを陽に指定した.

shade.f90
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インターフェイス名.