POLYBEZIER, POLYBEZIER_W

グラフィックス関数:複数のベジェ曲線を描画します。

モジュールUSE DFLIB

形式

result = POLYBEZIER (ppoints, cpoints)
result = POLYBEZIER_W (wppoints, cpoints)

ppoints
(入力) 構造型 xycoord。ビューポート座標で各ベジェ曲線の端点と制御点を定義する構造型配列。xycoord 構造型 (DFLIB.F90 に定義) は,以下のようになります。

TYPE xycoord
  INTEGER(2) xcoord
  INTEGER(2) ycoord
END TYPE xycoord

cpoints
(入力) INTEGER(2)ppoints または wppoints 中の点数。

wppoints
(入力) 構造型 wxycoord。ウィンドウ座標で各ベジェ曲線の端点と制御点を定義する構造型配列。wxycoord 構造型 (DFLIB.F90 に定義) は,以下のようになります。

TYPE wxycoord
  REAL(8) wx
  REAL(8) wy
END TYPE wxycoord

結果

結果の型は INTEGER(2) です。何かが描画されれば,結果は非ゼロで,そうでなければ 0 です。

ベジェ曲線は,立体曲線を 4 点に一致させることを基本としています。第 1 点は始点で,次の 2 点は制御点で,最後の点が端点です。始点は,最初の曲線のために与えられなければなりません。次の曲線は,前の曲線の端点を始点として使用します。そのため,cpoints は,1 つの曲線に対しては 4 点,2 つの曲線に対しては 7 点,3 つの曲線に対しては 10 点 (以下同様) を含んでいなければなりません。

POLYBEZIER は,現在のグラフィックス位置を使用しませんし,変更もしません。

互換性

STANDARD GRAPHICS QUICKWIN GRAPHICS LIB

関連情報

POLYBEZIERTO, POLYBEZIERTO_W

	! QuickWin または Standard Graphics アプリケーションでビルドします。
	! これは,POLYBEZIER, POLYBEZIER_W, POLYBEZIERTO, および POLYBEZIERTO_W
	! の使い方を示した例です。
	Program Bezier
	use dflib
	TYPE(xycoord)  lppoints(31)
	TYPE(wxycoord) wlppoints(31)
	TYPE(xycoord)  xy
	TYPE(wxycoord) wxy
	integer(4) i
	integer(2) istat, orgx, orgy
	real(8) worgx, worgy

	i = setcolorrgb(#00FFFFFF)	! グラフィックスを黒色に設定
	i = settextcolorrgb(#00FFFFFF)	! テキストを黒色に設定
	i = setbkcolorrgb(#00000000)	! 背景を白色に設定
	call clearscreen($GCLEARSCREEN)

	orgx = 20
	orgy = 20
	lppoints(1).xcoord = 1+orgx
	lppoints(1).ycoord = 1+orgy
	lppoints(2).xcoord = 30+orgx
	lppoints(2).ycoord = 120+orgy
	lppoints(3).xcoord = 150+orgx
	lppoints(3).ycoord = 60+orgy
	lppoints(4).xcoord = 180+orgx
	lppoints(4).ycoord = 180+orgy
	istat = PolyBezier(lppoints, 4)

	! 接線を表示します。
	! ベジェ曲線は,始点から最初の制御点
	! を結んだ線の接線です。
	! ベジェ曲線はまた,第 2 制御点から端点
	! を結んだ線の接線です。
	do i = 1,4,2
	  call moveto(lppoints(i).xcoord,lppoints(i).ycoord,xy)
	  istat = lineto(lppoints(i+1).xcoord,lppoints(i+1).ycoord)
	end do

	read(*,*)

	worgx = 50.0
	worgy = 50.0
	wlppoints(1).wx = 1.0+worgx
	wlppoints(1).wy = 1.0+worgy
	wlppoints(2).wx = 30.0+worgx
	wlppoints(2).wy = 120.0+worgy
	wlppoints(3).wx = 150.0+worgx
	wlppoints(3).wy = 60.0+worgy
	wlppoints(4).wx = 180.0+worgx
	wlppoints(4).wy = 180.0+worgy

	i = setcolorrgb(#000000FF)	! グラフィックスを赤色に設定
	istat = PolyBezier_W(wlppoints, 4)

	! 接線を表示します。
	! ベジェ曲線は,始点から最初の制御点
	! を結んだ線の接線です。
	! ベジェ曲線はまた,第 2 制御点から端点
	! を結んだ線の接線です。
	do i = 1,4,2
	  call moveto_w(wlppoints(i).wx,wlppoints(i).wy,wxy)
	  istat = lineto_w(wlppoints(i+1).wx,wlppoints(i+1).wy)
	end do

	read(*,*)

	orgx = 80
	orgy = 80
	! POLYBEZIERTO は,現在のグラフィックス位置
	! を初期始点として使用します。そのため,
	! 第 1 制御点を持つ配列から開始します。
	lppoints(1).xcoord = 30+orgx
	lppoints(1).ycoord = 120+orgy 
	lppoints(2).xcoord = 150+orgx
	lppoints(2).ycoord = 60+orgy
	lppoints(3).xcoord = 180+orgx
	lppoints(3).ycoord = 180+orgy
	i = setcolorrgb(#0000FF00)	! グラフィックスを緑色に設定
	call moveto(1+orgx,1+orgy,xy)
	istat = PolyBezierTo(lppoints, 3)

	! 接線を表示します。
	! ベジェ曲線は,始点から最初の制御点
	! を結んだ線の接線です。
	! ベジェ曲線はまた,第 2 制御点から端点
	! を結んだ線の接線です。
	call moveto(1+orgx,1+orgy,xy)
	istat = lineto(lppoints(1).xcoord,lppoints(1).ycoord)
	call moveto(lppoints(2).xcoord,lppoints(2).ycoord,xy)
	istat = lineto(lppoints(3).xcoord,lppoints(3).ycoord)

	read(*,*)

	worgx = 110.0
	worgy = 110.0
	wlppoints(1).wx = 30.0+worgx
	wlppoints(1).wy = 120.0+worgy
	wlppoints(2).wx = 150.0+worgx
	wlppoints(2).wy = 60.0+worgy
	wlppoints(3).wx = 180.0+worgx
	wlppoints(3).wy = 180.0+worgy
	call moveto_w(1.0+worgx,1.0+worgy,wxy)
	i = setcolorrgb(#00FF0000)	! グラフィックスを青色に設定
	istat = PolyBezierTo_W(wlppoints, 3)

	! 接線を表示します。
	! ベジェ曲線は,始点から最初の制御点
	! を結んだ線の接線です。
	! ベジェ曲線はまた,第 2 制御点から端点
	! を結んだ線の接線です。
	call moveto_w(1.0+worgx,1.0+worgy,wxy)
	istat = lineto_w(wlppoints(1).wx,wlppoints(1).wy)
	call moveto_w(wlppoints(2).wx,wlppoints(2).wy,wxy)
	istat = lineto_w(wlppoints(3).wx,wlppoints(3).wy)

	read(*,*)

	END PROGRAM Bezier