Example showing drawing using GINO
! Program GINOEX5
! **********************************************
! Copyright Bradly Associates Limited
! GINO Version 6.0
! **********************************************
!
! Generate_viewing facilities
!
use gino_f90
type (GDIM) paper
type (GLIMIT3) :: picture = GLIMIT3(0.0,1000.0,0.0,750.0,-1000.0,1000.0)
type (GLIMIT) :: viewport
type (GLIMIT) :: frame1 = GLIMIT(15.0,985.0,65.0,735.0)
type (GLIMIT) :: frame2 = GLIMIT(20.0,980.0,70.0,730.0)
type (GLIMIT) :: window1 = GLIMIT(20.0,500.0,400.0,730.0)
type (GLIMIT) :: window2 = GLIMIT(500.0,980.0,400.0,730.0)
type (GLIMIT) :: window3 = GLIMIT(20.0,499.0,70.0,375.0)
type (GLIMIT) :: window4 = GLIMIT(500.0,980.0,70.0,375.0)
!
call gOpenGino
call xxxxx
call gSetDeviceTitle('GINO Example 5 - Version 6.0')
call gEnqDrawingLimits(paper,ipapty)
viewport%xmin=0.0
viewport%xmax=paper%xpap
viewport%ymin=0.0
viewport%ymax=paper%ypap
call gSetViewport3D(picture,viewport)
call gSetClippingMode(GHARD)
call gSetWindowMode(GON2D)
!
! Draw dividing lines,frame and title.
!
call gSetLineColour(GCYAN)
call gMoveTo2D(500.0,70.0)
call gDrawLineTo2D(500.0,730.0)
call gMoveTo2D(20.0,400.0)
call gDrawLineTo2D(980.0,400.0)
call gFillRect(GHOLLOW,GCURRENT,frame1)
call gFillRect(GHOLLOW,GCURRENT,frame2)
call gMoveTo2D(260.0,30.0)
call gSetSoftChars
call gSetCharSize(20.0,20.0)
call gDisplayStr('GINO Example Program 5')
!
! Set generate_viewing parameters.
!
xmax=875.0
ymax=550.0
zmax=50.0
xmin=125.0
ymin=430.0
zmin=0.0
xc=0.5*(xmax+xmin)
yc=0.5*(ymax+ymin)
zc=0.5*(zmax+zmin)
delx=xmax-xc
dely=ymax-yc
delz=zmax-zc
radius=sqrt(delx**2+dely**2+delz**2)
!
! draw generate_view 1
!
call gSetWindow2D(window1)
call gMoveViewCentre(50.0)
call gDefinePerspView(xc,yc-60.0,-200.0,0.0,0.1,0.6,100.0)
call gUpdateView
call bridge
!
! draw generate_view 2
!
call gInitView
call gSetWindow2D(window2)
call gDefineParallelView(0.5,-0.1,0.5,xc,yc,zc)
call gUpdateView
call bridge
!
! draw generate_view 3
!
call gInitView
call gSetWindow2D(window3)
call gDefinePerspView(150.0,500.0,-50.0,0.5,-0.1,0.5,radius)
call gSetViewPlaneDistance(200.0)
call gUpdateView
call bridge
!
! draw generate_view 4
!
call gSetClippingMode(GSOFT)
call gInitView
call gSetWindow2D(window4)
call gSetViewEyeDistance(100.0)
call gDefineSphericalView(xc,yc,zc,255.0,1.0,0.0,0.0,100.0)
call gUpdateView
call bridge
!
! End gino
!
call gSuspendDevice
call gCloseGino
stop
end
!*********************************************************************
subroutine bridge
!*********************************************************************
! draw bridge.
!*********************************************************************
use gino_f90
do i=1,2
call gMoveTo3D(125.0+(real(i-1)*377.0),478.0,0.0)
call cubby3(187.0,3.0,30.0)
call span(1.0)
call gMoveTo3D(125.0+(real(i-1)*377.0),478.0,30.0)
call span(1.0)
call gMoveTo3D(312.0+(real(i-1)*377.0),450.0,0.0)
call pillar
call gMoveTo3D(502.0+(real(i-1)*377.0),478.0,0.0)
call cubby3(-187.0,3.0,30.0)
call span(-1.0)
call gMoveTo3D(502.0+(real(i-1)*377.0),478.0,30.0)
call span(-1.0)
end do
return
end
!********************************************************************
subroutine span(dir)
!********************************************************************
! Routine to draw span of wires along x axis.
!********************************************************************
use gino_f90
height(i)=256.0-sqrt(256.0**2-real(i)**2)
d=dir/abs(dir)
call gEnqLineColour(icol)
call gSetLineColour(GORANGE)
call gDrawArcBy2D(0.0,256.0,187.0*d,height(187),int(d+1.0/2.0))
call gSetBrokenLine(GDOTTED)
do i = 187,30,-15
ht1 = height(i)
ht2 = height(i-15)
call gDrawLineBy2D(-7.5*d,-ht1)
call gDrawLineBy2D(-7.5*d,ht2)
end do
call gSetLineColour(icol)
call gSetBrokenLine(GSOLID)
return
end
!********************************************************************
subroutine pillar
!********************************************************************
! Draw bridge pillar at current position.
!********************************************************************
use gino_f90
call cubby3(3.0,115.0,30.0)
call gMoveBy3D(0.0,3.0,3.0)
call cubby3(3.0,25.0,24.0)
call gMoveBy3D(0.0,28.0,0.0)
call cubby3(3.0,25.0,24.0)
call gMoveBy3D(0.0,28.0,0.0)
call cubby3(3.0,25.0,24.0)
call gMoveBy3D(0.0,28.0,0.0)
call cubby3(3.0,25.0,24.0)
call gMoveBy3D(-10.0,-107.0,-8.0)
call cubby3(23.0,20.0,40.0)
return
end
!******************************************************************
subroutine cubby3(dx,dy,dz)
!******************************************************************
! Draw a cubiod with relative co-ordinates.
!******************************************************************
use gino_f90
call gDrawLineBy3D(dx,0.0,0.0)
call gDrawLineBy3D(0.0,dy,0.0)
call gDrawLineBy3D(-dx,0.0,0.0)
call gDrawLineBy3D(0.0,0.0,dz)
call gDrawLineBy3D(dx,0.0,0.0)
call gDrawLineBy3D(0.0,-dy,0.0)
call gDrawLineBy3D(-dx,0.0,0.0)
call gDrawLineBy3D(0.0,dy,0.0)
call gMoveBy3D(dx,0.0,0.0)
call gDrawLineBy3D(0.0,0.0,-dz)
call gMoveBy3D(-dx,-dy,dz)
call gDrawLineBy3D(0.0,0.0,-dz)
call gDrawLineBy3D(0.0,dy,0.0)
call gMoveBy3D(dx,-dy,dz)
call gDrawLineBy3D(0.0,0.0,-dz)
call gMoveBy3D(-dx,0.0,0.0)
return
end