Intel® Fortran Compiler 16.0 User and Reference Guide
Graphics Functions: Draw one or more Bezier curves.
USE IFQWIN
result = POLYBEZIER (lppoints,cpoints)
result = POLYBEZIER_W (lppoints,cpoints)
lppoints |
(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 IFQWIN.F90 as follows: TYPE xycoord INTEGER(2) xcoord INTEGER(2) ycoord END TYPE xycoord |
cpoints |
(Input) INTEGER(2). Number of points in lppoints. |
The result type is 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.
Program Bezier use IFQWIN ! 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(Z'00FFFFFF') ! graphic to black i = settextcolorrgb(Z'00FFFFFF') ! text to black i = setbkcolorrgb(Z'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(Z'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(Z'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(Z'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