グラフィックス関数:複数のベジェ曲線を描画します。
モジュール:USE DFLIB
形式
result = POLYBEZIERTO (ppoints, cpoints)
result = POLYBEZIERTO_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 点は制御点で,最後の点が端点です。始点は,最初の曲線のために MOVETO で設定した現在のグラフィックス位置です。次の曲線は,前の曲線の端点を始点として使用します。そのため,cpoints は,1 つの曲線に対しては 3 点,2 つの曲線に対しては 6 点,3 つの曲線に対しては 9 点 (以下同様) を含んでいなければなりません。
POLYBEZIERTO は,現在のグラフィックス位置を最後に描画した曲線の端点に移動します。
互換性
STANDARD GRAPHICS QUICKWIN GRAPHICS LIB
関連情報
POLYBEZIER, POLYBEZIER_W, MOVETO, MOVETO_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