PROGRAM MAIN DIMENSION MASK(2000),VERTEX(16),OUTBUF(101),Z(101) OPEN(UNIT=1,NAME='PLOT3D.PLT',TYPE='NEW') CALL ZPLOTS(1) C FIRST FIGURE C GENERATE DATA RUNNING PARALLEL TO THE X AXIS DO 20 NLINE=1,101 DO 10 NPOINT=1,101 R=SQRT((FLOAT(NLINE-51))**2+(FLOAT(NPOINT-51))**2)/10. OUTBUF(NPOINT)=1. IF(R.NE.0.)OUTBUF(NPOINT)=SIN(6.*R)/(6.*R) 10 CONTINUE C PLOT EACH LINE AS IT IS COMPUTED CALL PLOT3D(1010,-2.5,OUTBUF,2.5,.05,4.,-.05, 1 NLINE, 101,45.,45.,4.,5.,8.,MASK,VERTEX) 20 CONTINUE C DRAW A FRAME ON THE FIGURE CALL FRAMER(3,VERTEX,MASK) CALL ORIGIN(8.5,0.,0) CALL PLOT(0.,0.,999) CLOSE(UNIT=1) STOP END SUBROUTINE PLOT3D(IVXYZ,XDATA,YDATA,ZDATA,XSCALE, 1 YSCALE,ZSCALE,NLINE,NPNTS,PHI,THETA,XREF, 1 YREF,XLENTH,MASK,VERTEX) C C THE FOLLOWING PROGRAM IS TAKEN FROM COLLECTED ALGORITHMS FROM CACM C C ALGORITHM 483 C MASKED THREE DIMENSIONAL PLOT PROGRAM WITH ROTATIONS [J4] C C STEVEN L. WATKINS [REED. 26 MARCH 1973] APPLIED RESEARCH LABORATORIES, C THE UNIVERSITY OF TEXAS AT AUSTIN, AUSTIN, TX 78712 C C MASKED 3-DIMENSIONAL PLOT PROGRA WITH ROTATIONS C THIS ROUTINE WILL ACCEPT 3-DIMENSIONAL DATA IN VARIOUS C FORMS AS INPUT, ROTATE IT IN 3-SPACE TO ANY ANGLE, C AND PLOT THE PROJECTION OF THE RESULTING FIGURE ONTO THE C XY PLANE. LINEAR INTERPOLATION IS USED BETWEEN DATA C POINTS. THOSE LINES OF A FIGURE WHICH SHOULD BE HIDDEN BY C A PREVIOUS LINE ARE MASKED. C THE MASKING TECHNIQUE USED BY THIS ROUTINE IS BASED ON C TWO PEMISES - C LINES IN THE FOREGROUND (POSITIVE Z DIRECTION) C ARE PLOTTED BEFORE LINES IN THE BACKGROUND. C A LINE OR PORTION OF A LINE IS MASKED (HIDDEN) IF C IT LIES WITHIN THE REGION BOUNDED BY PREVIOUSLY C PLOTTED LINES. C EACH CALL TO PLOT3D CAUSES ONE LINE OF A FIGURE TO BE C PLOTTED. C TWO PARAMETERS OF THE PLOTTER ARE SET ON THE INITIAL CALL C FOR EACH FIGURE - C (PIPI) IS THE NUMBER OF PLOTTER INCREMENTS PER INCH. C (NYPI) IS THE NUMBER OF INCREMENTS AVAILABLE ACROSS THE C WIDTH OF THE PAPER (Y-DIRECTION) C WHEN A NEW FIGURE IS INITIATED, THE PLOTTER ORIGIN IS SET C AT THE BOTTOM OF THE PAPER BY PLOT3D AND SHOULD NOT BE C MOVED UNTILL THE FIGURE IS COMPLETED. C INPUT PARAMETERS - C (IVXYZ) IS A FOUR DIDGIT DECIMAL INTEGER WHICH IS USED TO C SELECT VARIOUS INPUT/OUTPUT OPTIONS. THESE DIGITS, IN C DECREASING ORDER OF MAGNITUDE, WILL BE REFFERED TO AS V, C X,Y, AND Z. C IF V .NE. 0, THE VERICES OF THE CURRENT FIGURE AND THEIR C PROJECTION ONTO THE Y=0 PLANE, WILL BE STORED IN A 16 C ENTRY REAL ARRAY (VERTEX), AND WILL BE UPDATED AS EACH C LINE IS PLOTTED. THESE COORDINATES ARE IN INCHES AND C RELATIVE TO THE CURRENT PLOTTER ORIGIN. THE X Y PAIRS C ARE ORDERED SO THAT THE FIRST PAIR COOREPONDS TO THE C FIRST POINT OF THE FIGURE, THE SECOND PAIR COORESPONDS C TO THE LAST POINT OF THE FIRST LINE, AND THE FOLLOWING C PAIRS ARE ORDERED IN A CIRCULAR FASHION. THE PAIRS ON THE C Y=0 PLANE OF THE FIGURE, THEN FOLLOW IN THE SAME ORDER. C IF V.EQ.0, THE VERTEX PARAMETER IS IGNORED, BUT SHOULD NOT C BE DELETED C IF X.EQ.0, THE X-COMPONENTS OF THIS LINE ARE ASSUMED TO BE C EQUALLY SPACED, AND ARE COMPUTED BY C X(I)=XDATA(1)+(I-1)*XSCALE C WHERE (XDATA)IS THE INITIAL VALUE IN INCHES AND (XSCALE) C IS THE SPACEING BETWEEN POINTS IN INCHES. IF X.NE.0, THE C X-COMPONENTS OF THIS LINE ARE READ FROM AN ARRAY AND C MODIFIED BY C X(I)=XDATA(I)*XSCALE C WHERE (XSCALE) IS A SCALE FACTOR. C THE SAME RELATIONS HOLD FOR THE Y-COMPONENTS, THAT IS, IF C Y=0 C Y(I)=YDATA(1)+(I-1)*YSCALE C AND IF Y.NE.0 C Y(I)=YDATA(I)*YSCALE C IF Z=0, THE Z-COMPONENTS OF THIS LINE ARE ALL ASSUMED TO C BE EQUAL, AND ARE COMPUTED BY C Z(I)=ZDATA(1)+(NLINE-1)*ZSCALE C WHERE (NLINE) IS SOME INTEGER ASSOCIATED WITH THIS LINE. C IF Z.NE.0, AGAIN WE HAVE C Z(I)=ZDATA(I)*ZSCALE C WHEN (NLINE) IS EQUAL TO ONE, IT INDICATES THE BEGINNING C OF A NEW FIGURE. A CALL TO PLOT3D WITH (NLINE) EQUAL TO C ZERO BEFORE INITIATING A NEW FIGURE SIMULATES A LINE DRAWN C AT THE BOTTOM OF THE PAGE. THEREFORE ONLY THOSE PORTIONS C OF A LINE LYING ABOVE LL PREVIOUS LINES WILL BE PLOTTED. C ALL OTHER PARAMETERS ARE IGNORED ON SUCH A CALL. C (NPTS) IS THE NUMBER OF POINTS ON THIS LINE, AND MAY BE C ALTERED FROM LINE TO LINE. C (PHI) AND (THETA) ARE THE TWO ANGLES (IN DEGREES) USED TO C SPECIFY THE DESIRED 3-DIMENSIONAL ROTATION. TGE FOLLOWING C TWO DEFINITIONS OF THESE ROTATIONS ARE EQUIVALENT - C IN TERMS OF ROTATIONS OF AXES, THE INITIAL SYSTEM OF AXES, C XYZ, IS ROTATED BY AN ANGLE (PHI) COUNTER CLOCK WISE ABOUT C THE Y-AXIS, AND THE RESULTANT SYSTEM IS LABELED THE TUV C AXES. THE TUV AXES ARE THEN ROTATED BY AN ANGLE (THETA) C COUNTERCLOCKWISE ABOUT THE T-AXIS, AND THIS FINAL SYSTEM C IS LABELED THE PQR AXES. THE PLOTTED FIGURE IS THE C PROJECTION OF THE ORIGINAL FIGURE ONTO THE PQ-PLANE. C IN TERMS OF ROTATIONS OF COORDINATES, THE FIGURE IS FIRST C ROTATED BY AN ANGLE (THETA)CLOCKWISE ABOUT THE X-AXIS. C THE RESULTANT FIGURE IS THEN ROTATED BY AN ANGLE (PHI) C CLOCKWISE ABOUT ITS Y-AXIS, THENPLOTTED FIGRE IS THE C PROJECTION OF THIS FINAL FIGURE ONTO THE XY-PLANE. C WARNING. SOME ROTATIONS WILL ALTER THE FOREGROUND/ C BACKGROUND RELATIONSHIPS BETWEEN THE LINES, AND C THUS THE ORDER IN WHICH THEY SHOULD BE PLOTTED. C (XREF) AND (YREF) ARE THE COORDINATES, IN INCHES, C RELATIVE TO THE PLOTTE ORIGIN, TO BE USED AS THE ORIGIN C OF THE FIGURE. C (XLENTH) IS THE LENGTH, IN INCHES, TO WHICH THE PLOT IS C RESTRICTED. ANY POINT WHICH EXCEEDS THIS LIMIT, OR THE C LIMITS OF THE PAPER IN THE Y DIRECTION(NYPI), WILL BE C SET TO THAT LIMIT. C (MASK) IS AN INTEGER ARRAY OF 2*XLENTH*PIPI ENTRIES WHICH C IS USED TO STORE THE MASK. THE CONTENTS OF THIS ARRAY C SHOULD NOT BE ALTERED DURING THE PLOTING OF ANY GIVEN C FIGURE. C ALL PARAMERS EXCEPT (MASK) AND (VERTEX) ARE RETURNED C UNCHANGED. C BETWEEN ANY TWO CALLS FOR THE SAME FIGURE, ANY PARAMETER C CAN BE MEANINGFULLY CHANGED EXCEPT (XLENTH), (MASK), AND C (VERTEX). C C **************************************************************** C APRIL 1982-MODIFICATIONS/INTERNAL AND EXTERNAL TO MAKE THIS C PROGRAM OPERATE WITH THE ZETA PLOTER HARDWARE/SOFTWARE C ON THE PDP-11/55 CODE 3513 N.W.C. CHINA LAKE, CA 93555 C MICHAEL N. LEVINE C **************************************************************** C THE ONLY INTERNAL MODIFICATION OF THIS ROTUINE WAS TO COMMENT OUT THE C LINE RESETTING THE PLOTTER ORIGIN. C C BEFORE THIS ROUTINE IS CALLED- THE ZETA SOFTWARE ROTUINES MUST BE C INITIALIZED. NO OUT OF THE ORDINARY CALLS NEED BE MADE. C THE MINIMUM "CALL ZPLOTS(LUN)" IS ENOUGH C C THE LAYOUT OF THE 2-D PLOT SURFACE AND THE 3-D IMAGE TO BE PLOTTED IS C AS FOLLOWS C LONG EDGE OF PAGE (11 INCHES) C ____________________________________________________________________________ C ! ! C ! O<=ZETA SOFTWARE ORIGIN AS SET BY CALL ORIGIN()__________________________! C ! ! ^ ^ ^ ! ! C ! ! | | | ! ! C ! !<=====|=======================|====10.9 INCHES=======================>! ! C ! !<=====3-D PLOT ONTO THIS PAGE DOES NOT GO PAST THESE LINES===========>! ! CS! ! | | | ! ! CH! ! X | Y ! ! CO! ! L | R ! ! CR! ! E | E ! ! CT! ! N | F ORIGIN OF 3-D AXIS ! ! C ! ! T | | / ! ! CE! ! H | V/ ! ! CD! !<=======YREF=================>X--------->+ 3-D Y AXIS(PHI ROTATES ! ! CG! ! | | | ABOUT Y) ! ! CE! ! | | | ! ! C(! ! | | V + 3-D X AXIS(THETA ROTATES ABOUT X) ! ! C8! ! V V 3-D Z AXIS IS UP OUT OF THE PAGE ! ! C.! !----------------------------------------------------------------------! ! C5! ! ! ! C)____________________________________________________________________________ C C EACH 3-D PLOT IS ACTUALLY A SEARIES OF CALLS TO PLOT3D, EACH WITH CTHE DATA FOR THE DRAWING OF ONE 3-D LINE (A CROSS HATCH PLOT IS ACTUALLY CTWO PLOTS OVERLAYING EACH OTHER WITH THE LINES RUNNING AT RIGHT ANGLES). CTHE FIRST LINE PLOTTED IS THE CLOSEST TO THE VIEWER, AND EACH SUCESSIVE CLINE TO BE PLOTTED IS FIRTHER BACK THAN ALL THE PREVIOIS LINES. EACH LINE CBEING "NPNTS" POINTS LONG. THE FIRST LINE IS LINE ONE (1) [NLINE=1] CAND EACH SUCESSIVE LINE INCREMENTS THE ARGUMENT "NLINE". (THE CALL WITH C"NLINE"=1 INITIALIZES PLOT3D FOR THE NEXT PLOT. (A SET UP CALL CAN BE MADE C WITH "NLINE"=0 TO NOT PLOT ANY POINTS UNDER THE SURFACE BUT A CALL WITH C "NLINE"=1 MUST THEN BE MADE SUBSEQUENT TO THAT CALL. C CEACH OF THE THREE(3) NUMBERS THAT DESCRIBE THE POINTS MAKEING UP CEACH LINE (X,Y,Z) CAN BE INDEPENDENTLY DESCRIBED IN TWO DIFFERENT WAYS CAS OUTLINED IN THE PREVIOUS SECTION. WHEN THE DATA IS AN ARRAY OF CNUMBERS FOR [X,Y,Z]DATA, THE UNITS ARE THOSE OF THEVARIBALE BEING PLOTTED C AND [X,Y,Z]SCALE IS THE CONVERSION FACTOR FROM THOSE UNITS TO INCHES C ON THE PLOT. WHERE THE OPTION IS A STEADILY INCREASING VALUE, C[X,Y,Z]DATA IS THE STARTING POSITION IN INCHES FROM THE 3-D PLOT ORIGIN C ALONG THE 3-D AXIS OF THE FIRST POINT AND THE VALUE OF [X,Y,Z]SCALE C IS THE INCREMENT IN INCHES ALONG THE RESPECTIVE 3-D AXIS FOR SUBSEQUENT C POINTS C C INTEGER HIGH,OLDHI,OLDLOW DIMENSION XDATA(1),YDATA(1),ZDATA(1),MASK(1), 1 VERTEX(1) DATA INIT,JVXYZ,SPHI,STHETA/-1,-1,-1.E38, 1 -1.E38/ C INITIALIZATION PROCEDURES C INITIALIZAION PROCEDURE FOR A NEW FIGURE C TEST FOR SPECIAL MASK MODIFYING CALL IF(NLINE.EQ.0)GO TO 550 C DETERMINE IF INTIALIZATION IS REQUIRED IF(NLINE.NE.1)GO TO 20 C SET PLOTTER PARAMTERS PIPI=100. NYPI=1090 C RESET PLOTTER ORIGIN TO BOTTOM OF PLOT PAGE I=NYPI+100 C CALL IPLOT(0,-I,-3) C COMPUTE LENGTH OF PLOT PAGE IN INCREMENTS LIMITX=XLENTH*PIPI+.5 I=LIMITX+LIMITX C INITIALIZE MASKING ARRAY OVR THE LENGTH OF THE PLOT PAGE DO 10 K=1,I MASK(K)=INIT 10 CONTINUE INIT=-1 C SET THE NECESSARY INDICATORS FOR THE FIRST LINE OF A NEW FIGURE INCI=-1 I=0 C INPUT TYP AND VERTEX INITALIZATION C DETERMINE IF INITIALIZATION IS REQUIRED 20 IF(JVXYZ.EQ.IVXYZ)GO TO 70 C SET INDICATORS FOR TYPES OF INPUT DATA AND SAVEING VERTICES JVXYZ=IVXYZ INDZ=1 INDY=1 INDX=1 INDV=1 IF(JVXYZ.LT.1000)GO TO 30 INDV=2 JVXYZ=JVXYZ-1000 30 IF(JVXYZ.LT.100)GO TO 40 INDX=2 JVXYZ=JVXYZ-100 40 IF(JVXYZ.LT.10)GO TO 50 INDY=2 JVXYZ=JVXYZ-10 50 IF(JVXYZ.LT.1)GO TO 60 INDZ=2 60 JVXYZ=IVXYZ C ROTATION INITALIZATION C DETERMINE IF INITIALIZATION IS REQUIRED 70 IF((PHI.EQ.SPHI).AND.(THETA.EQ.STHETA))GO TO 80 C COMPUTE ROTATION FACTORS SPHI=SIN(.0174532925*PHI) CPHI=COS(.0174532925*PHI) STHETA=SIN(.0174532925*THETA) CTHETA=COS(.0174532925*THETA) A11=CPHI A13=-SPHI A21=STHETA*SPHI A22=CTHETA A23=STHETA*CPHI SPHI=PHI STHETA=THETA C PROCESSING PROCEDURES C SET FLAG TO MOVE THROUGH THE DATA ARRAYS IN THE OPPOSET DIRECTION 80 INCI=-INCI C SET INDICATOR TO THE FIRST POINT TO BE PROCESSED IF(I.NE.0)I=NPNTS+1 C LOOP TOPROCESS EACH POINT IN THE DATA ARRAYS DO 530 K=1,NPNTS C DATA CALCULATION I=I+INCI GO TO (90,100),INDX 90 X=XDATA(1)+(I-1)*XSCALE GO TO 110 100 X=XDATA(I)*XSCALE 110 GO TO (120,130),INDY 120 Y=YDATA(1)+(I-1)*YSCALE GO TO 140 130 Y=YDATA(I)*YSCALE 140 GO TO (150,160),INDZ 150 Z=ZDATA(1)+(NLINE-1)*ZSCALE GO TO 170 160 Z=ZDATA(I)*ZSCALE C DATA ROTATION 170 XXX=A11*X+A13*Z+XREF XX=XXX IX=IROUND(XX*PIPI) YYY=A21*X+A23*Z+YREF YY=YYY+A22*Y IY=IROUND(YY*PIPI) C RESTRICT FIGURE TO PLOT PAGE IF(IX.LE.0)IX=1 IF(IX.GT.LIMITX)IX=LIMITX IF(IY.LT.10)IY=10 IF(IY.GT.NYPI)IY=NYPI IF(K.NE.1)GO TO 250 C (LOC) IS THE POSITION OF THE PREVIOUS POINT WITH RESPECT C TO THE MASK C +1 ABOVE THE MASK C 0 WITHIN THE LIMITS OF THE MASK C -1 BELOW THE MASK C PROCEDURE FOR INITIAL POINT OF EACH LINE C LOCATE INITIAL POINT WITH RESPECT TO THE MASK THEN C UPDATE TE MASK LOW=IX+IX HIGH=LOW-1 MLOW=MASK(LOW) MHIGH=MASK(HIGH) IF(MHIGH-IY)200,210,180 180 IF(MLOW-IY)190,230,220 190 LOCOLD=0 GO TO 240 200 MASK(HIGH)=IY IF(MLOW.EQ.-1)MASK(LOW)=IY 210 LOCOLD=+1 GO TO 240 220 MASK(LOW)=IY 230 LOCOLD=-1 C MOVE THE RAISED PEN TO THIS INITIAL POINT 240 CALL IPLOT(IX,IY,3) JX=IX JY=IY IYREF=IY C STORE VERTICES IF REQUESTED IF(INDV.EQ.1)GO TO 530 INDEX=INCI+6 VERTEX(INDEX)=XX VERTEX(INDEX+1)=YY VERTEX(INDEX+8)=XXX VERTEX(INDEX+9)=YYY IF(NLINE.NE.1)GO TO 530 VERTEX(1)=XX VERTEX(2)=YY VERTEX(9)=XXX VERTEX(10)=YYY GO TO 530 C SPECAL CASE WHERE CHANGE IN X COORDINATE IS ZERO C A SPECIAL PROVISION IS MADE AT THIS POINT SO THAT A LINE C WILL NOT MASK ITSELF AS LONG AS THE X COORDINATE REMAINS CNSTANT 250 IF(IX.NE.JX)GO TO 260 JY=IY GO TO 280 C COMPUT CONSTANTS FOR LINEAR INTERPOLATION 260 YINC=FLOAT(IY-JY)/ABS(FLOAT(IX-JX)) INCX=(IX-JX)/IABS(IX-JX) YJ=JY C PREFORM LINEAR INTRPOLATION AT EACH INCREMENTAL STEP ON C THE X AXIS 270 JX=JX+INCX YJ=YJ+YINC JY=IROUND(YJ) C LOCATE THE CURRENT POINT WITH RESPECT TO THE MASK AT THAT C POINT THEN PLOT THE INCREMENT AS A FUNCTIO OF THE C LOCATION OF THE PREVIOUS POINT WITH RESPECT TO ITS MASK LOW=JX+JX HIGH=LOW-1 MLOW=MASK(LOW) MHIGH=MASK(HIGH) 280 IF(MHIGH-JY)300,300,290 290 IF(MLOW-JY)310,320,320 C THE CURRENT POINT IS ABOVE THE MASK 300 LOC=+1 IF(LOCOLD)360,370,430 C THE CURRENT POINT IS WITHIN THE MASK 310 LOC=0 IF(LOCOLD)340,350,330 C THE CURRENT POINT IS BLOW THE MASK 320 LOC=-1 IF(LOCOLD)510,450,440 C PLOT FROM ABOVE THE MASK T WITHIN THE MASK 330 IF(MHIGH.LE.IYREF)CALL IPLOT(JX,MHIGH,2) GO TO 350 C PLOT FROM ELOW THE MASK TO WITHIN THE MASK 340 IF(MLOW.GE.IYREF)CALL IPLOT(JX,MLOW,2) C PLOT FROM WITHIN THE MASK TO WITHIN THE MASK 350 CALL IPLOT(JX,JY,3) GO TO 520 C PLOT FROM BELOW THE MASK TO ABOVE THE MASK 360 IF(MLOW-IYREF)370,380,380 C PLOT FROM WITHIN THE MASK TO ABOVE THE MASK 370 IF(MHIGH-IYREF)400,390,390 380 CALL IPLOT(JX,MLOW,2) 390 CALL IPLOT(JX,MHIGH,3) GO TO 430 400 IF(MHIGH.EQ.-1)GO TO 430 OLDHI=HIGH-2*INCX IF(MASK(OLDHI)-JY)420,420,410 410 CALL IPLOT(JX,JY,3) GO TO 430 420 CALL IPLOT(JX-INCX,MASK(OLDHI),3) C PLOT FROM ABOVE THE MASK TO ABOVE THE MASK 430 MASK(HIGH)=JY IF(MLOW.EQ.-1)MASK(LOW)=JY CALL IPLOT(JX,JY,2) GO TO 520 C PLOT FROM ABOVE THE MASK TO BELOW THE MASK 440 IF(MHIGH-IYREF)460,460,450 C PLOT FROM WITHIN THE MASK TO BELOW THE MASK 450 IF(MLOW-IYREF)470,470,480 460 CALL IPLOT(JX,MHIGH,2) 470 CALL IPLOT(JX,MLOW,3) GO TO 510 480 OLDLOW=LOW-2*INCX IF(MASK(OLDLOW)-JY)490,500,500 490 CALL IPLOT(JX,JY,3) GO TO 510 500 CALL IPLOT(JX-INCX,MASK(OLDLOW),3) C PLOT FROM BELOW THE MASK TO BELOW THE MASK 510 MASK(LOW)=JY CALL IPLOT(JX,JY,2) 520 IYREF=JY LOCOLD=LOC IF(JX.NE.IX)GO TO 270 530 CONTINUE C RAISE PEN CALL IPLOT(JX,JY,3) C STORE VERTICES IF REQUESTED IF(INDV.EQ.1)GO TO 540 INDEX=-INCI+6 VERTEX(INDEX)=XX VERTEX(INDEX+1)=YY VERTEX(INDEX+8)=XXX VERTEX(INDEX+9)=YYY IF(NLINE.NE.1)GO TO 540 VERTEX(3)=XX VERTEX(4)=YY VERTEX(11)=XXX VERTEX(12)=YYY 540 I=I-1 C RETURN TO CALLING PROGRAM RETURN C OPTION TO MODIFY THE MASKING TECNIQUE TO BE USED ON THE C FOLLOWING FIGURE SO AS T PLOT ONLY ABOVE ALL PREVIOUS LINES 550 INIT=0 RETURN END SUBROUTINE FRAMER(IHCOR,VERTEX,MASK) C ROUTINE TO PLOT A FRAME ON THE PROJECTION OF A C 3-DIMENSIONAL FIGURE AS DRAWN BY PLOT3D. C INPUT PARAMETERS - C IHCOR NUMBER OF THE VERTEX OF THE FIGURE WHICH C APPEARS TO BE FURTHEST IN THE BACKGROUND C (MINUS Z DIRECTION) C VERTEX ARRAY CONTAINING THE CORRORDINATES OF THE C VERTICES OF THIS FIGURE AS RETURNED FROM C PLOT3D ON THE LAST CALL. C MASK ARRAY CONTAINING THE MASK FOR THIS FIGURE C AS RETURNED BY PLOT 3D ON THE LAST CALL. C THE VERTICES OF THE FRAME ARE NUMBERED (1-4) IN THE SAME C ORDER AS THEIR COORDINATES APPEAR IN VERTEX C THE MASK ARRAY IS ALTERED BY THIS ROUTINE C BUT THE PLOTTER ORIGIN IS NOT MOVED DIMENSION VERTEX(1),MASK(1),ARRAY(14) I=2*IHCOR IF(I.LT.2)I=2 IF(I.GT.8)I=8 C THE VERTICES WHICH MAY BE HIDDEN C ARE DRAWN BY A CALL TO PLOT3D ARRAY(1)=VERTEX(I-1) ARRAY(8)=VERTEX(I) ARRAY(2)=VERTEX(I+7) ARRAY(9)=VERTEX(I+8) ARRAY(4)=ARRAY(2) ARRAY(11)=ARRAY(9) ARRAY(6)=ARRAY(2) ARRAY(13)=ARRAY(9) ARRAY(7)=ARRAY(1) ARRAY(14)=ARRAY(8) I=I-2 IF(I.EQ.0)I=8 ARRAY(3)=VERTEX(I+7) ARRAY(10)=VERTEX(I+8) I=I+4 IF(I.GT.8)I=I-8 ARRAY(5)=VERTEX(I+7) ARRAY(12)=VERTEX(I+8) CALL PLOT3D(110,ARRAY,ARRAY(8),0.,1.,1.,0., 1 2,7,0.,0.,0.,0.,0.,MASK,0) C THE REMAINING VERTICES ARE DRAWN BY CALLS TO PLOT CALL PLOT(VERTEX(I-1),VERTEX(I),3) I=I-2 DO 10 J=1,3 I=I+2 IF(I.EQ.10)I=2 CALL PLOT(VERTEX(I+7),VERTEX(I+8),2) 10 CONTINUE CALL PLOT(VERTEX(I-1),VERTEX(I),2) I=I-2 IF(I.EQ.0)I=8 CALL PLOT(VERTEX(I-1),VERTEX(I),3) CALL PLOT(VERTEX(I+7),VERTEX(I+8),2) RETURN END INTEGER FUNCTION IROUND(X) IROUND=IFIX(X+.5) RETURN END SUBROUTINE IPLOT(IX,IY,IP) IF(IP.EQ.3)GO TO 1 IF(LASTD.EQ.2)GO TO 2 X=FLOAT(LASTX)/100. Y=FLOAT(LASTY)/100. CALL PLOT(X,Y,3) 2 X=FLOAT(IX)/100. Y=FLOAT(IY)/100. CALL PLOT(X,Y,IP) LASTD=2 RETURN 1 LASTD=3 LASTX=IX LASTY=IY RETURN END