INTERFACE TO SUBROUTINE J06ZHK [C] (FONTNM,FONTSZ,LCOL,NCOL) CHARACTER*(*) FONTNM REAL*4 FONTSZ [REFERENCE] LOGICAL LCOL [REFERENCE] INTEGER*4 NCOL [REFERENCE] END INTERFACE TO SUBROUTINE J06ZHL [C] (STR,X,Y,ROT) CHARACTER*(*) STR REAL*4 X [REFERENCE] REAL*4 Y [REFERENCE] REAL*4 ROT [REFERENCE] END SUBROUTINE J06ZHM(STR) C NAG GRAPHICS LIBRARY, MARK 4 RELEASE. NAG COPYRIGHT 1994. C C NAG Graphical Interface - Inventor - double to single precision C --------------------------------------------------------------- C C The characters are output using the Hershey routine, as Inventor C text is difficult with character size. C No proportional spacing option is included in this routine. C C .. Scalar Arguments .. CHARACTER*(*) STR C .. Scalars in Common .. DOUBLE PRECISION CHSCAL, COSA, DGTORD, DX, DX1, DXO, DY, DY1, * DYO, RDTODG, RH, RW, SINA, UX, UY, XNFAC, * XNFAC1, XPOS, YNFAC, YNFAC1, YPOS, ZGCHT, ZGCPR, * ZGCPT, ZGCPX, ZGCPY, ZGCSPX, ZGCSPY, ZGCWD, * ZGCX, ZGCY, ZGMSZ, ZGTPX, ZGTPY, ZGXD, ZGXHIH, * ZGXLOW, ZGXMAX, ZGXMIN, ZGYD, ZGYHIH, ZGYLOW, * ZGYMAX, ZGYMIN INTEGER NGCOL, NGFONT, NGFSTL, NGIHAT, NGIPEN, NGLSTL, * NGMARG, NLEN LOGICAL ATFLAG, LCHDEF, LCOLOR, LMKDEF, LMSZAF, POLAR, * ZGXDIR, ZGYDIR C .. Arrays in Common .. DOUBLE PRECISION COLB(2,17), COLG(2,17), COLR(2,17) CHARACTER*26 FNTLST(15) C .. Local Scalars .. DOUBLE PRECISION SWIDTH, UX1, UY1, W1T, W2T, W3T, W4T, X, Y REAL FONTSZ, ROT1 INTEGER FONTLN, I, MARGIN LOGICAL PLCOOR, PROPOR CHARACTER*2 CHR CHARACTER*26 FONTNM C .. External Subroutines .. EXTERNAL J06YBF, J06ZHK, J06ZHL, J06ZHP, J06ZHQ C .. External Functions .. DOUBLE PRECISION J06YAW, J06YAX INTEGER J06ZUF EXTERNAL J06YAW, J06YAX, J06ZUF C .. Intrinsic Functions .. INTRINSIC ATAN2, REAL C .. Common blocks .. COMMON /AJ06WB/ZGXLOW, ZGXHIH, ZGYLOW, ZGYHIH COMMON /AJ06XA/ZGXMIN, ZGXMAX, ZGYMIN, ZGYMAX, NGMARG COMMON /AJ06YH/ATFLAG COMMON /BJ06YA/NGCOL, NGLSTL, NGFONT, NGFSTL, NGIHAT COMMON /BJ06ZH/NLEN COMMON /CJ06XA/ZGMSZ, ZGCWD, ZGCHT, ZGCSPX, ZGCSPY, * ZGCPX, ZGCPY, NGIPEN COMMON /DJ06ZH/XPOS, YPOS, DXO, DYO, UX, UY COMMON /EJ06ZH/DX, DY, ZGCX, ZGCY, XNFAC, YNFAC, DX1, * DY1, SINA, COSA, XNFAC1, YNFAC1 COMMON /FJ06XA/ZGTPX, ZGTPY, LCHDEF, LMKDEF, LMSZAF COMMON /FJ06ZH/RW, RH COMMON /HJ06XA/ZGCPR, ZGCPT, POLAR COMMON /KJ06XA/DGTORD, RDTODG COMMON /KJ06ZH/CHSCAL COMMON /XJ06XA/ZGXD, ZGYD, ZGXDIR, ZGYDIR COMMON /YJ06XA/COLR, COLG, COLB, LCOLOR COMMON /ZJ06ZA/FNTLST C .. Save statement .. SAVE /AJ06YH/, /AJ06WB/, /AJ06XA/, /BJ06YA/, * /BJ06ZH/, /CJ06XA/, /DJ06ZH/, /EJ06ZH/, * /FJ06XA/, /FJ06ZH/, /HJ06XA/, /KJ06XA/, * /KJ06ZH/, /XJ06XA/, /YJ06XA/, /ZJ06ZA/ C .. Executable Statements .. C C If angled text flag is set calculate angles C Plot the string horizontally if angled text flag is not set C IF (ATFLAG) THEN C C Calculate and set apparent text angle (in radians) C 1. linear coordinates : (ZGTPX,ZGTPY) indicates direction C 2. polar coordinates : ZGTPY denotes the angle in degrees C ZGTPX is not used C The apparent text angle is used for plotting of characters C C Apply scaling factors to the basic character spacing C Calculate apparent character up direction C IF ( .NOT. POLAR) THEN UX1 = ZGTPX*(ZGYMAX-ZGYMIN) UY1 = ZGTPY*(ZGXMAX-ZGXMIN) ROT1 = REAL(ATAN2(UY1,UX1)) C DXO = DXO*ZGXD*ZGYD DYO = DYO*ZGXD*ZGYD DX1 = DX1*XNFAC DY1 = DY1*YNFAC ELSE ROT1 = REAL(ZGTPY*DGTORD) C DXO = DXO*ZGXD DYO = DYO*ZGXD DX1 = DX1*XNFAC DY1 = DY1*XNFAC END IF ELSE ROT1 = 0.0 C DXO = DXO*ZGXD DYO = DYO*ZGXD DX1 = DX1*XNFAC DY1 = DY1*YNFAC END IF C C Character spacing after transformation C DX = DX1*COSA - DY1*SINA DY = DX1*SINA + DY1*COSA C C Text font C FONTNM = FNTLST(NGFONT) FONTLN = J06ZUF(FONTNM) FONTSZ = REAL(RH*YNFAC*CHSCAL) CALL J06ZHK(FONTNM(1:FONTLN)//CHAR(0),FONTSZ,LCOLOR,NGCOL) C C Text is drawn in linear ndc coordinates C store original values and calculate new cursor position C CALL J06ZHQ(W1T,W2T,W3T,W4T,MARGIN,PLCOOR,X,Y) C C Draw one character at a time C DO 20 I = 1, NLEN IF (ZGCPX.GE.ZGXLOW .AND. ZGCPX.LE.ZGXHIH .AND. * ZGCPY.GE.ZGYLOW .AND. ZGCPY.LE.ZGYHIH) THEN CHR(1:1) = STR(I:I) CHR(2:2) = CHAR(0) CALL J06ZHL(CHR,REAL(J06YAX(ZGCPX)),REAL(J06YAW(ZGCPY)), * ROT1) END IF CALL J06YBF(DX*ZGXD,DY*ZGYD) 20 CONTINUE C C Reset data region and ensure that current position is updated C PROPOR = .FALSE. CALL J06ZHP(W1T,W2T,W3T,W4T,MARGIN,PLCOOR,PROPOR,SWIDTH,NLEN) C RETURN C END