POLYBEZIER, POLYBEZIER_W

Graphics Function: Draws one or more Bezier curves.

Module: USE DFLIB

Syntax

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


ppoints
(Input) Derived type xycoord. Array of derived types defining the endpoints and the control points for each Bezier curve. The derived type xycoord is defined in DFLIB.F90 as follows:
 TYPE xycoord
   INTEGER(2) xcoord
   INTEGER(2) ycoord
 END TYPE xycoord
cpoints
(Input) INTEGER(2). Number of points in ppoints or wppoints.


wppoints
(Input) Derived type wxycoord. Array of derived types defining the endpoints and the control points for each Bezier curve. The derived type wxycoord is defined in DFLIB.F90 as follows:
 TYPE wxycoord
   REAL(8) wx
   REAL(8) wy
 END TYPE wxycoord

Results:

The result is of type INTEGER(2). The result is nonzero if anything is drawn; otherwise, 0.

A Bezier curve is based on fitting a cubic curve to four points. The first point is the starting point, the next two points are control points, and last point is the ending point. The starting point must be given for the first curve; subsequent curves use the ending point of the previous curve as their starting point. So, cpoints should contain 4 for one curve, 7 for 2 curves, 10 for 3 curves, and so forth.

POLYBEZIER does not use or change the current graphics position.

Compatibility

STANDARD GRAPHICS QUICKWIN GRAPHICS LIB

See Also: POLYBEZIERTO, POLYBEZIERTO_W

Example

Program Bezier
use dflib

!Shows how to use POLYBEZIER, POLYBEZIER_W,
!POLYBEZIERTO, and POLYBEZIERTO_W,

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) ! graphic to black
i = settextcolorrgb(#00FFFFFF) ! text to black
i = setbkcolorrgb(#00000000) ! background to white
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)

!Show tangent lines
!A bezier curve is tangent to the line
!from the begin point to the first control
!point.   It is also tangent to the line from
!the second control point to the end point.
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) ! graphic to red
istat = PolyBezier_W(wlppoints, 4)

!Show tangent lines
!A bezier curve is tangent to the line
!from the begin point to the first control
!point.   It is also tangent to the line from
!the second control point to the end point.
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 uses the current graphics position
! as its initial starting point so we start the
! array with the first first control point.

!lppoints(1).xcoord = 1+orgx ! need to move to this
!lppoints(1).ycoord = 1+orgy

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) ! graphic to green
call moveto(1+orgx,1+orgy,xy)
istat = PolyBezierTo(lppoints, 3)

!Show tangent lines
!A bezier curve is tangent to the line
!from the begin point to the first control
!point.   It is also tangent to the line from
!the second control point to the end point.
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 = 1.0+worgx
!wlppoints(1).wy = 1.0+worgy

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) ! graphic to blue
istat = PolyBezierTo_W(wlppoints, 3)

!Show tangent lines
!A bezier curve is tangent to the line
!from the begin point to the first control
!point.   It is also tangent to the line from
!the second control point to the end point.
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