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