Example showing graph drawing using GINOGRAF
MODULE Form1
USE VisualClearWin
TYPE(VCWdialog) dlg1
CONTAINS
INTEGER FUNCTION DoProcess()
! Program GRAFEX2
! **********************************************
! Copyright Copyright Bradly Associates Limited
! GINOGRAF Version 6.0
! **********************************************
!
use gino_f90
use graf_f90
!
! Declare variables
TYPE(VCWdrawing) g
INTEGER hdc
type (GDIM) paper
type (GLIMIT) :: frame1 = GLIMIT(10.0,990.0,60.0,740.0)
type (GLIMIT) :: frame2 = GLIMIT(10.0,990.0,50.0,740.0)
type (GLIMIT) :: frame3 = GLIMIT(15.0,985.0,55.0,735.0)
type (GPOINT), dimension(25) :: p1,p2,p3,p4
character, dimension(2) :: labs = (/ ' ',' '/)
!
! Define constants
!
n=24
np1=n+1
pi=3.1415926
rad=2.0*pi/n
!
! Calculate function values
!
do i=1,np1
theta=(i-1)*rad
r1=4.0*cos(2.0*theta)
r2=3.9*sin(theta/2.0)
r3=8.0*sin(theta)*cos(theta)
r4=0.5*cos(theta)-3.0
p1(i)%x=r1*cos(theta)
p1(i)%y=r1*sin(theta)
p2(i)%x=r2*cos(theta)
p2(i)%y=r2*sin(theta)
p3(i)%x=r3*cos(theta)
p3(i)%y=r3*sin(theta)
p4(i)%x=r4*cos(theta)
p4(i)%y=r4*sin(theta)
end do
g = GetDrawing@(dlg1,"drawing_Panel1")
hdc = GetHdc@(g)
call gOpenGino
call gMwinao(0,hdc)
call gEnqDrawingLimits(paper,ip)
factor=min(paper%xpap/1000.0,paper%ypap/750.0)
call gDefinePictureUnits(factor)
call gNewDrawing
call ggRestoreAxesSettings
call ggSetPlotFrame(frame1)
cw = 7.5
ch = 7.5
call gSetCharSize(cw,ch)
call gEnqColourInfo(ndc,ndt)
call gEnqLineColour(icol)
!
xlen=490.0
ylen=345.0
xcen=xlen+10.0
ycen=ylen+50.0
rad=min(xlen/2.0,ylen/2.0)*0.75
!
! Draw polar charts
!
call ggSetPolarChartAttribs(xcen-xlen/2.0,ycen+ylen/2.0,rad,GLINEARTYPE1)
call ggDrawPolarAxes(GCARDINAL,GTICKS,GNOANNOTATION,8,4.0,GRAXIS)
call ggDrawPolarAxes(GNONE,GNONE,GANNOTATION,4,360.0,GTHETAAXIS)
call ggFillBelowDataset(np1,p1,0.0,GRAXIS,GSOLID,GRED)
call ggDrawPolarAxes(GCARDINAL,GTICKS,GNOANNOTATION,8,4.0,GRAXIS)
call ggDrawPolarAxes(GNONE,GNONE,GANNOTATION,4,360.0,GTHETAAXIS)
call gSetLineColour(icol)
call ggAddGraphPolyline(np1,p1)
call ggDrawGraphTitle('r=4.0**cos(2.0**theta)',GLEFT,GCENTRE)
!
call ggSetPolarChartAttribs(xcen+xlen/2.0,ycen+ylen/2.0,rad,GLINEARTYPE2)
call ggDrawPolarAxes(GCARDINAL,GTICKSANDCIRCLES,GANNOTATION,4,4.0,GRAXIS)
call ggDrawPolarAxes(GINTERMEDIATE,GTICKS,GANNOTATION,8,360.0,GTHETAAXIS)
call ggFillBelowDataset(np1,p2,0.0,GRAXIS,GSOLID,GBLUE)
call ggDrawPolarAxes(GCARDINAL,GTICKSANDCIRCLES,GANNOTATION,4,4.0,GRAXIS)
call ggDrawPolarAxes(GINTERMEDIATE,GTICKS,GANNOTATION,8,360.0,GTHETAAXIS)
call gSetLineColour(icol)
call ggAddGraphCurve(np1,p2)
call ggDrawGraphTitle('r=3.9**sin(theta/2.0)',GRIGHT,GCENTRE)
!
call ggSetPieChartFrame(rad,xcen-xlen/2.0,ycen-ylen/2.0)
call ggSetPolarChartAttribs(xcen-xlen/2.0,ycen-ylen/2.0,rad,GLINEARTYPE3)
call ggDrawPolarAxes(GCARDINAL,GTICKSANDCIRCLES,GANNOTATION,1,4.0,GRAXIS)
call ggDrawPolarAxes(GCARDINAL,GTICKSANDCIRCLES,GANNOTATION,24,360.0,GTHETAAXIS)
call gSetLineColour(GGREEN)
call gSetLineWidthScaling(2.0)
call ggAddGraphSpline(np1,p3)
call gSetLineWidthScaling(0.5)
call gSetLineColour(icol)
call ggDrawGraphTitle('r=8.0**sin(theta)**cos(theta)',GLEFT,GBOTTOM)
!
call ggSetPolarChartAttribs(xcen+xlen/2.0,ycen-ylen/2.0,rad,GLINEARTYPE1)
call ggDrawPolarAxes(GINTERMEDIATE,GTICKSANDCIRCLES,GANNOTATION,4,4.0,GRAXIS)
call ggDrawPolarAxes(GINTERMEDIATE,GTICKSANDCIRCLES,GANNOTATION,12,360.0,GTHETAAXIS)
call gSetLineColour(GMAGENTA)
call gSetCharSize(2.5*cw,2.5*ch)
call ggAddGraphMarkers(np1,p4,76096,0)
call gSetCharSize(cw,ch)
call gSetLineColour(icol)
call ggDrawGraphTitle('r=0.5**cos(theta)-3.0',GRIGHT,GBOTTOM)
!
!
! Draw frames
!
call gSetLineColour(GCYAN)
call gFillRect(GHOLLOW,GCURRENT,frame2)
call gFillRect(GHOLLOW,GCURRENT,frame3)
call gMoveTo2D(305.0,20.0)
call gSetCharSize(15.0,15.0)
call gDisplayStr('GINOGRAF Example Program 2')
!
! Close down device & leave GINO
!
call gSuspendDevice
call gCloseGino
!
! Close Program
!
call ReleaseHdc@(g,hdc)
call GetDrawingSize@(dlg1, "drawing_Panel1", iwidth, iheight)
call InvalidateRectangle@(g, 0, 0, iwidth,iheight)
DoProcess=0
END FUNCTION DoProcess
END MODULE Form1
PROGRAM Main
USE Form1
dlg1=CreateDialog@("grafex2form.Form1")
CALL OnClick@(dlg1,"button1",DoProcess)
call DisplayDialog@(dlg1)
END